diff options
author | Rolf Leggewie <oe-devel@rolf.leggewie.biz> | 2008-01-08 02:07:12 +0000 |
---|---|---|
committer | Rolf Leggewie <oe-devel@rolf.leggewie.biz> | 2008-01-08 02:07:12 +0000 |
commit | 460978eb9e5ff4de83446a92096d65fa804b6d7b (patch) | |
tree | 333597b5f9487dc9bd07a2646e2b1f166f7d6c72 /contrib | |
parent | f99ef7e39e2df6f5482c9acc1bc6a6bcd865eef2 (diff) | |
parent | 939f5d55c0e4e5d9b9f04f341c848cec4e226d6b (diff) |
merge of '37149b3d7b17d35e06e93ecd95c7eb36f4425da6'
and '562c973381fd0816ab9bc3ab53a276a6c274c8b2'
Diffstat (limited to 'contrib')
-rwxr-xr-x | contrib/mtn2git/mtn2git.py | 19 | ||||
-rw-r--r-- | contrib/mtn2git/status.py | 11 |
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) |