git-p4: remove "rollback" verb
The "rollback" verb implements a simple algorithm which takes the set of remote perforce tracker branches, or optionally, the complete collection of local branches in a git repository, and deletes commits from these branches until there are no commits left with a perforce change number greater than than a user-specified change number. If the base of a git branch has a newer change number than the user-specified maximum, then the branch is deleted. In future, there might be an argument for the addition of some kind of "reset this branch back to a given perforce change number" verb for git-p4. However, in its current form it is unlikely to be useful to users for the following reasons: * The verb is completely undocumented. The only description provided contains the following text: "A tool to debug the multi-branch import. Don't use :)". * The verb has a very narrow purpose in that it applies the rollback operation to fixed sets of branches - either all remote p4 branches, or all local branches. There is no way for users to specify branches with more granularity, for example, allowing users to specify a single branch or a set of branches. The utility of the current implementation is therefore a niche within a niche. Given these shortcomings, this patch removes the verb from git-p4. Signed-off-by: Joel Holdsworth <jholdsworth@nvidia.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
fb8dfc1ccb
commit
0fe3df45f2
60
git-p4.py
60
git-p4.py
@ -1532,65 +1532,6 @@ class P4UserMap:
|
||||
except IOError:
|
||||
self.getUserMapFromPerforceServer()
|
||||
|
||||
class P4RollBack(Command):
|
||||
def __init__(self):
|
||||
Command.__init__(self)
|
||||
self.options = [
|
||||
optparse.make_option("--local", dest="rollbackLocalBranches", action="store_true")
|
||||
]
|
||||
self.description = "A tool to debug the multi-branch import. Don't use :)"
|
||||
self.rollbackLocalBranches = False
|
||||
|
||||
def run(self, args):
|
||||
if len(args) != 1:
|
||||
return False
|
||||
maxChange = int(args[0])
|
||||
|
||||
if "p4ExitCode" in p4Cmd("changes -m 1"):
|
||||
die("Problems executing p4");
|
||||
|
||||
if self.rollbackLocalBranches:
|
||||
refPrefix = "refs/heads/"
|
||||
lines = read_pipe_lines("git rev-parse --symbolic --branches")
|
||||
else:
|
||||
refPrefix = "refs/remotes/"
|
||||
lines = read_pipe_lines("git rev-parse --symbolic --remotes")
|
||||
|
||||
for line in lines:
|
||||
if self.rollbackLocalBranches or (line.startswith("p4/") and line != "p4/HEAD\n"):
|
||||
line = line.strip()
|
||||
ref = refPrefix + line
|
||||
log = extractLogMessageFromGitCommit(ref)
|
||||
settings = extractSettingsGitLog(log)
|
||||
|
||||
depotPaths = settings['depot-paths']
|
||||
change = settings['change']
|
||||
|
||||
changed = False
|
||||
|
||||
if len(p4Cmd("changes -m 1 " + ' '.join (['%s...@%s' % (p, maxChange)
|
||||
for p in depotPaths]))) == 0:
|
||||
print("Branch %s did not exist at change %s, deleting." % (ref, maxChange))
|
||||
system("git update-ref -d %s `git rev-parse %s`" % (ref, ref))
|
||||
continue
|
||||
|
||||
while change and int(change) > maxChange:
|
||||
changed = True
|
||||
if self.verbose:
|
||||
print("%s is at %s ; rewinding towards %s" % (ref, change, maxChange))
|
||||
system("git update-ref %s \"%s^\"" % (ref, ref))
|
||||
log = extractLogMessageFromGitCommit(ref)
|
||||
settings = extractSettingsGitLog(log)
|
||||
|
||||
|
||||
depotPaths = settings['depot-paths']
|
||||
change = settings['change']
|
||||
|
||||
if changed:
|
||||
print("%s rewound to %s" % (ref, change))
|
||||
|
||||
return True
|
||||
|
||||
class P4Submit(Command, P4UserMap):
|
||||
|
||||
conflict_behavior_choices = ("ask", "skip", "quit")
|
||||
@ -4353,7 +4294,6 @@ commands = {
|
||||
"sync" : P4Sync,
|
||||
"rebase" : P4Rebase,
|
||||
"clone" : P4Clone,
|
||||
"rollback" : P4RollBack,
|
||||
"branches" : P4Branches,
|
||||
"unshelve" : P4Unshelve,
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user