Muehlenhoff has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/373290 )

Change subject: New debdeploy module to query installed reverse dependencies
......................................................................

New debdeploy module to query installed reverse dependencies

Useful to asses whether a library upgrade will require service
restarts.

Change-Id: I15e3d85648aed04834192a77464af5e6400c1ff5
---
A clients/debdeploy-revdeps
M debian/debdeploy-client.install
2 files changed, 69 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/debs/debdeploy 
refs/changes/90/373290/1

diff --git a/clients/debdeploy-revdeps b/clients/debdeploy-revdeps
new file mode 100755
index 0000000..f6f30b5
--- /dev/null
+++ b/clients/debdeploy-revdeps
@@ -0,0 +1,68 @@
+#! /usr/bin/python
+# -*- coding: utf-8 -*-
+'''
+Module for querying installed reverse dependencies of a package
+'''
+
+import subprocess
+import os
+import sys
+import argparse
+import json
+
+
+def parse_args():
+    p = argparse.ArgumentParser(
+        description='debdeploy-revdeps - Query for installed reverse 
dependencies')
+    p.add_argument('--json', action='store_true', default=False,
+                   help='Return results as JSON')
+    p.add_argument('--package', action='store', nargs='+', required=True)
+
+    args = p.parse_args(sys.argv[1:])
+
+    return args
+
+
+def result(status, rev_deps):
+    '''
+    Generates a data set to return to Cumin.
+    status: OK | ERROR: foo
+    rev_deps: sorted list of reverse dependencies
+    '''
+
+    return status + " " + json.dumps(rev_deps)
+
+
+def main():
+    '''
+    Lists all the installed reverse dependencies of the package(s).
+    '''
+    args = parse_args()
+
+    try:
+        rev_deps = subprocess.check_output(['apt-cache', '--installed', 
'rdepends'] + args.package)
+    except subprocess.CalledProcessError as e:
+        logger.info('Failed to query reverse dependies', e.returncode)
+        return result('ERROR Failed to query dependencies', '')
+
+    deps = set()
+
+    for i in rev_deps.split():
+        if i.startswith("|"):  # denotes an alternate dependency
+            deps.add(i.strip()[1:])
+        elif i in args.package:  # apt-cache rdepends also prints the package 
name
+            continue
+        elif i in ['Depends:', 'Reverse']:  # output by apt-cache
+            continue
+        else:
+            deps.add(i.strip())
+
+    return result('OK', list(sorted(deps)))
+
+
+if __name__ == '__main__':
+    print main()
+
+# Local variables:
+# mode: python
+# End:
diff --git a/debian/debdeploy-client.install b/debian/debdeploy-client.install
index f558e9b..e197171 100644
--- a/debian/debdeploy-client.install
+++ b/debian/debdeploy-client.install
@@ -1,3 +1,4 @@
 clients/debdeploy-deploy /usr/bin/
 clients/debdeploy-restarts /usr/bin/
+clients/debdeploy-revdeps /usr/bin/
 

-- 
To view, visit https://gerrit.wikimedia.org/r/373290
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I15e3d85648aed04834192a77464af5e6400c1ff5
Gerrit-PatchSet: 1
Gerrit-Project: operations/debs/debdeploy
Gerrit-Branch: master
Gerrit-Owner: Muehlenhoff <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to