Merge branch 'org.openembedded.dev' of git@git.openembedded.net:openembedded into...
[vuplus_openembedded] / contrib / mtn2git / mtn2cache.py
1 #!/usr/bin/env python
2
3 import os, processing
4 from child import Child
5
6 MTN = ["mtn", "--db=~/oe/OE.mtn"]
7 DIFF = ["diff", "-u"]
8
9 def handle_parents(revision):
10     parents = Child(*MTN+["au", "parents", revision]).stdout.strip().split('\n')
11     if not parents:
12         return
13     print "revision: %s (parents: %s)" % (revision, parents)
14     for parent in parents:
15         filename = os.path.join("mtn2cache", "patch", parent+"-"+revision)
16         curfilename = os.path.join("mtn2cache", "manifest", revision)
17         parfilename = os.path.join("mtn2cache", "manifest", parent)
18         if not os.path.exists(filename):
19             diff = Child(*DIFF+[parfilename, curfilename]).stdout
20             try:
21                 file(filename, "w").write(diff)
22             except:
23                 os.unlink(filename)
24                 raise
25
26 def handle_revision(revision):
27     print "revision: %s" % revision
28     filename = os.path.join("mtn2cache", "revision", revision)
29     if not os.path.exists(filename):
30         data = Child(*MTN+["au", "get_revision", revision]).stdout
31         try:
32             file(filename, "w").write(data)
33         except:
34             os.unlink(filename)
35             raise
36
37     filename = os.path.join("mtn2cache", "manifest", revision)
38     if not os.path.exists(filename):
39         data = Child(*MTN+["au", "get_manifest_of", revision]).stdout
40         try:
41             file(filename, "w").write(data)
42         except:
43             os.unlink(filename)
44             raise
45
46     filename = os.path.join("mtn2cache", "certs", revision)
47     if not os.path.exists(filename):
48         data = Child(*MTN+["au", "certs", revision]).stdout
49         try:
50             file(filename, "w").write(data)
51         except:
52             os.unlink(filename)
53             raise
54
55 def handle_head(head):
56     print "head: %s" % head
57     ancestors = Child(*MTN+["au", "ancestors", head]).stdout.strip().split('\n')
58     pool.map(handle_revision, ancestors)
59     pool.map(handle_parents, ancestors)
60
61 def handle_branch(branch):
62     print "branch: %s" % branch
63     heads = Child(*MTN+["au", "heads", branch]).stdout.strip().split('\n')
64     for head in heads:
65         handle_head(head)
66
67 def main():
68     branches = Child(*MTN+["au", "branches"]).stdout.strip().split('\n')
69     for branch in branches:
70         handle_branch(branch)
71
72 pool = processing.Pool(12)
73 main()
74