summaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorMichael Lauer <mickey@vanille-media.de>2008-01-07 23:55:54 +0000
committerMichael Lauer <mickey@vanille-media.de>2008-01-07 23:55:54 +0000
commit939f5d55c0e4e5d9b9f04f341c848cec4e226d6b (patch)
tree5188223fbada2e2262834fbfd5da27ba52a2731e /contrib
parent62b156a0fef7fdb309a6d6cb0291ccd5b49a443e (diff)
parentbb3cd6d33b47a8aa00ad8dbef0411a7721720872 (diff)
merge of '676ed5b61806189cd1aeea21920d3c8fa842f8c7'
and 'f556521018478109967b108bb830f8109aefbb0e'
Diffstat (limited to 'contrib')
-rwxr-xr-xcontrib/mtn2git/mtn2git.py19
-rw-r--r--contrib/mtn2git/status.py11
2 files changed, 25 insertions, 5 deletions
diff --git a/contrib/mtn2git/mtn2git.py b/contrib/mtn2git/mtn2git.py
index cda4f39fca..a23e757936 100755
--- a/contrib/mtn2git/mtn2git.py
+++ b/contrib/mtn2git/mtn2git.py
@@ -519,7 +519,7 @@ def parse_revision(operations, revision):
revision_description["committer"] = cert[1]
else:
print >> sys.stderr, "Unknown Cert: Ignoring", cert[5], cert[7]
- assert(False)
+ #assert(False)
return revision_description
@@ -565,24 +565,37 @@ def main(mtn_cli, db, rev):
ops.automate.stop()
all_revs = []
+ branch_heads = {}
for branch in branches:
heads = [head for head in ops.heads(branch)]
+ if len(heads) != 1:
+ print >> sys.stderr, "Skipping branch '%s' due multiple heads" % (branch)
+ continue
+
if branch in status.former_heads:
old_heads = status.former_heads[branch]
else:
old_heads = []
for head in heads:
+ print >> sys.stderr, old_heads, head
all_revs += ops.ancestry_difference(head, old_heads)
- status.former_heads[branch] = heads
+ for rev in all_revs:
+ if not rev in branch_heads:
+ branch_heads[rev] = []
+ branch_heads[rev].append(branch)
+
sorted_revs = [rev for rev in ops.toposort(all_revs)]
for rev in sorted_revs:
if has_mark(rev):
- print >> sys.stderr, "Already having commit '%s'" % rev
+ print >> sys.stderr, "B: Already having commit '%s'" % rev
else:
print >> sys.stderr, "Going to import revision ", rev
fast_import(ops, parse_revision(ops, rev))
+ branches = branch_heads[rev]
+ for branch in branches:
+ status.former_heads[branch] = [rev]
if __name__ == "__main__":
diff --git a/contrib/mtn2git/status.py b/contrib/mtn2git/status.py
index 47d06b51fd..bd83f85acf 100644
--- a/contrib/mtn2git/status.py
+++ b/contrib/mtn2git/status.py
@@ -20,7 +20,7 @@
THE SOFTWARE.
"""
-import pickle
+import os, pickle
marks = {}
last_mark = 0
@@ -39,9 +39,16 @@ def load(status_name):
def store(status_name):
global marks, last_mark, mark_file, former_heads, same_revisions
- file = open(status_name, "wb")
+ file = open("%s.tmp-foo" % status_name, "wb")
pickle.dump(marks, file)
pickle.dump(last_mark, file)
pickle.dump(former_heads, file)
pickle.dump(same_revisions, file)
file.close()
+
+ # Almost atomic rename, without the risk to destroy something
+ try:
+ os.remove(status_name)
+ except:
+ pass
+ os.rename("%s.tmp-foo" % status_name, status_name)