diff --git a/src/applications/diffusion/config/PhabricatorDiffusionConfigOptions.php b/src/applications/diffusion/config/PhabricatorDiffusionConfigOptions.php --- a/src/applications/diffusion/config/PhabricatorDiffusionConfigOptions.php +++ b/src/applications/diffusion/config/PhabricatorDiffusionConfigOptions.php @@ -65,7 +65,13 @@ pht("Disable Closing Audits"), )) ->setDescription(pht('Controls whether Author can Close Audits.')), - + $this->newOption('diffusion.browser.folders_before_files', 'bool', false) + ->setBoolOptions( + array( + pht("Display folders before files"), + pht("Do not display folders before files"), + )) + ->setDescription(pht('Controls whether folders are displayed before files in repository browser.')), $this->newOption('bugtraq.url', 'string', '') ->addExample('https://bugs.php.net/%BUGID%', pht('PHP bugs')) ->addExample('/%BUGID%', pht('Local Maniphest URL')) diff --git a/src/applications/diffusion/view/DiffusionBrowseTableView.php b/src/applications/diffusion/view/DiffusionBrowseTableView.php --- a/src/applications/diffusion/view/DiffusionBrowseTableView.php +++ b/src/applications/diffusion/view/DiffusionBrowseTableView.php @@ -28,6 +28,8 @@ $need_pull = array(); $rows = array(); + $folder_rows = array(); + $display_folders_first = PhabricatorEnv::getEnvConfig('diffusion.browser.folders_before_files'); $show_edit = false; foreach ($this->paths as $path) { @@ -76,15 +78,27 @@ $dict[$k] = phutil_tag('span', array('id' => $uniq), ''); } - $rows[] = array( - $browse_link, - idx($dict, 'lint'), - $dict['commit'], - $dict['author'], - $dict['details'], - $dict['date'], - $dict['time'], - ); + if ($display_folders_first && $file_type == DifferentialChangeType::FILE_DIRECTORY) { + $folder_rows[] = array( + $browse_link, + idx($dict, 'lint'), + $dict['commit'], + $dict['author'], + $dict['details'], + $dict['date'], + $dict['time'], + ); + } else { + $rows[] = array( + $browse_link, + idx($dict, 'lint'), + $dict['commit'], + $dict['author'], + $dict['details'], + $dict['date'], + $dict['time'], + ); + } } if ($need_pull) { @@ -104,7 +118,7 @@ $show_lint = ($branch && $branch->getLintCommit()); $lint = $request->getLint(); - $view = new AphrontTableView($rows); + $view = new AphrontTableView(array_merge($folder_rows, $rows)); $view->setHeaders( array( pht('Path'),