From 975b541d2652b157029251071aeb976a7a237b59 Mon Sep 17 00:00:00 2001 From: Nick Harper Date: Thu, 26 Jan 2012 18:36:43 -0800 Subject: [PATCH] Fix arc patch in git-svn repos Summary: Check that the base revision is a valid git ref before trying to create a branch starting at that rev. When arc patch is used in a git repo using the git-svn bridge, the base reversion is a uri for the svn rev, not a git ref. Test Plan: run arc patch on a git-svn repo, run it on a pure git repo, and verify it works for both Reviewers: epriestley, btrahan CC: jungejason, aran, epriestley Differential Revision: https://secure.phabricator.com/D1505 --- src/workflow/patch/ArcanistPatchWorkflow.php | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/workflow/patch/ArcanistPatchWorkflow.php b/src/workflow/patch/ArcanistPatchWorkflow.php index 41dcd693..6e0dd8ce 100644 --- a/src/workflow/patch/ArcanistPatchWorkflow.php +++ b/src/workflow/patch/ArcanistPatchWorkflow.php @@ -256,7 +256,16 @@ EOTEXT $repository_api = $this->getRepositoryAPI(); $base_revision = $bundle->getBaseRevision(); - if ($base_revision) { + // verify the base revision is valid + // in a working copy that uses the git-svn bridge, the base revision might + // be a svn uri instead of a git ref + list($err) = exec_manual( + '(cd %s; git rev-parse --verify %s)', + $repository_api->getPath(), + $base_revision + ); + + if ($base_revision && !$err) { execx( '(cd %s; git checkout -b %s %s)', $repository_api->getPath(),