From b64f252f8b3c69f817f296812cac996cd3c1a51b Mon Sep 17 00:00:00 2001 From: epriestley Date: Wed, 14 Sep 2011 11:23:39 -0700 Subject: [PATCH] Fix a dirname() edge case in Diffusion Summary: dirname('x') returns '.', not '/'; this caused some issues for repositories with files at the root. There are some cases in the parsers where I should probably swap this out too but I'll wait until I'm doing some more rigorous testing since that stuff is a bit fragile and this fixes an immediate issue. Test Plan: Ran unit tests. Viewed a file at root level in a test repository. Reviewers: jungejason, nh, tuomaspelkonen, aran Reviewed By: nh CC: aran, nh Differential Revision: 932 --- src/__phutil_library_map__.php | 2 + .../browse/svn/DiffusionSvnBrowseQuery.php | 2 +- .../pathid/base/DiffusionPathIDQuery.php | 5 +++ .../__tests__/DiffusionPathQueryTestCase.php | 37 +++++++++++++++++++ .../query/pathid/base/__tests__/__init__.php | 13 +++++++ 5 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 src/applications/diffusion/query/pathid/base/__tests__/DiffusionPathQueryTestCase.php create mode 100644 src/applications/diffusion/query/pathid/base/__tests__/__init__.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 5c4cebef84..fc28cb30f0 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -262,6 +262,7 @@ phutil_register_library_map(array( 'DiffusionPathChangeQuery' => 'applications/diffusion/query/pathchange/base', 'DiffusionPathCompleteController' => 'applications/diffusion/controller/pathcomplete', 'DiffusionPathIDQuery' => 'applications/diffusion/query/pathid/base', + 'DiffusionPathQueryTestCase' => 'applications/diffusion/query/pathid/base/__tests__', 'DiffusionPathValidateController' => 'applications/diffusion/controller/pathvalidate', 'DiffusionRepositoryController' => 'applications/diffusion/controller/repository', 'DiffusionRepositoryPath' => 'applications/diffusion/data/repositorypath', @@ -918,6 +919,7 @@ phutil_register_library_map(array( 'DiffusionHomeController' => 'DiffusionController', 'DiffusionLastModifiedController' => 'DiffusionController', 'DiffusionPathCompleteController' => 'DiffusionController', + 'DiffusionPathQueryTestCase' => 'PhabricatorTestCase', 'DiffusionPathValidateController' => 'DiffusionController', 'DiffusionRepositoryController' => 'DiffusionController', 'DiffusionSvnBrowseQuery' => 'DiffusionBrowseQuery', diff --git a/src/applications/diffusion/query/browse/svn/DiffusionSvnBrowseQuery.php b/src/applications/diffusion/query/browse/svn/DiffusionSvnBrowseQuery.php index 4bc00f9650..2393e86fef 100644 --- a/src/applications/diffusion/query/browse/svn/DiffusionSvnBrowseQuery.php +++ b/src/applications/diffusion/query/browse/svn/DiffusionSvnBrowseQuery.php @@ -36,7 +36,7 @@ final class DiffusionSvnBrowseQuery extends DiffusionBrowseQuery { $conn_r = $repository->establishConnection('r'); - $parent_path = dirname($path); + $parent_path = DiffusionPathIDQuery::getParentPath($path); $path_query = new DiffusionPathIDQuery( array( $path, diff --git a/src/applications/diffusion/query/pathid/base/DiffusionPathIDQuery.php b/src/applications/diffusion/query/pathid/base/DiffusionPathIDQuery.php index ad3133e053..ae8208df92 100644 --- a/src/applications/diffusion/query/pathid/base/DiffusionPathIDQuery.php +++ b/src/applications/diffusion/query/pathid/base/DiffusionPathIDQuery.php @@ -53,4 +53,9 @@ final class DiffusionPathIDQuery { return '/'.trim($path, '/'); } + public static function getParentPath($path) { + $path = self::normalizePath($path); + return dirname($path); + } + } diff --git a/src/applications/diffusion/query/pathid/base/__tests__/DiffusionPathQueryTestCase.php b/src/applications/diffusion/query/pathid/base/__tests__/DiffusionPathQueryTestCase.php new file mode 100644 index 0000000000..5a3c0cbbcd --- /dev/null +++ b/src/applications/diffusion/query/pathid/base/__tests__/DiffusionPathQueryTestCase.php @@ -0,0 +1,37 @@ +assertEqual( + '/', + DiffusionPathIDQuery::getParentPath('/'), + 'Parent of /'); + $this->assertEqual( + '/', + DiffusionPathIDQuery::getParentPath('x.txt'), + 'Parent of x.txt'); + $this->assertEqual( + '/a', + DiffusionPathIDQuery::getParentPath('/a/b'), + 'Parent of /a/b'); + } + +} + diff --git a/src/applications/diffusion/query/pathid/base/__tests__/__init__.php b/src/applications/diffusion/query/pathid/base/__tests__/__init__.php new file mode 100644 index 0000000000..c088a54c59 --- /dev/null +++ b/src/applications/diffusion/query/pathid/base/__tests__/__init__.php @@ -0,0 +1,13 @@ +