diff options
Diffstat (limited to 'contrib/mtn2git/mtn2cache.py')
-rwxr-xr-x | contrib/mtn2git/mtn2cache.py | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/contrib/mtn2git/mtn2cache.py b/contrib/mtn2git/mtn2cache.py new file mode 100755 index 0000000000..323822a7fb --- /dev/null +++ b/contrib/mtn2git/mtn2cache.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python + +import os, processing +from child import Child + +MTN = ["mtn", "--db=~/oe/OE.mtn"] +DIFF = ["diff", "-u"] + +def handle_parents(revision): + parents = Child(*MTN+["au", "parents", revision]).stdout.strip().split('\n') + if not parents: + return + print "revision: %s (parents: %s)" % (revision, parents) + for parent in parents: + filename = os.path.join("mtn2cache", "patch", parent+"-"+revision) + curfilename = os.path.join("mtn2cache", "manifest", revision) + parfilename = os.path.join("mtn2cache", "manifest", parent) + if not os.path.exists(filename): + diff = Child(*DIFF+[parfilename, curfilename]).stdout + try: + file(filename, "w").write(diff) + except: + os.unlink(filename) + raise + +def handle_revision(revision): + print "revision: %s" % revision + filename = os.path.join("mtn2cache", "revision", revision) + if not os.path.exists(filename): + data = Child(*MTN+["au", "get_revision", revision]).stdout + try: + file(filename, "w").write(data) + except: + os.unlink(filename) + raise + + filename = os.path.join("mtn2cache", "manifest", revision) + if not os.path.exists(filename): + data = Child(*MTN+["au", "get_manifest_of", revision]).stdout + try: + file(filename, "w").write(data) + except: + os.unlink(filename) + raise + + filename = os.path.join("mtn2cache", "certs", revision) + if not os.path.exists(filename): + data = Child(*MTN+["au", "certs", revision]).stdout + try: + file(filename, "w").write(data) + except: + os.unlink(filename) + raise + +def handle_head(head): + print "head: %s" % head + ancestors = Child(*MTN+["au", "ancestors", head]).stdout.strip().split('\n') + pool.map(handle_revision, ancestors) + pool.map(handle_parents, ancestors) + +def handle_branch(branch): + print "branch: %s" % branch + heads = Child(*MTN+["au", "heads", branch]).stdout.strip().split('\n') + for head in heads: + handle_head(head) + +def main(): + branches = Child(*MTN+["au", "branches"]).stdout.strip().split('\n') + for branch in branches: + handle_branch(branch) + +pool = processing.Pool(12) +main() + |