summaryrefslogtreecommitdiff
path: root/contrib/mtn2git
diff options
context:
space:
mode:
authorHolger Freyther <zecke@selfish.org>2008-01-07 17:53:19 +0000
committerHolger Freyther <zecke@selfish.org>2008-01-07 17:53:19 +0000
commit01833126fd02615e7c94e6b4c8577152401883ee (patch)
tree34859fd1505c2c85109de11669e4df09a5173fa4 /contrib/mtn2git
parent5c31ddaccd475cf14a440b814f9cf1a04db19b91 (diff)
contrib/mtn2git: Ignore unknown certs, try to be more robust against CTRL-C when saving the status
Diffstat (limited to 'contrib/mtn2git')
-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)