summaryrefslogtreecommitdiff
path: root/contrib/fast-import
diff options
context:
space:
mode:
authorLibravatar Simon Hausmann <shausman@trolltech.com>2007-05-21 22:57:06 +0200
committerLibravatar Simon Hausmann <shausman@trolltech.com>2007-05-21 22:57:06 +0200
commit5834684d51ee6e0c21cce8d1b5df06a34a36a4f9 (patch)
treec1d9de5a0225c3522502405006be5e1ebdbb7dde /contrib/fast-import
parentMake git-p4 submit --direct safer by also creating a git commit (diff)
downloadtgif-5834684d51ee6e0c21cce8d1b5df06a34a36a4f9.tar.xz
Added a rollback command for debugging. It sets back the heads of the p4 branches to the specified p4 change number or earlier.
Signed-off-by: Simon Hausmann <shausman@trolltech.com>
Diffstat (limited to 'contrib/fast-import')
-rwxr-xr-xcontrib/fast-import/git-p437
1 files changed, 32 insertions, 5 deletions
diff --git a/contrib/fast-import/git-p4 b/contrib/fast-import/git-p4
index b32d8dbfd3..40264cdc18 100755
--- a/contrib/fast-import/git-p4
+++ b/contrib/fast-import/git-p4
@@ -7,10 +7,7 @@
# 2007 Trolltech ASA
# License: MIT <http://www.opensource.org/licenses/mit-license.php>
#
-# TODO: * implement git-p4 rollback <perforce change number> for debugging
-# to roll back all p4 remote branches to a commit older or equal to
-# the specified change.
-# * Consider making --with-origin the default, assuming that the git
+# TODO: * Consider making --with-origin the default, assuming that the git
# protocol is always more efficient. (needs manual testing first :)
#
@@ -135,6 +132,35 @@ class P4Debug(Command):
print output
return True
+class P4RollBack(Command):
+ def __init__(self):
+ Command.__init__(self)
+ self.options = [
+ ]
+ self.description = "A tool to debug the multi-branch import. Don't use :)"
+
+ def run(self, args):
+ if len(args) != 1:
+ return False
+ maxChange = int(args[0])
+ for line in mypopen("git rev-parse --symbolic --remotes").readlines():
+ if line.startswith("p4/") and line != "p4/HEAD\n":
+ ref = "refs/remotes/" + line[:-1]
+ log = extractLogMessageFromGitCommit(ref)
+ depotPath, change = extractDepotPathAndChangeFromGitLog(log)
+ changed = False
+ while len(change) > 0 and int(change) > maxChange:
+ changed = True
+ print "%s is at %s ; rewinding towards %s" % (ref, change, maxChange)
+ system("git update-ref %s \"%s^\"" % (ref, ref))
+ log = extractLogMessageFromGitCommit(ref)
+ depotPath, change = extractDepotPathAndChangeFromGitLog(log)
+
+ if changed:
+ print "%s is at %s" % (ref, change)
+
+ return True
+
class P4Submit(Command):
def __init__(self):
Command.__init__(self)
@@ -1109,7 +1135,8 @@ commands = {
"submit" : P4Submit(),
"sync" : P4Sync(),
"rebase" : P4Rebase(),
- "clone" : P4Clone()
+ "clone" : P4Clone(),
+ "rollback" : P4RollBack()
}
if len(sys.argv[1:]) == 0: