git p4: allow short ref names to --branch
For a clone or sync, --branch says where the newly imported branch should go, or which existing branch to sync up. It takes an argument, which is currently either something that starts with "refs/", or if not, "refs/heads/p4" is prepended. Putting it in heads seems like a bad default; these should go in remotes/p4/ in most situations. Make that the new default, and be more liberal in the form of the branch name. Signed-off-by: Pete Wyckoff <pw@padd.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
182edef5b4
commit
40d69ac3a4
@ -173,8 +173,11 @@ subsequent 'sync' operations.
|
||||
|
||||
--branch <branch>::
|
||||
Import changes into given branch. If the branch starts with
|
||||
'refs/', it will be used as is, otherwise the path 'refs/heads/'
|
||||
will be prepended. The default branch is 'p4/master'.
|
||||
'refs/', it will be used as is. Otherwise if it does not start
|
||||
with 'p4/', that prefix is added. The branch is assumed to
|
||||
name a remote tracking, but this can be modified using
|
||||
'--import-local', or by giving a full ref name. The default
|
||||
branch is 'master'.
|
||||
+
|
||||
This example imports a new remote "p4/proj2" into an existing
|
||||
git repository:
|
||||
|
12
git-p4.py
12
git-p4.py
@ -2841,8 +2841,18 @@ class P4Sync(Command, P4UserMap):
|
||||
if not self.silent and not self.detectBranches:
|
||||
print "Performing incremental import into %s git branch" % self.branch
|
||||
|
||||
# accept multiple ref name abbreviations:
|
||||
# refs/foo/bar/branch -> use it exactly
|
||||
# p4/branch -> prepend refs/remotes/ or refs/heads/
|
||||
# branch -> prepend refs/remotes/p4/ or refs/heads/p4/
|
||||
if not self.branch.startswith("refs/"):
|
||||
self.branch = "refs/heads/" + self.branch
|
||||
if self.importIntoRemotes:
|
||||
prepend = "refs/remotes/"
|
||||
else:
|
||||
prepend = "refs/heads/"
|
||||
if not self.branch.startswith("p4/"):
|
||||
prepend += "p4/"
|
||||
self.branch = prepend + self.branch
|
||||
|
||||
if len(args) == 0 and self.depotPaths:
|
||||
if not self.silent:
|
||||
|
@ -51,6 +51,27 @@ test_expect_failure 'sync when branch is not called master should work' '
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'sync --branch builds the full ref name correctly' '
|
||||
test_when_finished cleanup_git &&
|
||||
(
|
||||
cd "$git" &&
|
||||
git init &&
|
||||
|
||||
git p4 sync --branch=b1 //depot &&
|
||||
git rev-parse --verify refs/remotes/p4/b1 &&
|
||||
git p4 sync --branch=p4/b2 //depot &&
|
||||
git rev-parse --verify refs/remotes/p4/b2 &&
|
||||
|
||||
git p4 sync --import-local --branch=h1 //depot &&
|
||||
git rev-parse --verify refs/heads/p4/h1 &&
|
||||
git p4 sync --import-local --branch=p4/h2 //depot &&
|
||||
git rev-parse --verify refs/heads/p4/h2 &&
|
||||
|
||||
git p4 sync --branch=refs/stuff //depot &&
|
||||
git rev-parse --verify refs/stuff
|
||||
)
|
||||
'
|
||||
|
||||
# engages --detect-branches code, which will do filename filtering so
|
||||
# no sync to either b1 or b2
|
||||
test_expect_success 'sync when two branches but no master should noop' '
|
||||
|
Loading…
Reference in New Issue
Block a user