diff options
author | Junio C Hamano <gitster@pobox.com> | 2022-05-21 01:26:55 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-05-21 01:26:55 +0300 |
commit | af3a3205d14561e1683ca86b894888f9f1fc0176 (patch) | |
tree | 5cf53769536a482db62a7a015eccadecd87a37d3 /git-p4.py | |
parent | 804ec0301fddb68d5170939084d79e2c0c672028 (diff) | |
parent | 17f273ffbad8724278e0fa4da592a7ec7c6abc83 (diff) |
Merge branch 'tk/p4-with-explicity-sync'
"git p4" update.
* tk/p4-with-explicity-sync:
git-p4: support explicit sync of arbitrary existing git-p4 refs
Diffstat (limited to 'git-p4.py')
-rwxr-xr-x | git-p4.py | 51 |
1 files changed, 37 insertions, 14 deletions
@@ -994,6 +994,35 @@ def gitConfigList(key): _gitConfig[key] = [] return _gitConfig[key] +def fullP4Ref(incomingRef, importIntoRemotes=True): + """Standardize a given provided p4 ref value to a full git ref: + 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 incomingRef.startswith("refs/"): + return incomingRef + if importIntoRemotes: + prepend = "refs/remotes/" + else: + prepend = "refs/heads/" + if not incomingRef.startswith("p4/"): + prepend += "p4/" + return prepend + incomingRef + +def shortP4Ref(incomingRef, importIntoRemotes=True): + """Standardize to a "short ref" if possible: + refs/foo/bar/branch -> ignore + refs/remotes/p4/branch or refs/heads/p4/branch -> shorten + p4/branch -> shorten""" + if importIntoRemotes: + longprefix = "refs/remotes/p4/" + else: + longprefix = "refs/heads/p4/" + if incomingRef.startswith(longprefix): + return incomingRef[len(longprefix):] + if incomingRef.startswith("p4/"): + return incomingRef[3:] + return incomingRef def p4BranchesInGit(branchesAreInRemotes=True): """Find all the branches whose names start with "p4/", looking @@ -3920,9 +3949,13 @@ class P4Sync(Command, P4UserMap): # restrict to just this one, disabling detect-branches if branch_arg_given: - short = self.branch.split("/")[-1] + short = shortP4Ref(self.branch, self.importIntoRemotes) if short in branches: self.p4BranchesInGit = [short] + elif self.branch.startswith('refs/') and \ + branchExists(self.branch) and \ + '[git-p4:' in extractLogMessageFromGitCommit(self.branch): + self.p4BranchesInGit = [self.branch] else: self.p4BranchesInGit = branches.keys() @@ -3939,7 +3972,8 @@ class P4Sync(Command, P4UserMap): p4Change = 0 for branch in self.p4BranchesInGit: - logMsg = extractLogMessageFromGitCommit(self.refPrefix + branch) + logMsg = extractLogMessageFromGitCommit(fullP4Ref(branch, + self.importIntoRemotes)) settings = extractSettingsGitLog(logMsg) @@ -3971,18 +4005,7 @@ 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/"): - if self.importIntoRemotes: - prepend = "refs/remotes/" - else: - prepend = "refs/heads/" - if not self.branch.startswith("p4/"): - prepend += "p4/" - self.branch = prepend + self.branch + self.branch = fullP4Ref(self.branch, self.importIntoRemotes) if len(args) == 0 and self.depotPaths: if not self.silent: |