From: Martin Langhoff <[email protected]>

Question: Is a new osbuilder still building the exact same build?

os-toc-diff.py original/os860.toc build/output/osNN.toc > results.diff
---
This version uses bitfrost utils to walk the datastructure, yielding
a more readable output.

Still investigating why 10.1.3 rebuilds have so much delta. The tip of
v1.3 builds it with perfectly matching packages.txt, but there's an important
number of binaries and SOs that don't match.

---
 os-toc-diff.py |   61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 61 insertions(+), 0 deletions(-)
 create mode 100755 os-toc-diff.py

diff --git a/os-toc-diff.py b/os-toc-diff.py
new file mode 100755
index 0000000..cf6ad35
--- /dev/null
+++ b/os-toc-diff.py
@@ -0,0 +1,61 @@
+#!/usr/bin/python
+#
+# Compare OS versions based on the .toc files
+#
+# Usage:
+#    os-toc-diff os852.toc os860.toc
+#
+# Copyright (C) 2009, One Laptop per Child
+# License GPLv2+
+# Author: Martin Langhoff <[email protected]>
+#
+#
+import os, sys
+import tempfile
+import subprocess
+import shutil
+from bitfrost.contents.utils import UnifiedContents
+
+tmpdir = tempfile.mkdtemp()
+
+if len(sys.argv) != 3:
+    sys.stderr.write("Incorrect number of arguments!")
+    sys.exit(1)
+
+def pretty_print_content_rec(c, f, path):
+    dirents = c.get_dirobject_pair(path)[1][2][1]
+    for fn in dirents.keys():
+        dent = dirents[fn]
+        fpath = os.path.join(path, fn)
+        if 'dl' in dent:
+            f.write('%s dir %s %s %o ' % (fpath, dent['u'], dent['g'], 
dent['m']))
+            f.write("\n")
+            pretty_print_content_rec(c, f, os.path.join(path, fn))
+        else:
+            f.write('%s %s %s %o ' % (fpath, dent['u'], dent['g'], dent['m']))
+            if 'l' in dent:
+                f.write('symlink ' + dent['l'])
+            elif 'd' in dent:
+                f.write('devnode %s' % dent['d'])
+            else: # file
+                f.write(dent['h'][0])
+            f.write("\n")
+
+tocs = [ sys.argv[1], sys.argv[2] ]
+
+for toc in tocs:
+    print "Preparing " + toc
+    f = file(os.path.join(tmpdir, os.path.basename(toc)), 'w')
+    print os.path.join(tmpdir, os.path.basename(toc))
+    c = UnifiedContents(toc)
+    pretty_print_content_rec(c, f, '')
+
+subprocess.Popen(['diff', '-u',
+                  os.path.join(tmpdir, os.path.basename(tocs[0])),
+                  os.path.join(tmpdir, os.path.basename(tocs[1]))
+                  ], stdout=sys.stdout).communicate()
+
+# cleanup
+shutil.rmtree(tmpdir)
+
+
-- 
1.7.3.4

_______________________________________________
Devel mailing list
[email protected]
http://lists.laptop.org/listinfo/devel

Reply via email to