summaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorLibravatar Simon Hausmann <hausmann@kde.org>2007-03-26 22:34:34 +0200
committerLibravatar Simon Hausmann <hausmann@kde.org>2007-03-26 22:34:34 +0200
commit1f4ba1cbfc1d08a9c120012c9199caaec3dc5f58 (patch)
treec3dc7fd67270c8e8a02c0b383f7f58e31b7d5efe /contrib
parentgit-p4 debug doesn't need a git repository (diff)
downloadtgif-1f4ba1cbfc1d08a9c120012c9199caaec3dc5f58.tar.xz
Added support for mapping p4 labels to git tags
Signed-off-by: Simon Hausmann <hausmann@kde.org>
Diffstat (limited to 'contrib')
-rwxr-xr-xcontrib/fast-import/git-p458
1 files changed, 57 insertions, 1 deletions
diff --git a/contrib/fast-import/git-p4 b/contrib/fast-import/git-p4
index eb5b40aa98..eab5990548 100755
--- a/contrib/fast-import/git-p4
+++ b/contrib/fast-import/git-p4
@@ -625,7 +625,47 @@ class GitSync(Command):
self.gitStream.write("\n")
- self.lastChange = int(details["change"])
+ change = int(details["change"])
+
+ self.lastChange = change
+
+ if change in self.labels:
+ label = self.labels[change]
+ labelDetails = label[0]
+ labelRevisions = label[1]
+
+ files = p4CmdList("files %s...@%s" % (branchPrefix, change))
+
+ if len(files) == len(labelRevisions):
+
+ cleanedFiles = {}
+ for info in files:
+ if info["action"] == "delete":
+ continue
+ cleanedFiles[info["depotFile"]] = info["rev"]
+
+ if cleanedFiles == labelRevisions:
+ self.gitStream.write("tag tag_%s\n" % labelDetails["label"])
+ self.gitStream.write("from %s\n" % branch)
+
+ owner = labelDetails["Owner"]
+ tagger = ""
+ if author in self.users:
+ tagger = "%s %s %s" % (self.users[owner], epoch, self.tz)
+ else:
+ tagger = "%s <a@b> %s %s" % (owner, epoch, self.tz)
+ self.gitStream.write("tagger %s\n" % tagger)
+ self.gitStream.write("data <<EOT\n")
+ self.gitStream.write(labelDetails["Description"])
+ self.gitStream.write("EOT\n\n")
+
+ else:
+ if not silent:
+ print "Tag %s does not match with change %s: files do not match." % (labelDetails["label"], change)
+
+ else:
+ if not silent:
+ print "Tag %s does not match with change %s: file count is different." % (labelDetails["label"], change)
def extractFilesInCommitToBranch(self, files, branchPrefix):
newFiles = []
@@ -757,6 +797,21 @@ class GitSync(Command):
continue
self.users[output["User"]] = output["FullName"] + " <" + output["Email"] + ">"
+ def getLabels(self):
+ self.labels = {}
+
+ for output in p4CmdList("labels %s..." % self.globalPrefix):
+ label = output["label"]
+ revisions = {}
+ newestChange = 0
+ for file in p4CmdList("files //...@%s" % label):
+ revisions[file["depotFile"]] = file["rev"]
+ change = int(file["change"])
+ if change > newestChange:
+ newestChange = change
+
+ self.labels[newestChange] = [output, revisions]
+
def run(self, args):
self.globalPrefix = ""
self.changeRange = ""
@@ -829,6 +884,7 @@ class GitSync(Command):
self.globalPrefix += "/"
self.getUserMap()
+ self.getLabels();
if len(self.changeRange) == 0:
try: