Rev 3: Turn the script into an actual 'main()' function, add staleness checks. in http://bazaar.launchpad.net/~canonical-bazaar/udd/hottest100

John Arbash Meinel john at arbash-meinel.com
Fri Jan 15 16:41:16 GMT 2010


At http://bazaar.launchpad.net/~canonical-bazaar/udd/hottest100

------------------------------------------------------------
revno: 3
revision-id: john at arbash-meinel.com-20100115164100-31onwrsiko6tmr5q
parent: mbp at sourcefrog.net-20100115072325-z308j1wvpib34ihc
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: hottest100
timestamp: Fri 2010-01-15 10:41:00 -0600
message:
  Turn the script into an actual 'main()' function, add staleness checks.
-------------- next part --------------
=== modified file 'check-hottest.py'
--- a/check-hottest.py	2010-01-15 07:23:25 +0000
+++ b/check-hottest.py	2010-01-15 16:41:00 +0000
@@ -3,7 +3,8 @@
 
 """Check the status of imports/branches of 100 important projects"""
 
-import string
+import datetime
+import os
 import sys
 
 import bzrlib
@@ -15,41 +16,95 @@
     )
 
 
-plugin.load_plugins()
-ui.ui_factory = bzrlib.ui.make_ui_for_terminal(sys.stdin,
-    sys.stdout, sys.stderr)
-
-package_names = map(string.strip,
-    file('hottest-projects.txt').readlines())
-
-ok_packages = set()
-unregistered_packages = set()
-broken_packages = set()
-
-reuse_transports = []
-for package in package_names[:10]:
-    print package
+def setup_bzrlib():
+    plugin.load_plugins()
+    ui.ui_factory = bzrlib.ui.make_ui_for_terminal(sys.stdin,
+        sys.stdout, sys.stderr)
+
+
+def get_package_names(name):
+    f = open(name, 'rb')
     try:
-        package_branch_url = 'lp:ubuntu/%s' % (
-            package)
-        package_bzrdir = bzrdir.BzrDir.open(package_branch_url,
-            possible_transports=reuse_transports)
-        print package_bzrdir
-        ok_packages.add(package)
-        reuse_transports = [package_bzrdir.transport]
-    except errors.BzrError, e:
-        # the launchpad plugin sends 
-        # <class 'bzrlib.errors.InvalidURL'> Invalid url supplied to transport:
-        # "lp:ubuntu/hal": hal in ubuntu has no default branch.
-        print e.__class__, e
-        if str(e).find('in ubuntu has no default branch') > -1:
-            unregistered_packages.add(package)
-        else:
-            broken_packages.add(package)
-        continue
-
-
-print 'TOTALS:'
-print '%5s ok' % len(ok_packages)
-print '%5s unregistered' % len(unregistered_packages)
-print '%5s otherwise broken' % len(broken_packages)
+        return [s.strip() for s in f]
+    finally:
+        f.close()
+    
+
+def main(args):
+    import optparse
+    p = optparse.OptionParser('%prog [OPTIONS] HOTTEST_LIST\n'
+        '\n'
+        'HOTTEST_LIST is a file containing packages to check\n'
+        'one package per line\n')
+    p.add_option('--stale-days', type=int, default=14,
+                 help='How many days till a package goes "stale" (default 14)')
+    p.add_option('--count', type=int, default=None,
+                 help='Only process COUNT packages')
+
+    opts, args = p.parse_args(args)
+    if len(args) == 0:
+        # Use the default hottest100 list
+        args = [os.path.join(os.path.dirname(__file__),
+                             'hottest-projects.txt')
+               ]
+
+    package_names = get_package_names(args[0])
+    if opts.count is not None:
+        package_names = package_names[:opts.count]
+
+    setup_bzrlib()
+
+    ok_packages = set()
+    stale_packages = set()
+    unregistered_packages = set()
+    broken_packages = set()
+
+    long_form = 'bzr+ssh://bazaar.launchpad.net/~ubuntu-branches/ubuntu/lucid'
+    short_form = '...'
+    print '%s = %s' % (short_form, long_form)
+
+    today = datetime.datetime.now()
+    reuse_transports = []
+    for package in package_names:
+        print package
+        try:
+            package_branch_url = 'lp:ubuntu/%s' % (
+                package)
+            package_bzrdir = bzrdir.BzrDir.open(package_branch_url,
+                possible_transports=reuse_transports)
+            reuse_transports = [package_bzrdir.transport]
+            package_branch = package_bzrdir.open_branch()
+            package_branch.lock_read()
+            try:
+                rev = package_branch.repository.get_revision(
+                        package_branch.last_revision())
+                dt = datetime.datetime.fromtimestamp(rev.timestamp)
+                age = today - dt
+                branch_s = str(package_branch).replace(long_form, short_form)
+                print '  %s\n  %d days old' % (branch_s, age.days)
+                if age.days < opts.stale_days:
+                    ok_packages.add(package)
+                else:
+                    stale_packages.add(package)
+            finally:
+                package_branch.unlock()
+        except errors.BzrError, e:
+            # the launchpad plugin sends 
+            # <class 'bzrlib.errors.InvalidURL'> Invalid url supplied to transport:
+            # "lp:ubuntu/hal": hal in ubuntu has no default branch.
+            print '  %s' % (e,)
+            if str(e).find('in ubuntu has no default branch') > -1:
+                unregistered_packages.add(package)
+            else:
+                broken_packages.add(package)
+            continue
+
+
+    print 'TOTALS:'
+    print '%5s ok' % len(ok_packages)
+    print '%5s stale' % len(stale_packages)
+    print '%5s unregistered' % len(unregistered_packages)
+    print '%5s otherwise broken' % len(broken_packages)
+
+if __name__ == '__main__':
+    main(sys.argv[1:])



More information about the bazaar-commits mailing list