mirror of
https://github.com/frej/fast-export.git
synced 2025-11-11 13:25:39 +01:00
very experimental incremental import support :)
This commit is contained in:
@@ -26,6 +26,8 @@ if len(sys.argv) != 2:
|
|||||||
print ""
|
print ""
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
master = "refs/heads/p4"
|
||||||
|
branch = "refs/heads/p4-import"
|
||||||
prefix = sys.argv[1]
|
prefix = sys.argv[1]
|
||||||
changeRange = ""
|
changeRange = ""
|
||||||
try:
|
try:
|
||||||
@@ -70,6 +72,25 @@ def getUserMap():
|
|||||||
return users
|
return users
|
||||||
|
|
||||||
users = getUserMap()
|
users = getUserMap()
|
||||||
|
topMerge = ""
|
||||||
|
|
||||||
|
incremental = 0
|
||||||
|
# try incremental import
|
||||||
|
if len(changeRange) == 0:
|
||||||
|
try:
|
||||||
|
sout, sin, serr = popen2.popen3("git-name-rev --tags `git-rev-parse %s`" % master)
|
||||||
|
output = sout.read()
|
||||||
|
tagIdx = output.index(" tags/p4/")
|
||||||
|
caretIdx = output.index("^")
|
||||||
|
revision = int(output[tagIdx + 9 : caretIdx]) + 1
|
||||||
|
changeRange = "@%s,#head" % revision
|
||||||
|
topMerge = os.popen("git-rev-parse %s" % master).read()[:-1]
|
||||||
|
incremental = 1
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if incremental == 0:
|
||||||
|
branch = master
|
||||||
|
|
||||||
output = os.popen("p4 changes %s...%s" % (prefix, changeRange)).readlines()
|
output = os.popen("p4 changes %s...%s" % (prefix, changeRange)).readlines()
|
||||||
|
|
||||||
@@ -80,6 +101,10 @@ for line in output:
|
|||||||
|
|
||||||
changes.reverse()
|
changes.reverse()
|
||||||
|
|
||||||
|
if len(changes) == 0:
|
||||||
|
print "no changes to import!"
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
sys.stderr.write("\n")
|
sys.stderr.write("\n")
|
||||||
|
|
||||||
tz = - time.timezone / 36
|
tz = - time.timezone / 36
|
||||||
@@ -97,7 +122,7 @@ for change in changes:
|
|||||||
epoch = description["time"]
|
epoch = description["time"]
|
||||||
author = description["user"]
|
author = description["user"]
|
||||||
|
|
||||||
gitStream.write("commit refs/heads/master\n")
|
gitStream.write("commit %s\n" % branch)
|
||||||
committer = ""
|
committer = ""
|
||||||
if author in users:
|
if author in users:
|
||||||
committer = "%s %s %s" % (users[author], epoch, tz)
|
committer = "%s %s %s" % (users[author], epoch, tz)
|
||||||
@@ -111,6 +136,10 @@ for change in changes:
|
|||||||
gitStream.write("\n[ imported from %s; change %s ]\n" % (prefix, change))
|
gitStream.write("\n[ imported from %s; change %s ]\n" % (prefix, change))
|
||||||
gitStream.write("EOT\n\n")
|
gitStream.write("EOT\n\n")
|
||||||
|
|
||||||
|
if len(topMerge) > 0:
|
||||||
|
gitStream.write("merge %s\n" % topMerge)
|
||||||
|
topMerge = ""
|
||||||
|
|
||||||
fnum = 0
|
fnum = 0
|
||||||
while description.has_key("depotFile%s" % fnum):
|
while description.has_key("depotFile%s" % fnum):
|
||||||
path = description["depotFile%s" % fnum]
|
path = description["depotFile%s" % fnum]
|
||||||
@@ -143,7 +172,7 @@ for change in changes:
|
|||||||
gitStream.write("\n")
|
gitStream.write("\n")
|
||||||
|
|
||||||
gitStream.write("tag p4/%s\n" % change)
|
gitStream.write("tag p4/%s\n" % change)
|
||||||
gitStream.write("from refs/heads/master\n");
|
gitStream.write("from %s\n" % branch);
|
||||||
gitStream.write("tagger %s\n" % committer);
|
gitStream.write("tagger %s\n" % committer);
|
||||||
gitStream.write("data 0\n\n")
|
gitStream.write("data 0\n\n")
|
||||||
|
|
||||||
@@ -152,4 +181,8 @@ gitStream.close()
|
|||||||
gitOutput.close()
|
gitOutput.close()
|
||||||
gitError.close()
|
gitError.close()
|
||||||
|
|
||||||
|
if incremental == 1:
|
||||||
|
os.popen("git rebase p4-import p4")
|
||||||
|
os.popen("git branch -d p4-import")
|
||||||
|
|
||||||
print ""
|
print ""
|
||||||
|
|||||||
Reference in New Issue
Block a user