diff options
-rwxr-xr-x | export_for_udd.py | 71 | ||||
-rw-r--r-- | patchtracker/Util.py | 9 |
2 files changed, 80 insertions, 0 deletions
diff --git a/export_for_udd.py b/export_for_udd.py new file mode 100755 index 0000000..4220e2f --- /dev/null +++ b/export_for_udd.py @@ -0,0 +1,71 @@ +#!/usr/bin/python + +from patchtracker.DB import PatchTrackerDB, PackageWithoutDiffException +from patchtracker.Util import print_used_memory +import sys +import json + +def enumerate_packages(db): + for packages_per_letter in db.findCollection().pkgs.itervalues(): + for package_name, package_data in packages_per_letter.iteritems(): + for suite, package in package_data.iteritems(): + yield (package_name, suite, package.version) + +def main(): + db = PatchTrackerDB() + packages = [] + try: + i = 0 + for package, suite, version in enumerate_packages(db): + + # Just for testing and debugging... + #if package not in ['geogebra', 'wotsap', 'netrw', 'haskell-devscripts', + # 'haskell-filestore', 'openide-utils']: + # continue + + print >> sys.stderr, "%d %s %s %s" % (i, package, suite, version) + i += 1 + + try: + dh = db.makeDiffHandler(package, version) + series = dh.series(ghost=True) + if series: + series_type = series.style + else: + series_type = "no_series" + try: + nondebian_diff = dh.nondebiandir(ghost=True) + nondebian = nondebian_diff.diffstat().lines() + except AttributeError: + # This means that the handler is a DebTarHandler + nondebian = [0, 0, 0] + except PackageWithoutDiffException: + # The package is native + series_type = "native" + nondebian = [0, 0, 0] + + patches = [(patch, patch_data.diffstat().lines()) for (patch, patch_data) in series] + + packages.append({'package': package, 'suite': suite, 'version': version, + 'series_type': series_type, 'nondebian': nondebian, + 'patches': patches}) + + # This is mainly intended for debugging: if you want to interrupt the + # process, you still can obtain the JSON with the packages processed so far. + # Consistency is assured by the fact that append() is atomic in Python + except KeyboardInterrupt: + pass + + # TODO We don't need to keep all the packages dictionary in memory; there are + # libraries to access JSON in a stream (DOM-like) fashion, but Python + # bindings don't appear to be available in Debian (libyajl) + + # Pretty printing: + #json.dump(packages, sys.stdout, sort_keys=True, indent=4) + + # Awful printing: + json.dump(packages, sys.stdout) + +if __name__ == '__main__': + main() + diff --git a/patchtracker/Util.py b/patchtracker/Util.py new file mode 100644 index 0000000..31a200c --- /dev/null +++ b/patchtracker/Util.py @@ -0,0 +1,9 @@ + +import resource +import sys + +def print_used_memory(msg): + """Small utility function to find where RAM is used at most.""" + r = resource.getrusage(resource.RUSAGE_SELF) + print >> sys.stderr, "%s; used memory = %d" % (msg, r.ru_maxrss) + |