diff --git a/src/applications/diffusion/conduit/DiffusionBranchQueryConduitAPIMethod.php b/src/applications/diffusion/conduit/DiffusionBranchQueryConduitAPIMethod.php --- a/src/applications/diffusion/conduit/DiffusionBranchQueryConduitAPIMethod.php +++ b/src/applications/diffusion/conduit/DiffusionBranchQueryConduitAPIMethod.php @@ -46,22 +46,12 @@ // NOTE: We can't use DiffusionLowLevelGitRefQuery here because // `git for-each-ref` does not support `--contains`. - if ($repository->isWorkingCopyBare()) { - list($stdout) = $repository->execxLocalCommand( - 'branch --verbose --no-abbrev --contains %s -- %Ls', - $contains, - $patterns_argv); - $ref_map = DiffusionGitBranch::parseLocalBranchOutput( - $stdout); - } else { - list($stdout) = $repository->execxLocalCommand( - 'branch -r --verbose --no-abbrev --contains %s -- %Ls', - $contains, - $patterns_argv); - $ref_map = DiffusionGitBranch::parseRemoteBranchOutput( - $stdout, - DiffusionGitBranch::DEFAULT_GIT_REMOTE); - } + list($stdout) = $repository->execxLocalCommand( + 'branch --verbose --no-abbrev --contains %s -- %Ls', + $contains, + $patterns_argv); + $ref_map = DiffusionGitBranch::parseLocalBranchOutput( + $stdout); $refs = array(); foreach ($ref_map as $ref => $commit) { diff --git a/src/applications/diffusion/query/lowlevel/DiffusionLowLevelGitRefQuery.php b/src/applications/diffusion/query/lowlevel/DiffusionLowLevelGitRefQuery.php --- a/src/applications/diffusion/query/lowlevel/DiffusionLowLevelGitRefQuery.php +++ b/src/applications/diffusion/query/lowlevel/DiffusionLowLevelGitRefQuery.php @@ -33,16 +33,9 @@ $prefixes = array(); - if ($repository->isWorkingCopyBare()) { - $branch_prefix = 'refs/heads/'; - } else { - $remote = DiffusionGitBranch::DEFAULT_GIT_REMOTE; - $branch_prefix = 'refs/remotes/'.$remote.'/'; - } - + $branch_prefix = 'refs/heads/'; $tag_prefix = 'refs/tags/'; - if ($with_refs || count($ref_types) > 1) { // If we're loading refs or more than one type of ref, just query // everything. diff --git a/src/applications/repository/engine/PhabricatorRepositoryPullEngine.php b/src/applications/repository/engine/PhabricatorRepositoryPullEngine.php --- a/src/applications/repository/engine/PhabricatorRepositoryPullEngine.php +++ b/src/applications/repository/engine/PhabricatorRepositoryPullEngine.php @@ -366,8 +366,12 @@ $fetch_rules = $this->getGitFetchRules($repository); + // For very old non-bare working copies, we need to use "--update-head-ok" + // to tell Git that it is allowed to overwrite whatever is currently + // checked out. See T13280. + $future = $repository->getRemoteCommandFuture( - 'fetch --prune -- %P %Ls', + 'fetch --prune --update-head-ok -- %P %Ls', $repository->getRemoteURIEnvelope(), $fetch_rules);