aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael G. Martins <rafael@rafaelmartins.eng.br>2010-08-02 21:05:42 -0300
committerRafael G. Martins <rafael@rafaelmartins.eng.br>2010-08-02 21:05:42 -0300
commitc6983a9a38365bb1a852da9d3ed7e22dd80d6c02 (patch)
tree0a9e5e36606dfd715b1feb19f36d2db67f4452e7 /contrib
parentadded licenses support to the script requirements.py (diff)
downloadg-octave-c6983a9a38365bb1a852da9d3ed7e22dd80d6c02.tar.gz
g-octave-c6983a9a38365bb1a852da9d3ed7e22dd80d6c02.tar.bz2
g-octave-c6983a9a38365bb1a852da9d3ed7e22dd80d6c02.zip
moved scripts/requirements.py to contrib/manage_info.py
Diffstat (limited to 'contrib')
-rwxr-xr-xcontrib/manage_info.py159
1 files changed, 159 insertions, 0 deletions
diff --git a/contrib/manage_info.py b/contrib/manage_info.py
new file mode 100755
index 0000000..2f8307e
--- /dev/null
+++ b/contrib/manage_info.py
@@ -0,0 +1,159 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""
+ requirements.py
+ ~~~~~~~~~~~~~~~
+
+ a simple script that creates a JSON file with the list of dependencies
+ that are not from octave-forge package (SystemRequirements and
+ BuildRequires). It writes the JSON content to the stdout.
+
+ :copyright: (c) 2010 by Rafael Goncalves Martins
+ :license: GPL-2, see LICENSE for more details.
+"""
+
+from __future__ import print_function
+
+import json
+import sys
+import os
+import portage
+
+from _emerge.actions import load_emerge_config
+from _emerge.search import search
+
+current_dir = os.path.dirname(os.path.realpath(__file__))
+if os.path.exists(os.path.join(current_dir, '..', 'g_octave')):
+ sys.path.insert(0, os.path.join(current_dir, '..'))
+
+from g_octave import description, description_tree, exception
+from g_octave.compat import py3k, open
+
+def main(argv):
+
+ if len(argv) <= 1:
+ print('one argument required: the json file.', file=sys.stderr)
+ return 1
+
+ # init portage stuff
+ settings, trees, mtimedb = load_emerge_config()
+ root_config = trees[settings['ROOT']]['root_config']
+ s = search(root_config, False, False, False, False, False)
+
+ desc_tree = description_tree.DescriptionTree(parse_sysreq = False)
+
+ # identifier => list of dependencies
+ dependencies = dict()
+
+ # list of licenses
+ licenses = list()
+
+ for pkg in desc_tree.packages():
+ try:
+ desc = desc_tree[pkg]
+ except exception.DescriptionTreeException as err:
+ print('DescriptionTree error: %s' % err, file=sys.stderr)
+ return 1
+
+ if desc.license not in licenses:
+ licenses.append(desc.license)
+
+ deps = []
+
+ if desc.systemrequirements is not None:
+ deps += [i.strip() for i in desc.systemrequirements.split(',')]
+
+ if desc.buildrequires is not None:
+ deps += [i.strip() for i in desc.buildrequires.split(',')]
+
+ for dep in deps:
+ match = description.re_depends.match(dep)
+ if match is not None:
+ my_dep = match.group(1)
+ my_match = my_dep.split('-')[0]
+ if my_match not in dependencies:
+ dependencies[my_match] = [my_dep]
+ else:
+ dependencies[my_match].append(my_dep)
+
+ json_dict = dict(
+ dependencies = dict(),
+ licenses = dict(),
+ )
+
+ try:
+ with open(argv[1], 'r') as fp:
+ json_dict = json.load(fp)
+ except:
+ pass
+
+ print('***** Dependencies *****\n')
+ for dep in dependencies:
+ s.execute(dep)
+ print(dep)
+ temp = []
+ for i in range(len(s.matches['pkg'])):
+ print(' %i: %s' % (i, s.matches['pkg'][i][0]))
+ temp.append(s.matches['pkg'][i][0])
+
+ if dependencies[dep][0] in json_dict['dependencies']:
+ if py3k:
+ select = input('Select a package [%s]: ' % \
+ json_dict['dependencies'][dependencies[dep][0]])
+ else:
+ select = raw_input('Select a package [%s]: ' % \
+ json_dict['dependencies'][dependencies[dep][0]])
+ else:
+ if py3k:
+ select = input('Select a package: ')
+ else:
+ select = raw_input('Select a package: ')
+ try:
+ for dep_name in dependencies[dep]:
+ json_dict['dependencies'][dep_name] = temp[int(select)]
+ except:
+ if select != '' or dependencies[dep][0] not in json_dict['dependencies']:
+ for dep_name in dependencies[dep]:
+ json_dict['dependencies'][dep_name] = select
+ print('Selected: %s' % json_dict['dependencies'][dependencies[dep][0]])
+ print()
+
+ print('***** Licenses *****\n')
+ for lic in licenses:
+ if lic in json_dict['licenses']:
+ if py3k:
+ temp = input(
+ '%s [%s]: ' % (
+ lic,
+ json_dict['licenses'][lic],
+ )
+ )
+ else:
+ temp = raw_input(
+ '%s [%s]: ' % (
+ lic,
+ json_dict['licenses'][lic],
+ )
+ )
+ if temp != '':
+ json_dict['licenses'][lic] = temp
+ else:
+ if py3k:
+ json_dict['licenses'][lic] = input('%s: ' % lic)
+ else:
+ json_dict['licenses'][lic] = raw_input('%s: ' % lic)
+ print('Selected: %s' % json_dict['licenses'][lic])
+ print()
+
+ try:
+ with open(argv[1], 'w') as fp:
+ json.dump(json_dict, fp, sort_keys=True, indent=4)
+ except:
+ print('failed to save the json file.', file=sys.stderr)
+ return 1
+
+ return 0
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))