[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-09-06 Thread Gilles Dartiguelongue
commit: 98f46bb384749baf895d520c5c8051e6e86e0abc
Author: Gilles Dartiguelongue  gentoo  org>
AuthorDate: Sun Sep  6 16:51:27 2015 +
Commit: Gilles Dartiguelongue  gentoo  org>
CommitDate: Sun Sep  6 16:51:27 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=98f46bb3

scripts/gen_archlist: drop some stable keywords

As requested by Pacho in bug #559706, drop keywords of arches that are
not considered for stabilization anymore.

Gentoo-Bug: https://bugs.gentoo.org/559706

 scripts/gen_archlist.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index 7f677b1..a9fdb87 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -37,8 +37,8 @@ logger = logging.getLogger('gen_archlist')
 #
 # GNOME_OVERLAY = PORTDB.getRepositoryPath('gnome')
 portage.portdb.porttrees = [portage.settings['PORTDIR']]
-STABLE_ARCHES = ('alpha', 'amd64', 'arm', 'hppa', 'ia64', 'm68k', 'ppc',
- 'ppc64', 's390', 'sh', 'sparc', 'x86')
+STABLE_ARCHES = ('alpha', 'amd64', 'arm', 'hppa', 'ia64', 'ppc', 'ppc64',
+ 'sparc', 'x86')
 UNSTABLE_ARCHES = ('~alpha', '~amd64', '~arm', '~hppa', '~ia64', '~m68k',
'~ppc', '~ppc64', '~s390', '~sh', '~sparc', '~x86',
'~x86-fbsd')



[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-26 Thread Gilles Dartiguelongue
commit: e7d972f07e900247f39cdf0ae0e3b03d6e4f9eb4
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Wed Jun 24 11:23:40 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Thu Jun 25 12:45:55 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=e7d972f0

scripts/gen_archlist: create a clear main function

 scripts/gen_archlist.py | 11 +++
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index 407ebbd..6369aa2 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -493,10 +493,9 @@ def prettify(cpv_kws):
 # Use the Functions #
 #
 # cpvs that will make it to the final list
-if __name__ == __main__:
-index = 0
-array = []
-
+def main():
+Where the magic happens!
+ALL_CPV_KWS = []
 for i in open(CP_FILE).readlines():
 cp = i[:-1]
 if cp.startswith('#') or cp.isspace() or not cp:
@@ -535,3 +534,7 @@ if __name__ == __main__:
 
 for i in prettify(ALL_CPV_KWS):
 print i[0], flatten(i[1])
+
+
+if __name__ == '__main__':
+main()



[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-26 Thread Gilles Dartiguelongue
commit: 598edbfe3303a0e59bb7b92d38f5693b0aae7007
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Thu Jun 25 14:27:43 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Fri Jun 26 22:14:42 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=598edbfe

scripts/gen_archlist: drop unused imports

 scripts/gen_archlist.py | 2 --
 1 file changed, 2 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index 1c4c027..e4597c6 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -27,8 +27,6 @@ import argparse
 import collections
 import logging
 import logging.config
-import os
-import sys
 
 import portage
 



[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-26 Thread Gilles Dartiguelongue
commit: 6d936200f6324e340e823b7925c910d3c340b226
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Thu Jun 25 11:22:16 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Fri Jun 26 22:14:39 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=6d936200

scripts/gen_archlist: rewrite consolidates_dupes using sets

 scripts/gen_archlist.py | 63 ++---
 1 file changed, 18 insertions(+), 45 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index 659c84e..d595df3 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -24,6 +24,7 @@
 from __future__ import division
 
 import argparse
+import collections
 import os
 import sys
 
@@ -41,7 +42,6 @@ UNSTABLE_ARCHES = ('~alpha', '~amd64', '~arm', '~hppa', 
'~ia64', '~m68k',
'~x86-fbsd')
 ALL_ARCHES = STABLE_ARCHES + UNSTABLE_ARCHES
 SYSTEM_PACKAGES = []
-LINE_SEP = ''
 
 
 # Settings #
@@ -348,52 +348,27 @@ def gen_cpv_kws(cpv, kws_aim, depgraph, 
check_dependencies, new_release):
 
 
 def consolidate_dupes(cpv_kws):
-
-Consolidate duplicate cpvs with differing keywords
+Consolidate duplicate CPVs with differing keywords.
 
-Cannot handle cps with different versions since we don't know if they are
-inter-changeable
+Cannot handle CPs with different versions since we don't know if they are
+inter-changeable.
 
-cpv_indices = {}
-
-# Find all indices of each cpv
-for each in cpv_kws:
-# Comments/whitespace carried over from original list
-if type(each) is not list:
-continue
-else:
-if each[0] not in cpv_indices:
-cpv_indices[each[0]] = []
-cpv_indices[each[0]].append(cpv_kws.index(each))
+# Build maximum requested keywords for each cpv
+cpv_kws_dict = collections.defaultdict(set)
+for dep_set in cpv_kws:
+for cpv, kws in dep_set:
+cpv_kws_dict[cpv].update(kws)
 
-# Replace the keywords of each cpv with the union of all keywords in the
-# list belonging to this cpv
-for each in cpv_kws:
-# Ignore comments/whitespace carried over from original list
-if type(each) is not list:
-continue
-kws = set()
-for index in cpv_indices[each[0]]:
-kws.update(cpv_kws[index][1])
-each[1] = list(kws)
-each[1].sort()
-
-index = 0
-deduped_cpv_kws = cpv_kws[:]
-deduped_cpv_kws.reverse()
-while index  len(deduped_cpv_kws):
-item = deduped_cpv_kws[index]
-if type(item) is not list:
-index += 1
-continue
-if deduped_cpv_kws.count(item) is 1:
-index += 1
-else:
-while deduped_cpv_kws.count(item) is not 1:
-deduped_cpv_kws.remove(item)
-deduped_cpv_kws.reverse()
+# Update cpv with their maximum request keywords
+clean_cpv_kws = []
+for dep_set in cpv_kws:
+clean_cpv_kws.append([
+(cpv, cpv_kws_dict.pop(cpv))
+# Keep only first occurence of cpv
+for cpv, _ in dep_set if cpv in cpv_kws_dict
+])
 
-return deduped_cpv_kws
+return clean_cpv_kws
 
 
 def get_per_slot_cpvs(cpvs):
@@ -531,8 +506,6 @@ def main():
 gen_cpv_kws(cpv, kws_missing, set([cpv]),
 args.check_dependencies, args.new_version)
 )
-if args.check_dependencies:
-ALL_CPV_KWS.append(LINE_SEP)
 
 ALL_CPV_KWS = consolidate_dupes(ALL_CPV_KWS)
 if args.append_slots:



[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-26 Thread Gilles Dartiguelongue
commit: 1d87c4f414d5a231b9951246b97daee36d8190a7
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Thu Jun 25 14:27:31 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Fri Jun 26 22:14:41 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=1d87c4f4

scripts/gen_archlist: switch logging to logging module

The output changes a bit but thanks for dictConfig, it can be re-added
with a proper formatter class later on.

 scripts/gen_archlist.py | 69 -
 1 file changed, 45 insertions(+), 24 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index b362a5d..1c4c027 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -25,11 +25,15 @@ from __future__ import division, print_function
 
 import argparse
 import collections
+import logging
+import logging.config
 import os
 import sys
 
 import portage
 
+logger = logging.getLogger('gen_archlist')
+
 #
 # Constants #
 #
@@ -92,13 +96,6 @@ def debug(*strings):
 ewarn(flatten(strings))
 
 
-def nothing_to_be_done(atom, type='cpv'):
-if STABLE:
-debug('%s %s: already stable, ignoring...' % (type, atom))
-else:
-debug('%s %s: already keyworded, ignoring...' % (type, atom))
-
-
 def make_unstable(kws):
 Transform `kws` into a list of unstable keywords.
 return set([
@@ -182,8 +179,7 @@ def get_best_deps(cpv, kws, release=None):
 
 cpvs = match_wanted_atoms(atom, release)
 if not cpvs:
-if DEBUG:
-debug('We encountered an irrelevant atom: %s' % atom)
+logger.debug('Encountered an irrelevant atom: %s', atom)
 continue
 
 best_cpv_kws = ['', []]
@@ -196,9 +192,8 @@ def get_best_deps(cpv, kws, release=None):
 )
 if cur_unstable_kws.intersection(unstable_kws) != unstable_kws:
 best_cpv_kws[0] = 'none'
-if DEBUG:
-debug('Insufficient unstable keywords in: %s' %
-  candidate_cpv)
+logger.debug('Insufficiant unstable keywords in: %s',
+ candidate_cpv)
 continue
 
 candidate_kws = get_kws(candidate_cpv, arches=kws)
@@ -216,8 +211,8 @@ def get_best_deps(cpv, kws, release=None):
 best_cpv_kws = [candidate_cpv, []]
 
 if best_cpv_kws[0] == 'alreadythere':
-if DEBUG:
-nothing_to_be_done(atom, type='dep')
+logger.debug('DEP %s is already %s, ignoring', atom,
+ 'stable' if STABLE else 'keyworded')
 continue
 elif best_cpv_kws[0] == 'none':
 continue
@@ -324,8 +319,9 @@ def gen_cpv_kws(cpv, kws_aim, depgraph, check_dependencies, 
new_release):
 # So... let's just stabilize it on all arches we can, and ignore for
 # keywording since we have no idea about that.
 if not STABLE:
-debug('MEH')
-nothing_to_be_done(cpv, type='dep')
+logger.warn('MEH')
+logger.info('DEP %s is already %s, ignoring', cpv,
+'stable' if STABLE else 'keyworded')
 return None
 
 wanted = get_kws(cpv, arches=make_unstable(kws_aim))
@@ -334,8 +330,7 @@ def gen_cpv_kws(cpv, kws_aim, depgraph, check_dependencies, 
new_release):
 
 if check_dependencies and not issystempackage(cpv):
 deps = get_best_deps(cpv, wanted, release=new_release)
-if EXTREME_DEBUG:
-debug('The deps of %s are %s' % (cpv, deps))
+logger.debug('Dependencies of %s are: %s', cpv, deps)
 
 for dep in deps:
 if dep in depgraph:
@@ -442,10 +437,8 @@ def main():
 parser = argparse.ArgumentParser(
 description='Generate a stabilization request for multiple packages'
 )
-parser.add_argument('-d', '--debug', action='store_true', default=False,
+parser.add_argument('-v', '--verbose', action='count',
 help='Make output more verbose')
-parser.add_argument('--extreme-debug', action='store_true', default=False,
-help='Make output even more verbose')
 parser.add_argument('--check-dependencies',
 action='store_true', default=False,
 help='Check dependencies are keyworded and if not,'
@@ -463,6 +456,33 @@ def main():
  ' to be stabilized')
 args = parser.parse_args()
 
+args.verbose = min(max(args.verbose, 0), 2)
+logging.config.dictConfig({
+'version': 1,
+'disable_existing_loggers': True,
+'formatters': {
+'brief': {'format': '%(message)s'},
+},
+'handlers': {
+'console': {
+'class': 'logging.StreamHandler',
+'level': 

[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-26 Thread Gilles Dartiguelongue
commit: c33a3166cd55a0245663cbb1472ef04fda4c44f8
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Thu Jun 25 13:31:07 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Fri Jun 26 22:14:40 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=c33a3166

scripts/gen_archlist: better names for get_best_deps variables

 scripts/gen_archlist.py | 81 -
 1 file changed, 46 insertions(+), 35 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index 066b31e..b362a5d 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -169,50 +169,59 @@ def get_best_deps(cpv, kws, release=None):
 Returns a list of the best deps of a cpv, optionally matching a release,
 and with max of the specified keywords
 
+# Take raw dependency strings and convert it to a list of atoms
 atoms = portage.portdb.aux_get(cpv, ['DEPEND', 'RDEPEND', 'PDEPEND'])
 atoms = ' '.join(atoms).split()  # consolidate atoms
 atoms = list(set(atoms))  # de-duplicate
+
 deps = set()
-tmp = []
+
 for atom in atoms:
-if atom.find('/') is -1:
-# It's not a dep atom
+if not portage.isvalidatom(atom):
 continue
-ret = match_wanted_atoms(atom, release)
-if not ret:
+
+cpvs = match_wanted_atoms(atom, release)
+if not cpvs:
 if DEBUG:
 debug('We encountered an irrelevant atom: %s' % atom)
 continue
-best_kws = ['', []]
-for i in ret:
+
+best_cpv_kws = ['', []]
+for candidate_cpv in cpvs:
 if STABLE:
 # Check that this version has unstable keywords
-ukws = make_unstable(kws)
-cur_ukws = make_unstable(get_kws(i, arches=kws | ukws))
-if cur_ukws.intersection(ukws) != ukws:
-best_kws = 'none'
+unstable_kws = make_unstable(kws)
+cur_unstable_kws = make_unstable(
+get_kws(candidate_cpv, arches=kws | unstable_kws)
+)
+if cur_unstable_kws.intersection(unstable_kws) != unstable_kws:
+best_cpv_kws[0] = 'none'
 if DEBUG:
-debug('Insufficient unstable keywords in: %s' % i)
+debug('Insufficient unstable keywords in: %s' %
+  candidate_cpv)
 continue
-cur_match_kws = get_kws(i, arches=kws)
-if cur_match_kws == kws:
-# This dep already has all keywords
-best_kws = 'alreadythere'
+
+candidate_kws = get_kws(candidate_cpv, arches=kws)
+if candidate_kws == kws:
+# This dep already has all requested keywords
+best_cpv_kws[0] = 'alreadythere'
 break
+
 # Select the version which needs least new keywords
-if len(cur_match_kws)  len(best_kws[1]):
-best_kws = [i, cur_match_kws]
-elif not best_kws[0]:
+if len(candidate_kws)  len(best_cpv_kws[1]):
+best_cpv_kws = [candidate_cpv, candidate_kws]
+elif not best_cpv_kws[0]:
 # This means that none of the versions have any of the stable
 # keywords that *we checked* (i.e. kws).
-best_kws = [i, []]
-if best_kws == 'alreadythere':
+best_cpv_kws = [candidate_cpv, []]
+
+if best_cpv_kws[0] == 'alreadythere':
 if DEBUG:
 nothing_to_be_done(atom, type='dep')
 continue
-elif best_kws == 'none':
+elif best_cpv_kws[0] == 'none':
 continue
-elif not best_kws[0]:
+elif not best_cpv_kws[0]:
 # We get this when the if STABLE: block above rejects everything.
 # This means that this atom does not have any versions with
 # unstable keywords matching the unstable keywords of the cpv
@@ -220,8 +229,8 @@ def get_best_deps(cpv, kws, release=None):
 # This mostly happens because an || or use dep exists. However, we
 # make such deps strict while parsing
 # XXX: We arbitrarily select the most recent version for this case
-deps.add(ret[0])
-elif not best_kws[1]:
+deps.add(cpvs[0])
+elif not best_cpv_kws[1]:
 # This means that none of the versions have any of the stable
 # keywords that *we checked* (i.e. kws). Hence, we do another pass;
 # this time checking *all* keywords.
@@ -229,20 +238,22 @@ def get_best_deps(cpv, kws, release=None):
 # XXX: We duplicate some of the things from the for loop above
 # We don't need to duplicate anything that caused a 'continue' or

[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-26 Thread Gilles Dartiguelongue
commit: a01ce56fddcd6b1f21233636b8661b4e4abdcd71
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Fri Jun 26 22:27:47 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Fri Jun 26 22:27:47 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=a01ce56f

scripts/gen_archlist: fix case of local variable

 scripts/gen_archlist.py | 10 +-
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index 21a196f..e6dc7bd 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -485,7 +485,7 @@ def main():
 },
 })
 
-ALL_CPV_KWS = []
+all_cpv_kws = []
 for line in open(args.file).readlines():
 cp = line.strip()
 
@@ -522,16 +522,16 @@ def main():
 'stable' if STABLE else 'keyworded')
 continue
 
-ALL_CPV_KWS.append(
+all_cpv_kws.append(
 gen_cpv_kws(cpv, kws_missing, set([cpv]),
 args.check_dependencies, args.new_version)
 )
 
-ALL_CPV_KWS = consolidate_dupes(ALL_CPV_KWS)
+all_cpv_kws = consolidate_dupes(all_cpv_kws)
 if args.append_slots:
-ALL_CPV_KWS = append_slots(ALL_CPV_KWS)
+all_cpv_kws = append_slots(all_cpv_kws)
 
-print_cpv_kws(ALL_CPV_KWS)
+print_cpv_kws(all_cpv_kws)
 
 
 if __name__ == '__main__':



[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-26 Thread Gilles Dartiguelongue
commit: 3dd724f0698988b69d2c15aa502d181ca609943b
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Wed Jun 24 12:07:21 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Thu Jun 25 12:46:05 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=3dd724f0

scripts/gen_archlist: simplify functions and try to enhance documentation

 scripts/gen_archlist.py | 60 ++---
 1 file changed, 27 insertions(+), 33 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index b21fba2..3ac9f88 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -101,14 +101,11 @@ def nothing_to_be_done(atom, type='cpv'):
 
 
 def make_unstable(kws):
-Takes a keyword list, and returns a list with them all unstable
-nkws = []
-for kw in kws:
-if not kw.startswith('~'):
-nkws.append('~'+kw)
-else:
-nkws.append(kw)
-return nkws
+Transform `kws` into a list of unstable keywords.
+return [
+kwd if kwd.startswith('~') else '~' + kwd
+for kwd in kws
+]
 
 
 def belongs_release(cpv, release):
@@ -127,14 +124,11 @@ def issystempackage(cpv):
 
 
 def get_kws(cpv, arches=ARCHES):
-
-Returns an array of KEYWORDS matching 'arches'
-
-kws = []
-for kw in portage.portdb.aux_get(cpv, ['KEYWORDS'])[0].split():
-if kw in arches:
-kws.append(kw)
-return kws
+Return keywords of `cpv` filtered by `arches`.
+return [
+kwd for kwd in portage.portdb.aux_get(cpv, ['KEYWORDS'])[0].split()
+if kwd in arches
+]
 
 
 def do_not_want(cpv, release=None):
@@ -149,20 +143,20 @@ def do_not_want(cpv, release=None):
 
 
 def match_wanted_atoms(atom, release=None):
+Return a list of CPV matching `atom`.
+
+If `release` is provided, CPVs are filtered against it.
+
+The list is sorted by descending order of version.
 
-Given an atom and a release, return all matching wanted atoms ordered in
-descending order of version
-
-atoms = []
 # xmatch is stupid, and ignores ! in an atom...
 if atom.startswith('!'):
 return []
-for cpv in portage.portdb.xmatch('match-all', atom):
-if do_not_want(cpv, release):
-continue
-atoms.append(cpv)
-atoms.reverse()
-return atoms
+
+return [
+cpv for cpv in reversed(portage.portdb.xmatch('match-all', atom))
+if not do_not_want(cpv, release)
+]
 
 
 def get_best_deps(cpv, kws, release=None):
@@ -278,15 +272,15 @@ def max_kws(cpv, release=None):
 
 
 # FIXME: This is broken
-def kws_wanted(cpv_kws, prev_cpv_kws):
-Generate a list of kws that need to be updated
+def kws_wanted(current_kws, target_kws):
+Generate a list of kws that need to be updated.
 wanted = []
-for kw in prev_cpv_kws:
-if kw not in cpv_kws:
-if STABLE and '~'+kw not in cpv_kws:
-# Ignore if no keywords at all
+for kwd in target_kws:
+if kwd not in current_kws:
+if STABLE and '~' + kwd not in current_kws:
+# Skip stable keywords with no corresponding unstable keyword
 continue
-wanted.append(kw)
+wanted.append(kwd)
 return wanted
 
 



[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-26 Thread Gilles Dartiguelongue
commit: 19c52766c8ca16879f8b03b3f6a9b85c0865a04f
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Thu Jun 25 12:47:22 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Fri Jun 26 22:14:40 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=19c52766

scripts/gen_archlist: make prettify the print function

No need for another function call at this point, everything that happens
in prettify is only intended for output.

 scripts/gen_archlist.py | 75 ++---
 1 file changed, 28 insertions(+), 47 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index f9cf432..066b31e 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -21,7 +21,7 @@
 # * Support recursive checking of needed keywords in deps
 #
 
-from __future__ import division
+from __future__ import division, print_function
 
 import argparse
 import collections
@@ -392,52 +392,34 @@ def append_slots(cpv_kws):
 return slotifyed_cpv_kws
 
 
-# FIXME: This is broken
-def prettify(cpv_kws):
-Takes a list of [cpv, [kws]] and prettifies it
+def print_cpv_kws(cpv_kws):
+Takes a list of [cpv, [kws]] and prettifies it
 max_len = 0
-kws_all = []
-pretty_list = []
-cpv_block_size = 0
+kws_all = set()
 
-for each in cpv_kws:
-# Ignore comments/whitespace carried over from original list
-if type(each) is not list:
-continue
-# Find the atom with max length (for output formatting)
-if len(each[0])  max_len:
-max_len = len(each[0])
-# Find the set of all kws listed
-for kw in each[1]:
-if kw not in kws_all:
-kws_all.append(kw)
-kws_all.sort()
-
-for each in cpv_kws:
-# Handle comments/whitespace carried over from original list
-if type(each) is not list:
-# If the prev cpv block has just one line, don't print an extra \n
-# XXX: This code relies on blocks of dep-cpvs being separated by \n
-if CHECK_DEPS and cpv_block_size is 1:
-cpv_block_size = 0
-continue
-pretty_list.append([each, []])
-cpv_block_size = 0
-continue
-# The size of the current cpv list block
-cpv_block_size += 1
-# Pad the cpvs with space
-each[0] += n_sep(max_len - len(each[0]))
-for i in range(0, len(kws_all)):
-if i == len(each[1]):
-# Prevent an IndexError
-# This is a problem in the algo I selected
-each[1].append('')
-if each[1][i] != kws_all[i]:
-# If no arch, insert space
-each[1].insert(i, n_sep(len(kws_all[i])))
-pretty_list.append([each[0], each[1]])
-return pretty_list
+for dep_set in cpv_kws:
+for cpv, kws in dep_set:
+# Find the atom with max length (for output formatting)
+max_len = max(max_len, len(cpv))
+# Find the set of all kws listed
+kws_all.update(kws)
+
+for dep_set in cpv_kws:
+for cpv, kws in dep_set:
+pretty_line = cpv + ' ' * (max_len - len(cpv))
+
+for kwd in sorted(kws_all):
+if kwd in kws:
+pretty_line += ' ' + kwd
+else:
+pretty_line += ' ' + ' ' * len(kwd)
+
+print(pretty_line)
+
+if len(dep_set)  1:
+print()
+
+return
 
 
 #
@@ -511,8 +493,7 @@ def main():
 if args.append_slots:
 ALL_CPV_KWS = append_slots(ALL_CPV_KWS)
 
-for i in prettify(ALL_CPV_KWS):
-print i[0], flatten(i[1])
+print_cpv_kws(ALL_CPV_KWS)
 
 
 if __name__ == '__main__':



[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-26 Thread Gilles Dartiguelongue
commit: 5451ec12c9fc4363c7f812c2fc3da253d8ffa306
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Wed Jun 24 11:26:24 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Thu Jun 25 12:46:00 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=5451ec12

scripts/gen_archlist: move dev style configuration to argparse

This commit actually breaks the script since some functions do not have
proper arguments to handle configuration from main entry-point.

 scripts/gen_archlist.py | 78 -
 1 file changed, 38 insertions(+), 40 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index 6369aa2..b21fba2 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -23,6 +23,7 @@
 
 from __future__ import division
 
+import argparse
 import os
 import sys
 
@@ -50,36 +51,19 @@ EXTREME_DEBUG = False
 CHECK_DEPS = False
 APPEND_SLOTS = False
 # Check for stable keywords
+# This is intended to switch between keywordreq (for ~arch)
+# and stablereq (for moving from ~arch to arch)
 STABLE = True
 
+# if not STABLE:
+# print 'Currently broken for anything except STABLEREQ'
+# print 'Please set STABLE to True'
+# sys.exit(1)
+
 ###
 # Preparation #
 ###
 ALL_CPV_KWS = []
-OLD_REL = None
-NEW_REL = None
-
-if __name__ == __main__:
-try:
-CP_FILE = sys.argv[1]  # File which has the cp list
-except IndexError:
-print Usage: %s file [old_rel] [new_rel]
-
-Where file is a file with a category/package list
-  [old_rel] is an optional argument for specifying which release cycle
-to use to get the cpv which has the keyword we need
-i.e., which cpvs will we get the list of keywords from?
-  [new_rel] is an optional argument for specifying which release cycle
-to use to get the latest cpv on which we want keywords
-i.e., which cpvs will go in the list?
-WARNING: the logic for old_rel  new_rel is very incomplete. See TODO
- % sys.argv[0]
-sys.exit(0)
-
-if len(sys.argv)  2:
-OLD_REL = sys.argv[2]
-if len(sys.argv)  3:
-NEW_REL = sys.argv[3]
 
 ARCHES = None
 if STABLE:
@@ -87,17 +71,6 @@ if STABLE:
 else:
 ARCHES = UNSTABLE_ARCHES
 
-if 'CHECK_DEPS' in os.environ:
-CHECK_DEPS = os.environ['CHECK_DEPS']
-
-if 'APPEND_SLOTS' in os.environ:
-APPEND_SLOTS = os.environ['APPEND_SLOTS']
-
-if not STABLE:
-print 'Currently broken for anything except STABLEREQ'
-print 'Please set STABLE to True'
-sys.exit(1)
-
 
 
 # Define Functions #
@@ -495,8 +468,32 @@ def prettify(cpv_kws):
 # cpvs that will make it to the final list
 def main():
 Where the magic happens!
+parser = argparse.ArgumentParser(
+description='Generate a stabilization request for multiple packages'
+)
+parser.add_argument('-d', '--debug', action='store_true', default=False,
+help='Make output more verbose')
+parser.add_argument('--extreme-debug', action='store_true', default=False,
+help='Make output even more verbose')
+parser.add_argument('--check-dependencies',
+action='store_true', default=False,
+help='Check dependencies are keyworded and if not,'
+ ' add them to the list')
+parser.add_argument('--append-slots', action='store_true', default=False,
+help='Append slots to CPVs output')
+parser.add_argument('file', help='File to read CP from')
+parser.add_argument('old_version', nargs='?',
+help='An optional argument specifying which release'
+ ' cycle to use to get CPVs which has the'
+ ' reference keywords for stabilization.')
+parser.add_argument('new_version', nargs='?',
+help='An optional argument specifying which release'
+ ' cycle to use to get the latest CPVs that needs'
+ ' to be stabilized')
+args = parser.parse_args()
+
 ALL_CPV_KWS = []
-for i in open(CP_FILE).readlines():
+for i in open(args.file).readlines():
 cp = i[:-1]
 if cp.startswith('#') or cp.isspace() or not cp:
 ALL_CPV_KWS.append(cp)
@@ -508,13 +505,14 @@ def main():
 atoms = [cp]
 else:
 # Get all the atoms matching the given cp
-cpvs = match_wanted_atoms(cp, release=NEW_REL)
+cpvs = match_wanted_atoms(cp, release=args.new_version)
 
 for cpv in get_per_slot_cpvs(cpvs):
 if not cpv:
 debug('%s: Invalid cpv' % cpv)
 continue
-kws_missing = max_kws(cpv, release=OLD_REL)
+
+kws_missing = max_kws(cpv, release=args.old_version)
 if kws_missing == []:
 

[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-26 Thread Gilles Dartiguelongue
commit: 6ce2657c1052fa500cc5e84b51ce88b06b96098f
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Fri Jun 26 22:29:42 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Fri Jun 26 22:29:42 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=6ce2657c

scripts/gen_archlist: remove dead code

 scripts/gen_archlist.py | 21 -
 1 file changed, 21 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index e6dc7bd..7f677b1 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -48,10 +48,7 @@ SYSTEM_PACKAGES = []
 
 # Settings #
 
-DEBUG = False
-EXTREME_DEBUG = False
 CHECK_DEPS = False
-APPEND_SLOTS = False
 # Check for stable keywords
 # This is intended to switch between keywordreq (for ~arch)
 # and stablereq (for moving from ~arch to arch)
@@ -76,24 +73,6 @@ else:
 
 # Define Functions #
 
-def flatten(list, sep=' '):
-Given a list, returns a flat string separated by 'sep'
-return sep.join(list)
-
-
-def n_sep(n, sep=' '):
-tmp = ''
-for i in range(0, n):
-tmp += sep
-return tmp
-
-
-def debug(*strings):
-from portage.output import EOutput
-ewarn = EOutput().ewarn
-ewarn(flatten(strings))
-
-
 def make_unstable(kws):
 Transform `kws` into a list of unstable keywords.
 return set([



[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-26 Thread Gilles Dartiguelongue
commit: 24bd1b67e381e6aa5bff5e597bd3a96c98f4f4a7
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Thu Jun 25 07:57:48 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Thu Jun 25 12:46:23 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=24bd1b67

scripts/gen_archlist: use sets for manipulating keywords

Avoids logic like if bla not in list then add it when it is done by
sets already. Sorting can be applied when printing.

 scripts/gen_archlist.py | 27 +--
 1 file changed, 13 insertions(+), 14 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index 6e00ec1..f2a68e5 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -101,10 +101,10 @@ def nothing_to_be_done(atom, type='cpv'):
 
 def make_unstable(kws):
 Transform `kws` into a list of unstable keywords.
-return [
+return set([
 kwd if kwd.startswith('~') else '~' + kwd
 for kwd in kws
-]
+])
 
 
 def belongs_release(cpv, release):
@@ -124,10 +124,10 @@ def issystempackage(cpv):
 
 def get_kws(cpv, arches=ARCHES):
 Return keywords of `cpv` filtered by `arches`.
-return [
+return set([
 kwd for kwd in portage.portdb.aux_get(cpv, ['KEYWORDS'])[0].split()
 if kwd in arches
-]
+])
 
 
 def can_stabilize_cpv(cpv, release=None):
@@ -188,14 +188,14 @@ def get_best_deps(cpv, kws, release=None):
 if STABLE:
 # Check that this version has unstable keywords
 ukws = make_unstable(kws)
-cur_ukws = set(make_unstable(get_kws(i, arches=kws+ukws)))
-if cur_ukws.intersection(ukws) != set(ukws):
+cur_ukws = make_unstable(get_kws(i, arches=kws | ukws))
+if cur_ukws.intersection(ukws) != ukws:
 best_kws = 'none'
 if DEBUG:
 debug('Insufficient unstable keywords in: %s' % i)
 continue
 cur_match_kws = get_kws(i, arches=kws)
-if set(cur_match_kws) == set(kws):
+if cur_match_kws == kws:
 # This dep already has all keywords
 best_kws = 'alreadythere'
 break
@@ -279,7 +279,7 @@ def max_kws(cpv, release=None):
 missing_kws.add(kwd)
 
 if maximum_kws:
-return sorted(missing_kws)
+return missing_kws
 else:
 # No cpv has the keywords we need
 return None
@@ -288,13 +288,12 @@ def max_kws(cpv, release=None):
 # FIXME: This is broken
 def kws_wanted(current_kws, target_kws):
 Generate a list of kws that need to be updated.
-wanted = []
+wanted = set()
 for kwd in target_kws:
-if kwd not in current_kws:
-if STABLE and '~' + kwd not in current_kws:
-# Skip stable keywords with no corresponding unstable keyword
-continue
-wanted.append(kwd)
+if STABLE and '~' + kwd not in current_kws:
+# Skip stable keywords with no corresponding unstable keyword
+continue
+wanted.add(kwd)
 return wanted
 
 



[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-26 Thread Gilles Dartiguelongue
commit: 4542a3fc2042bb029e0a7b124724c6af41d6ff87
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Wed Jun 24 12:08:20 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Thu Jun 25 12:46:14 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=4542a3fc

scripts/gen_archlist: rename do_not_want function

Give it a better name of split logic down in multiple lines, it is
easier to read that a kilometric if line.

Logic was inverted to avoid double negation in match_wanted_atoms
function.

 scripts/gen_archlist.py | 24 +++-
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index 9a74d21..9b60f03 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -131,15 +131,21 @@ def get_kws(cpv, arches=ARCHES):
 ]
 
 
-def do_not_want(cpv, release=None):
-
-Check if a package atom is p.masked or has empty keywords, or does not
-belong to a release
+def can_stabilize_cpv(cpv, release=None):
+Whether `cpv` matches stabilization criteria.
+
+`cpv` must:
+* belong to the release
+* not be p.masked
+* have keywords
 
-if release and not belongs_release(cpv, release) or not \
-portage.portdb.visible([cpv]) or not get_kws(cpv, arches=ALL_ARCHES):
-return True
-return False
+if release and not belongs_release(cpv, release):
+return False
+if not portage.portdb.visible([cpv]):
+return False
+if not get_kws(cpv, arches=ALL_ARCHES):
+return False
+return True
 
 
 def match_wanted_atoms(atom, release=None):
@@ -155,7 +161,7 @@ def match_wanted_atoms(atom, release=None):
 
 return [
 cpv for cpv in reversed(portage.portdb.xmatch('match-all', atom))
-if not do_not_want(cpv, release)
+if can_stabilize_cpv(cpv, release)
 ]
 
 



[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-26 Thread Gilles Dartiguelongue
commit: 30e08cc1e869e0234aaacd56ed93242ba138b31d
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Thu Jun 25 11:22:34 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Thu Jun 25 12:46:24 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=30e08cc1

scripts/gen_archlist: remove fix_nesting function

Could not figure out if this was needed at all. At least it appears it
is not useful anymore. Kill its weird logic with fire.

 scripts/gen_archlist.py | 21 +
 1 file changed, 1 insertion(+), 20 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index f2a68e5..659c84e 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -347,25 +347,6 @@ def gen_cpv_kws(cpv, kws_aim, depgraph, 
check_dependencies, new_release):
 return cpv_kw_list
 
 
-def fix_nesting(nested_list):
-Takes a list of unknown nesting depth, and gives a nice list with each
-element of the form [cpv, [kws]]
-index = 0
-cpv_index = -1
-nice_list = []
-# Has an unpredictable nesting of lists; so we flatten it...
-flat_list = portage.flatten(nested_list)
-# ... and re-create a nice list for us to use
-while index  len(flat_list):
-if portage.catpkgsplit(flat_list[index]):
-cpv_index += 1
-nice_list.append([flat_list[index], []])
-else:
-nice_list[cpv_index][1].append(flat_list[index])
-index += 1
-return nice_list
-
-
 def consolidate_dupes(cpv_kws):
 
 Consolidate duplicate cpvs with differing keywords
@@ -546,7 +527,7 @@ def main():
 nothing_to_be_done(cpv)
 continue
 
-ALL_CPV_KWS += fix_nesting(
+ALL_CPV_KWS.append(
 gen_cpv_kws(cpv, kws_missing, set([cpv]),
 args.check_dependencies, args.new_version)
 )



[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-26 Thread Gilles Dartiguelongue
commit: 813f7fbce53580a4e7302f9d4ce6f40e5410d965
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Wed Jun 24 13:17:47 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Thu Jun 25 12:46:19 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=813f7fbc

scripts/gen_archlist: rewrite max_kws logic

Not sure if everything is still the same but it got more comments and
looks easier to read.

 scripts/gen_archlist.py | 53 +
 1 file changed, 32 insertions(+), 21 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index 9b60f03..15d5b02 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -248,8 +248,9 @@ def get_best_deps(cpv, kws, release=None):
 
 
 def max_kws(cpv, release=None):
-
-Given a cpv, find the intersection of most keywords it can have and
+Build `cpv` maximum expected keyword coverage.
+
+Find the intersection of most keywords it can have and
 keywords it has, and returns a sorted list
 
 If STABLE; makes sure it has unstable keywords right now
@@ -257,21 +258,29 @@ def max_kws(cpv, release=None):
 Returns [] if current cpv has best keywords
 Returns None if no cpv has keywords
 
-current_kws = get_kws(cpv, arches=ALL_ARCHES)
-maximum_kws = []  # Maximum keywords that a cpv has
-missing_kws = []
-for atom in match_wanted_atoms('='+cpv, release):
+current_kws = set(get_kws(cpv, arches=ALL_ARCHES))
+maximum_kws = set()  # Maximum keywords that a cpv has
+missing_kws = set()
+
+# Build best keyword coverage for `cpv`
+for atom in match_wanted_atoms('=' + cpv, release):
 kws = get_kws(atom)
-if len(kws)  len(maximum_kws):
-maximum_kws = kws
-for kw in kws:
-if kw not in missing_kws+current_kws:
-if STABLE and '~'+kw not in current_kws:
-continue
-missing_kws.append(kw)
-missing_kws.sort()
-if maximum_kws != []:
-return missing_kws
+
+# Consider stable keywords only
+if STABLE:
+kws = [kwd for kwd in kws if not kwd.startswith('~')]
+
+maximum_kws.update(set(kws))
+
+# Build list of keywords missing to achieve best coverage
+for kwd in maximum_kws:
+# Skip stable keywords with no corresponding unstable keyword in `cpv`
+if STABLE and '~' + kwd not in current_kws:
+continue
+missing_kws.add(kwd)
+
+if maximum_kws:
+return sorted(missing_kws)
 else:
 # No cpv has the keywords we need
 return None
@@ -513,15 +522,17 @@ def main():
 continue
 
 kws_missing = max_kws(cpv, release=args.old_version)
-if kws_missing == []:
-# Current cpv has the max keywords = nothing to do
-nothing_to_be_done(cpv)
-continue
-elif kws_missing is None:
+if kws_missing is None:
 debug('No versions with stable keywords for %s' % cpv)
 # No cpv with stable keywords = select latest
 arches = make_unstable(ARCHES)
 kws_missing = [kw[1:] for kw in get_kws(cpv, arches)]
+
+elif not kws_missing:
+# Current cpv has the max keywords = nothing to do
+nothing_to_be_done(cpv)
+continue
+
 ALL_CPV_KWS += fix_nesting(gen_cpv_kws(cpv, kws_missing, set()))
 if args.check_dependencies:
 ALL_CPV_KWS.append(LINE_SEP)



[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-26 Thread Gilles Dartiguelongue
commit: d1f4f46de1234dbf750ab8815dcf2aa6a827eb4d
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Wed Jun 24 09:35:49 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Thu Jun 25 12:45:47 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=d1f4f46d

scripts/gen_archlist: apply PEP8 rules

 scripts/gen_archlist.py | 145 ++--
 1 file changed, 90 insertions(+), 55 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index fa26b90..407ebbd 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -10,10 +10,10 @@
 # You can use test-data/package-list to test the script out.
 #
 # NOTE: This script assumes that there are no broken keyword deps
-# 
+#
 # BUGS:
-# * belongs_release() is a very primitive function, which means usage of 
old/new
-#   release numbers gives misleading output
+# * belongs_release() is a very primitive function, which means usage of
+#   old/new release numbers gives misleading output
 # * Will show multiple versions of the same package in the output sometimes.
 #   This happens when a cp is specified in the cpv list, and is resolved as
 #   a dependency as well.
@@ -22,25 +22,29 @@
 #
 
 from __future__ import division
-import os, sys
+
+import os
+import sys
+
 import portage
 
-###
-## Constants ##
-###
-#GNOME_OVERLAY = PORTDB.getRepositoryPath('gnome')
+#
+# Constants #
+#
+# GNOME_OVERLAY = PORTDB.getRepositoryPath('gnome')
 portage.portdb.porttrees = [portage.settings['PORTDIR']]
 STABLE_ARCHES = ('alpha', 'amd64', 'arm', 'hppa', 'ia64', 'm68k', 'ppc',
-'ppc64', 's390', 'sh', 'sparc', 'x86')
-UNSTABLE_ARCHES = ('~alpha', '~amd64', '~arm', '~hppa', '~ia64', '~m68k', 
'~ppc',
-'~ppc64', '~s390', '~sh', '~sparc', '~x86', '~x86-fbsd')
-ALL_ARCHES = STABLE_ARCHES+UNSTABLE_ARCHES
+ 'ppc64', 's390', 'sh', 'sparc', 'x86')
+UNSTABLE_ARCHES = ('~alpha', '~amd64', '~arm', '~hppa', '~ia64', '~m68k',
+   '~ppc', '~ppc64', '~s390', '~sh', '~sparc', '~x86',
+   '~x86-fbsd')
+ALL_ARCHES = STABLE_ARCHES + UNSTABLE_ARCHES
 SYSTEM_PACKAGES = []
 LINE_SEP = ''
 
-##
-## Settings ##
-##
+
+# Settings #
+
 DEBUG = False
 EXTREME_DEBUG = False
 CHECK_DEPS = False
@@ -48,40 +52,45 @@ APPEND_SLOTS = False
 # Check for stable keywords
 STABLE = True
 
-#
-## Preparation ##
-#
+###
+# Preparation #
+###
 ALL_CPV_KWS = []
 OLD_REL = None
 NEW_REL = None
+
 if __name__ == __main__:
 try:
-CP_FILE = sys.argv[1] # File which has the cp list
+CP_FILE = sys.argv[1]  # File which has the cp list
 except IndexError:
-print 'Usage: %s file [old_rel] [new_rel]' % sys.argv[0]
-print 'Where file is a file with a category/package list'
-print '  [old_rel] is an optional argument for specifying which 
release cycle'
-print 'to use to get the cpv which has the keyword we need'
-print 'i.e., which cpvs will we get the list of keywords 
from?'
-print '  [new_rel] is an optional argument for specifying which 
release cycle'
-print 'to use to get the latest cpv on which we want 
keywords'
-print 'i.e., which cpvs will go in the list?'
-print 'WARNING: the logic for old_rel  new_rel is very incomplete. 
See TODO'
+print Usage: %s file [old_rel] [new_rel]
+
+Where file is a file with a category/package list
+  [old_rel] is an optional argument for specifying which release cycle
+to use to get the cpv which has the keyword we need
+i.e., which cpvs will we get the list of keywords from?
+  [new_rel] is an optional argument for specifying which release cycle
+to use to get the latest cpv on which we want keywords
+i.e., which cpvs will go in the list?
+WARNING: the logic for old_rel  new_rel is very incomplete. See TODO
+ % sys.argv[0]
 sys.exit(0)
+
 if len(sys.argv)  2:
 OLD_REL = sys.argv[2]
 if len(sys.argv)  3:
 NEW_REL = sys.argv[3]
+
 ARCHES = None
 if STABLE:
 ARCHES = STABLE_ARCHES
 else:
 ARCHES = UNSTABLE_ARCHES
 
-if os.environ.has_key('CHECK_DEPS'):
+if 'CHECK_DEPS' in os.environ:
 CHECK_DEPS = os.environ['CHECK_DEPS']
 
-if os.environ.has_key('APPEND_SLOTS'):
+if 'APPEND_SLOTS' in os.environ:
 APPEND_SLOTS = os.environ['APPEND_SLOTS']
 
 if not STABLE:
@@ -89,30 +98,35 @@ if not STABLE:
 print 'Please set STABLE to True'
 sys.exit(1)
 
-##
-## Define Functions ##
-##
+
+
+# Define Functions #
+
 def flatten(list, sep=' '):
 Given a list, returns a flat string separated by 'sep'
 return sep.join(list)
 
+
 def n_sep(n, 

[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-26 Thread Gilles Dartiguelongue
commit: 9a712ebe4e2495134421a3df88ebe9962b6fa50e
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Wed Jun 24 14:39:56 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Thu Jun 25 12:46:23 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=9a712ebe

scripts/gen_archlist: fix gen_cpv_kws to use arguments from command line

* Change the cpv_kw format to a tuple, there is no point in using a list.
* Move/edit some lines around to expose logic in a clearer way.
* Retrieve arguments from command line.
* Add some comments.

 scripts/gen_archlist.py | 47 ---
 1 file changed, 32 insertions(+), 15 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index 15d5b02..6e00ec1 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -63,7 +63,6 @@ STABLE = True
 ###
 # Preparation #
 ###
-ALL_CPV_KWS = []
 
 ARCHES = None
 if STABLE:
@@ -299,10 +298,15 @@ def kws_wanted(current_kws, target_kws):
 return wanted
 
 
-def gen_cpv_kws(cpv, kws_aim, depgraph):
-depgraph.add(cpv)
-cpv_kw_list = [[cpv, kws_wanted(get_kws(cpv, arches=ALL_ARCHES), kws_aim)]]
-if not cpv_kw_list[0][1]:
+def gen_cpv_kws(cpv, kws_aim, depgraph, check_dependencies, new_release):
+Build a list of CPV-Keywords.
+
+If `check_dependencies` is True, append dependencies that need to be
+updated to the list.
+
+wanted = kws_wanted(get_kws(cpv, arches=ALL_ARCHES), kws_aim)
+
+if not wanted:
 # This happens when cpv has less keywords than kws_aim
 # Usually happens when a dep was an || dep, or under a USE-flag
 # which is masked in some profiles. We make all deps strict in
@@ -313,23 +317,33 @@ def gen_cpv_kws(cpv, kws_aim, depgraph):
 debug('MEH')
 nothing_to_be_done(cpv, type='dep')
 return None
+
 wanted = get_kws(cpv, arches=make_unstable(kws_aim))
-cpv_kw_list = [[cpv, wanted]]
-if CHECK_DEPS and not issystempackage(cpv):
-deps = get_best_deps(cpv, cpv_kw_list[0][1], release=NEW_REL)
+
+cpv_kw_list = [(cpv, wanted)]
+
+if check_dependencies and not issystempackage(cpv):
+deps = get_best_deps(cpv, wanted, release=new_release)
 if EXTREME_DEBUG:
 debug('The deps of %s are %s' % (cpv, deps))
+
 for dep in deps:
 if dep in depgraph:
+# XXX: assumes that `kws_aim` of previously added cpv is
+#  larger than current
 continue
+
 depgraph.add(dep)
-# Assumes that keyword deps are OK if STABLE
-dep_deps = gen_cpv_kws(dep, cpv_kw_list[0][1], depgraph)
+# XXX: Assumes that dependencies are keyworded the same than cpv
+dep_deps = gen_cpv_kws(dep, wanted, depgraph, check_dependencies,
+   new_release)
 dep_deps.reverse()
-for i in dep_deps:
-# Make sure we don't already have the same [cpv, [kws]]
-if i not in ALL_CPV_KWS and i not in cpv_kw_list:
-cpv_kw_list.append(i)
+
+for cpv_kw_tuple in dep_deps:
+# Make sure we don't already have the same [(cpv, kws)]
+if cpv_kw_tuple not in cpv_kw_list:
+cpv_kw_list.append(cpv_kw_tuple)
+
 cpv_kw_list.reverse()
 return cpv_kw_list
 
@@ -533,7 +547,10 @@ def main():
 nothing_to_be_done(cpv)
 continue
 
-ALL_CPV_KWS += fix_nesting(gen_cpv_kws(cpv, kws_missing, set()))
+ALL_CPV_KWS += fix_nesting(
+gen_cpv_kws(cpv, kws_missing, set([cpv]),
+args.check_dependencies, args.new_version)
+)
 if args.check_dependencies:
 ALL_CPV_KWS.append(LINE_SEP)
 



[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-26 Thread Gilles Dartiguelongue
commit: 9e2189f5a6efd3c0ab7d1f386f532d3d42b18734
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Wed Jun 24 12:07:39 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Thu Jun 25 12:46:09 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=9e2189f5

scripts/gen_archlist: fix belongs_release

get_ver is undefined, I wonder how this could ever work.

 scripts/gen_archlist.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index 3ac9f88..9a74d21 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -109,11 +109,11 @@ def make_unstable(kws):
 
 
 def belongs_release(cpv, release):
-Check if the given cpv belongs to the given release
+Check if `cpv` belongs to the release `release`.
 # FIXME: This failure function needs better logic
 if CHECK_DEPS:
 raise Exception('This function is utterly useless with RECURSIVE mode')
-return get_ver(cpv).startswith(release)
+return portage.versions.cpv_getversion(cpv).startswith(release)
 
 
 def issystempackage(cpv):



[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-26 Thread Gilles Dartiguelongue
commit: 8590d8da1adf4445f928c940c2959d2a6035bdd8
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Fri Jun 26 22:08:58 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Fri Jun 26 22:14:42 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=8590d8da

scripts/gen_archlist: cosmetics

 scripts/gen_archlist.py | 14 ++
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index e4597c6..7c41a9c 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -376,7 +376,11 @@ def consolidate_dupes(cpv_kws):
 
 
 def get_per_slot_cpvs(cpvs):
-Classify the given cpvs into slots, and yield the best atom for each slot
+Return best CPV per slot.
+
+Classify the CPVs into slots, and yield the best atom for each slot.
+This only works with a pre-sorted list as returned by `match_wanted_atoms`.
+
 slots = set()
 for cpv in cpvs:
 slot = portage.portage.portdb.aux_get(cpv, ['SLOT'])[0]
@@ -387,9 +391,9 @@ def get_per_slot_cpvs(cpvs):
 
 
 def append_slots(cpv_kws):
-Append slots at the end of cpv atoms
+Append slots at the end of cpv atoms
 slotifyed_cpv_kws = []
-for (cpv, kws) in cpv_kws:
+for cpv, kws in cpv_kws:
 slot = portage.portage.portdb.aux_get(cpv, ['SLOT'])[0]
 cpv = %s:%s % (cpv, slot)
 slotifyed_cpv_kws.append([cpv, kws])
@@ -489,11 +493,13 @@ def main():
 continue
 if cp.find('#') is not -1:
 raise Exception('Inline comments are not supported')
+
+# Convert line to CPV(s)
 if portage.catpkgsplit(cp):
 # cat/pkg is already a categ/pkg-ver
 cpvs = [cp]
 else:
-# Get all the atoms matching the given cp
+# Get all the atoms matching the given CP
 cpvs = match_wanted_atoms(cp, release=args.new_version)
 
 for cpv in get_per_slot_cpvs(cpvs):



[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-26 Thread Gilles Dartiguelongue
commit: bb81b5c9415b3d70f508a77ba1f79f86c5b4a79c
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Fri Jun 26 22:09:54 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Fri Jun 26 22:14:43 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=bb81b5c9

scripts/gen_archlist: do not add skipped lines to ALL_CPV_KWS

Why in the world would we want to do that.

 scripts/gen_archlist.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index 7c41a9c..1633dfa 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -489,7 +489,6 @@ def main():
 for i in open(args.file).readlines():
 cp = i[:-1]
 if cp.startswith('#') or cp.isspace() or not cp:
-ALL_CPV_KWS.append(cp)
 continue
 if cp.find('#') is not -1:
 raise Exception('Inline comments are not supported')



[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-26 Thread Gilles Dartiguelongue
commit: 86f443210464a83721be581cc00cfe08dc5632bd
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Fri Jun 26 22:10:42 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Fri Jun 26 22:14:43 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=86f44321

scripts/gen_archlist: simplify logic of file parsing

 scripts/gen_archlist.py | 11 +++
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index 1633dfa..21a196f 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -486,11 +486,14 @@ def main():
 })
 
 ALL_CPV_KWS = []
-for i in open(args.file).readlines():
-cp = i[:-1]
-if cp.startswith('#') or cp.isspace() or not cp:
+for line in open(args.file).readlines():
+cp = line.strip()
+
+# Filter useless lines
+if not cp or cp.startswith('#'):
 continue
-if cp.find('#') is not -1:
+
+if '#' in cp:
 raise Exception('Inline comments are not supported')
 
 # Convert line to CPV(s)



[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-26 Thread Gilles Dartiguelongue
commit: 4571219b191c1786d7ff4b0e5a6ade19e5c30875
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Thu Jun 25 11:26:43 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Fri Jun 26 22:14:39 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=4571219b

scripts/gen_archlist: add full CPV lines to our workset

Probably an overlooked rename.

 scripts/gen_archlist.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index d595df3..f9cf432 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -479,8 +479,8 @@ def main():
 if cp.find('#') is not -1:
 raise Exception('Inline comments are not supported')
 if portage.catpkgsplit(cp):
-# categ/pkg is already a categ/pkg-ver
-atoms = [cp]
+# cat/pkg is already a categ/pkg-ver
+cpvs = [cp]
 else:
 # Get all the atoms matching the given cp
 cpvs = match_wanted_atoms(cp, release=args.new_version)



[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-24 Thread Gilles Dartiguelongue
commit: 3e63b913e81f842dfac1b76bb9a5d1fdcbcd5236
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Wed Jun 24 09:35:49 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Wed Jun 24 12:11:10 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=3e63b913

scripts/gen_archlist: Apply PEP8 rules

 scripts/gen_archlist.py | 145 ++--
 1 file changed, 90 insertions(+), 55 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index fa26b90..407ebbd 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -10,10 +10,10 @@
 # You can use test-data/package-list to test the script out.
 #
 # NOTE: This script assumes that there are no broken keyword deps
-# 
+#
 # BUGS:
-# * belongs_release() is a very primitive function, which means usage of 
old/new
-#   release numbers gives misleading output
+# * belongs_release() is a very primitive function, which means usage of
+#   old/new release numbers gives misleading output
 # * Will show multiple versions of the same package in the output sometimes.
 #   This happens when a cp is specified in the cpv list, and is resolved as
 #   a dependency as well.
@@ -22,25 +22,29 @@
 #
 
 from __future__ import division
-import os, sys
+
+import os
+import sys
+
 import portage
 
-###
-## Constants ##
-###
-#GNOME_OVERLAY = PORTDB.getRepositoryPath('gnome')
+#
+# Constants #
+#
+# GNOME_OVERLAY = PORTDB.getRepositoryPath('gnome')
 portage.portdb.porttrees = [portage.settings['PORTDIR']]
 STABLE_ARCHES = ('alpha', 'amd64', 'arm', 'hppa', 'ia64', 'm68k', 'ppc',
-'ppc64', 's390', 'sh', 'sparc', 'x86')
-UNSTABLE_ARCHES = ('~alpha', '~amd64', '~arm', '~hppa', '~ia64', '~m68k', 
'~ppc',
-'~ppc64', '~s390', '~sh', '~sparc', '~x86', '~x86-fbsd')
-ALL_ARCHES = STABLE_ARCHES+UNSTABLE_ARCHES
+ 'ppc64', 's390', 'sh', 'sparc', 'x86')
+UNSTABLE_ARCHES = ('~alpha', '~amd64', '~arm', '~hppa', '~ia64', '~m68k',
+   '~ppc', '~ppc64', '~s390', '~sh', '~sparc', '~x86',
+   '~x86-fbsd')
+ALL_ARCHES = STABLE_ARCHES + UNSTABLE_ARCHES
 SYSTEM_PACKAGES = []
 LINE_SEP = ''
 
-##
-## Settings ##
-##
+
+# Settings #
+
 DEBUG = False
 EXTREME_DEBUG = False
 CHECK_DEPS = False
@@ -48,40 +52,45 @@ APPEND_SLOTS = False
 # Check for stable keywords
 STABLE = True
 
-#
-## Preparation ##
-#
+###
+# Preparation #
+###
 ALL_CPV_KWS = []
 OLD_REL = None
 NEW_REL = None
+
 if __name__ == __main__:
 try:
-CP_FILE = sys.argv[1] # File which has the cp list
+CP_FILE = sys.argv[1]  # File which has the cp list
 except IndexError:
-print 'Usage: %s file [old_rel] [new_rel]' % sys.argv[0]
-print 'Where file is a file with a category/package list'
-print '  [old_rel] is an optional argument for specifying which 
release cycle'
-print 'to use to get the cpv which has the keyword we need'
-print 'i.e., which cpvs will we get the list of keywords 
from?'
-print '  [new_rel] is an optional argument for specifying which 
release cycle'
-print 'to use to get the latest cpv on which we want 
keywords'
-print 'i.e., which cpvs will go in the list?'
-print 'WARNING: the logic for old_rel  new_rel is very incomplete. 
See TODO'
+print Usage: %s file [old_rel] [new_rel]
+
+Where file is a file with a category/package list
+  [old_rel] is an optional argument for specifying which release cycle
+to use to get the cpv which has the keyword we need
+i.e., which cpvs will we get the list of keywords from?
+  [new_rel] is an optional argument for specifying which release cycle
+to use to get the latest cpv on which we want keywords
+i.e., which cpvs will go in the list?
+WARNING: the logic for old_rel  new_rel is very incomplete. See TODO
+ % sys.argv[0]
 sys.exit(0)
+
 if len(sys.argv)  2:
 OLD_REL = sys.argv[2]
 if len(sys.argv)  3:
 NEW_REL = sys.argv[3]
+
 ARCHES = None
 if STABLE:
 ARCHES = STABLE_ARCHES
 else:
 ARCHES = UNSTABLE_ARCHES
 
-if os.environ.has_key('CHECK_DEPS'):
+if 'CHECK_DEPS' in os.environ:
 CHECK_DEPS = os.environ['CHECK_DEPS']
 
-if os.environ.has_key('APPEND_SLOTS'):
+if 'APPEND_SLOTS' in os.environ:
 APPEND_SLOTS = os.environ['APPEND_SLOTS']
 
 if not STABLE:
@@ -89,30 +98,35 @@ if not STABLE:
 print 'Please set STABLE to True'
 sys.exit(1)
 
-##
-## Define Functions ##
-##
+
+
+# Define Functions #
+
 def flatten(list, sep=' '):
 Given a list, returns a flat string separated by 'sep'
 return sep.join(list)
 
+
 def n_sep(n, 

[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-24 Thread Gilles Dartiguelongue
commit: 06183b984bf5b65d00f3a48fc825019fdc40a524
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Wed Jun 24 12:08:20 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Wed Jun 24 12:13:28 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=06183b98

scripts/gen_archlist: Rename do_not_want function

Give it a better name of split logic down in multiple lines, it is
easier to read that a kilometric if line.

Logic was inverted to avoid double negation in match_wanted_atoms
function.

 scripts/gen_archlist.py | 24 +++-
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index a517ed8..a8b5fcf 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -131,15 +131,21 @@ def get_kws(cpv, arches=ARCHES):
 ]
 
 
-def do_not_want(cpv, release=None):
-
-Check if a package atom is p.masked or has empty keywords, or does not
-belong to a release
+def can_stabilize_cpv(cpv, release=None):
+Whether `cpv` matches stabilization criteria.
+
+`cpv` must:
+* belong to the release
+* not be p.masked
+* have keywords
 
-if release and not belongs_release(cpv, release) or not \
-portage.portdb.visible([cpv]) or not get_kws(cpv, arches=ALL_ARCHES):
-return True
-return False
+if release and not belongs_release(cpv, release):
+return False
+if not portage.portdb.visible([cpv]):
+return False
+if not get_kws(cpv, arches=ALL_ARCHES):
+return False
+return True
 
 
 def match_wanted_atoms(atom, release=None):
@@ -155,7 +161,7 @@ def match_wanted_atoms(atom, release=None):
 
 return [
 for cpv in reversed(portage.portdb.xmatch('match-all', atom)):
-if not do_not_want(cpv, release)
+if can_stabilize_cpv(cpv, release)
 ]
 
 



[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-24 Thread Gilles Dartiguelongue
commit: 628bef00999b4d6250169a5bf9b73dc7bc671015
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Wed Jun 24 12:07:39 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Wed Jun 24 12:13:27 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=628bef00

scripts/gen_archlist: Fix belongs_release

get_ver is undefined, I wonder how this could ever work.

 scripts/gen_archlist.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index 8ec59c0..a517ed8 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -109,11 +109,11 @@ def make_unstable(kws):
 
 
 def belongs_release(cpv, release):
-Check if the given cpv belongs to the given release
+Check if `cpv` belongs to the release `release`.
 # FIXME: This failure function needs better logic
 if CHECK_DEPS:
 raise Exception('This function is utterly useless with RECURSIVE mode')
-return get_ver(cpv).startswith(release)
+return portage.versions.cpv_get_version(cpv).startswith(release)
 
 
 def issystempackage(cpv):



[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-24 Thread Gilles Dartiguelongue
commit: e2bca7ae46a92bd68f9335ac8b809364ff7f4814
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Wed Jun 24 11:26:24 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Wed Jun 24 12:13:26 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=e2bca7ae

scripts/gen_archlist: Move dev style configuration to argparse

This commit actually breaks the script since some functions do not have
proper arguments to handle configuration from main entry-point.

 scripts/gen_archlist.py | 71 ++---
 1 file changed, 32 insertions(+), 39 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index e41b20d..1a57fe2 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -23,6 +23,7 @@
 
 from __future__ import division
 
+import argparse
 import os
 import sys
 
@@ -50,36 +51,19 @@ EXTREME_DEBUG = False
 CHECK_DEPS = False
 APPEND_SLOTS = False
 # Check for stable keywords
+# This is intended to switch between keywordreq (for ~arch)
+# and stablereq (for moving from ~arch to arch)
 STABLE = True
 
+# if not STABLE:
+# print 'Currently broken for anything except STABLEREQ'
+# print 'Please set STABLE to True'
+# sys.exit(1)
+
 ###
 # Preparation #
 ###
 ALL_CPV_KWS = []
-OLD_REL = None
-NEW_REL = None
-
-if __name__ == __main__:
-try:
-CP_FILE = sys.argv[1]  # File which has the cp list
-except IndexError:
-print Usage: %s file [old_rel] [new_rel]
-
-Where file is a file with a category/package list
-  [old_rel] is an optional argument for specifying which release cycle
-to use to get the cpv which has the keyword we need
-i.e., which cpvs will we get the list of keywords from?
-  [new_rel] is an optional argument for specifying which release cycle
-to use to get the latest cpv on which we want keywords
-i.e., which cpvs will go in the list?
-WARNING: the logic for old_rel  new_rel is very incomplete. See TODO
- % sys.argv[0]
-sys.exit(0)
-
-if len(sys.argv)  2:
-OLD_REL = sys.argv[2]
-if len(sys.argv)  3:
-NEW_REL = sys.argv[3]
 
 ARCHES = None
 if STABLE:
@@ -87,17 +71,6 @@ if STABLE:
 else:
 ARCHES = UNSTABLE_ARCHES
 
-if 'CHECK_DEPS' in os.environ:
-CHECK_DEPS = os.environ['CHECK_DEPS']
-
-if 'APPEND_SLOTS' in os.environ:
-APPEND_SLOTS = os.environ['APPEND_SLOTS']
-
-if not STABLE:
-print 'Currently broken for anything except STABLEREQ'
-print 'Please set STABLE to True'
-sys.exit(1)
-
 
 
 # Define Functions #
@@ -495,7 +468,26 @@ def prettify(cpv_kws):
 # cpvs that will make it to the final list
 def main():
 Where the magic happens!
-for i in open(CP_FILE).readlines():
+parser = argparse.ArgumentParser(
+description='Generate a stabilization request for multiple packages'
+)
+parser.add_argument('-d', '--debug', help='Make output more verbose')
+parser.add_argument('--extreme-debug',
+help='Make output even more verbose')
+parser.add_argument('--check-dependencies', help='')
+parser.add_argument('--append-slots', help='Append slots to CPVs output')
+parser.add_argument('file', help='File to read CP from')
+parser.add_argument('old_version', nargs='?',
+help='An optional argument specifying which release'
+ ' cycle to use to get CPVs which has the'
+ ' reference keywords for stabilization.')
+parser.add_argument('new_version', nargs='?',
+help='An optional argument specifying which release'
+ ' cycle to use to get the latest CPVs that needs'
+ ' to be stabilized')
+args = parser.parse_args()
+
+for i in open(args.file).readlines():
 cp = i[:-1]
 if cp.startswith('#') or cp.isspace() or not cp:
 ALL_CPV_KWS.append(cp)
@@ -507,13 +499,14 @@ def main():
 atoms = [cp]
 else:
 # Get all the atoms matching the given cp
-cpvs = match_wanted_atoms(cp, release=NEW_REL)
+cpvs = match_wanted_atoms(cp, release=args.new_version)
 
 for cpv in get_per_slot_cpvs(cpvs):
 if not cpv:
 debug('%s: Invalid cpv' % cpv)
 continue
-kws_missing = max_kws(cpv, release=OLD_REL)
+
+kws_missing = max_kws(cpv, release=args.old_version)
 if kws_missing == []:
 # Current cpv has the max keywords = nothing to do
 nothing_to_be_done(cpv)
@@ -524,7 +517,7 @@ def main():
 arches = make_unstable(ARCHES)
 kws_missing = [kw[1:] for kw in get_kws(cpv, arches)]
 ALL_CPV_KWS += fix_nesting(gen_cpv_kws(cpv, kws_missing, set()))
-if 

[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-24 Thread Gilles Dartiguelongue
commit: 1ed9be28e1c70ea89f68d15cf7456ffd7721f352
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Wed Jun 24 12:07:21 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Wed Jun 24 12:13:27 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=1ed9be28

scripts/gen_archlist: Simplify functions and try to enhance documentation

 scripts/gen_archlist.py | 46 --
 1 file changed, 20 insertions(+), 26 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index 1a57fe2..8ec59c0 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -101,14 +101,11 @@ def nothing_to_be_done(atom, type='cpv'):
 
 
 def make_unstable(kws):
-Takes a keyword list, and returns a list with them all unstable
-nkws = []
-for kw in kws:
-if not kw.startswith('~'):
-nkws.append('~'+kw)
-else:
-nkws.append(kw)
-return nkws
+Transform `kws` into a list of unstable keywords.
+return [
+kwd if kw.startswith('~') else '~' + kwd
+for kwd in kws
+]
 
 
 def belongs_release(cpv, release):
@@ -127,14 +124,11 @@ def issystempackage(cpv):
 
 
 def get_kws(cpv, arches=ARCHES):
-
-Returns an array of KEYWORDS matching 'arches'
-
-kws = []
-for kw in portage.portdb.aux_get(cpv, ['KEYWORDS'])[0].split():
-if kw in arches:
-kws.append(kw)
-return kws
+Return keywords of `cpv` filtered by `arches`.
+return [
+for keyword in portage.portdb.aux_get(cpv, ['KEYWORDS'])[0].split()
+if keyword in arches
+]
 
 
 def do_not_want(cpv, release=None):
@@ -149,20 +143,20 @@ def do_not_want(cpv, release=None):
 
 
 def match_wanted_atoms(atom, release=None):
+Return a list of CPV matching `atom`.
+
+If `release` is provided, CPVs are filtered against it.
+
+The list is sorted by descending order of version.
 
-Given an atom and a release, return all matching wanted atoms ordered in
-descending order of version
-
-atoms = []
 # xmatch is stupid, and ignores ! in an atom...
 if atom.startswith('!'):
 return []
-for cpv in portage.portdb.xmatch('match-all', atom):
-if do_not_want(cpv, release):
-continue
-atoms.append(cpv)
-atoms.reverse()
-return atoms
+
+return [
+for cpv in reversed(portage.portdb.xmatch('match-all', atom)):
+if not do_not_want(cpv, release)
+]
 
 
 def get_best_deps(cpv, kws, release=None):



[gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/

2015-06-24 Thread Gilles Dartiguelongue
commit: 1bd25971019ba10858560e79e3040b5d4101f61a
Author: Gilles Dartiguelongue eva AT gentoo DOT org
AuthorDate: Wed Jun 24 11:23:40 2015 +
Commit: Gilles Dartiguelongue eva AT gentoo DOT org
CommitDate: Wed Jun 24 12:11:21 2015 +
URL:https://gitweb.gentoo.org/proj/gnome.git/commit/?id=1bd25971

scripts/gen_archlist: Create a clear main function

 scripts/gen_archlist.py | 10 ++
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/scripts/gen_archlist.py b/scripts/gen_archlist.py
index 407ebbd..e41b20d 100755
--- a/scripts/gen_archlist.py
+++ b/scripts/gen_archlist.py
@@ -493,10 +493,8 @@ def prettify(cpv_kws):
 # Use the Functions #
 #
 # cpvs that will make it to the final list
-if __name__ == __main__:
-index = 0
-array = []
-
+def main():
+Where the magic happens!
 for i in open(CP_FILE).readlines():
 cp = i[:-1]
 if cp.startswith('#') or cp.isspace() or not cp:
@@ -535,3 +533,7 @@ if __name__ == __main__:
 
 for i in prettify(ALL_CPV_KWS):
 print i[0], flatten(i[1])
+
+
+if __name__ == '__main__':
+main()