* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-26 22:32 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-26 22:32 UTC (permalink / raw
To: gentoo-commits
commit: e7d972f07e900247f39cdf0ae0e3b03d6e4f9eb4
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 24 11:23:40 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Thu Jun 25 12:45:55 2015 +0000
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()
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-09-06 16:53 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-09-06 16:53 UTC (permalink / raw
To: gentoo-commits
commit: 98f46bb384749baf895d520c5c8051e6e86e0abc
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Sun Sep 6 16:51:27 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Sun Sep 6 16:51:27 2015 +0000
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')
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-26 22:32 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-26 22:32 UTC (permalink / raw
To: gentoo-commits
commit: bb81b5c9415b3d70f508a77ba1f79f86c5b4a79c
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Fri Jun 26 22:09:54 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Fri Jun 26 22:14:43 2015 +0000
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')
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-26 22:32 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-26 22:32 UTC (permalink / raw
To: gentoo-commits
commit: a01ce56fddcd6b1f21233636b8661b4e4abdcd71
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Fri Jun 26 22:27:47 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Fri Jun 26 22:27:47 2015 +0000
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__':
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-26 22:32 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-26 22:32 UTC (permalink / raw
To: gentoo-commits
commit: 1d87c4f414d5a231b9951246b97daee36d8190a7
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Thu Jun 25 14:27:31 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Fri Jun 26 22:14:41 2015 +0000
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': 'DEBUG',
+ 'formatter': 'brief',
+ 'stream': 'ext://sys.stdout',
+ },
+ },
+ 'loggers': {
+ 'gen_archlist': {
+ 'handlers': ['console'],
+ 'level': [logging.WARN, logging.INFO,
+ logging.DEBUG][args.verbose],
+ },
+ },
+ 'root': {
+ 'handler': ['console'],
+ },
+ })
+
ALL_CPV_KWS = []
for i in open(args.file).readlines():
cp = i[:-1]
@@ -480,19 +500,20 @@ def main():
for cpv in get_per_slot_cpvs(cpvs):
if not cpv:
- debug('%s: Invalid cpv' % cpv)
+ logger.warn('%s is an invalid CPV', cpv)
continue
kws_missing = max_kws(cpv, release=args.old_version)
if kws_missing is None:
- debug('No versions with stable keywords for %s' % cpv)
+ logger.info('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)
+ logger.info('CPV %s is already %s, ignoring', cpv,
+ 'stable' if STABLE else 'keyworded')
continue
ALL_CPV_KWS.append(
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-26 22:32 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-26 22:32 UTC (permalink / raw
To: gentoo-commits
commit: 86f443210464a83721be581cc00cfe08dc5632bd
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Fri Jun 26 22:10:42 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Fri Jun 26 22:14:43 2015 +0000
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)
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-26 22:32 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-26 22:32 UTC (permalink / raw
To: gentoo-commits
commit: 598edbfe3303a0e59bb7b92d38f5693b0aae7007
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Thu Jun 25 14:27:43 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Fri Jun 26 22:14:42 2015 +0000
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
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-26 22:32 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-26 22:32 UTC (permalink / raw
To: gentoo-commits
commit: 6ce2657c1052fa500cc5e84b51ce88b06b96098f
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Fri Jun 26 22:29:42 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Fri Jun 26 22:29:42 2015 +0000
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([
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-26 22:32 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-26 22:32 UTC (permalink / raw
To: gentoo-commits
commit: 8590d8da1adf4445f928c940c2959d2a6035bdd8
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Fri Jun 26 22:08:58 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Fri Jun 26 22:14:42 2015 +0000
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):
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-26 22:32 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-26 22:32 UTC (permalink / raw
To: gentoo-commits
commit: 6d936200f6324e340e823b7925c910d3c340b226
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Thu Jun 25 11:22:16 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Fri Jun 26 22:14:39 2015 +0000
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:
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-26 22:32 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-26 22:32 UTC (permalink / raw
To: gentoo-commits
commit: 4571219b191c1786d7ff4b0e5a6ade19e5c30875
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Thu Jun 25 11:26:43 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Fri Jun 26 22:14:39 2015 +0000
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)
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-26 22:32 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-26 22:32 UTC (permalink / raw
To: gentoo-commits
commit: 24bd1b67e381e6aa5bff5e597bd3a96c98f4f4a7
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Thu Jun 25 07:57:48 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Thu Jun 25 12:46:23 2015 +0000
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
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-26 22:32 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-26 22:32 UTC (permalink / raw
To: gentoo-commits
commit: 4542a3fc2042bb029e0a7b124724c6af41d6ff87
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 24 12:08:20 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Thu Jun 25 12:46:14 2015 +0000
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)
]
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-26 22:32 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-26 22:32 UTC (permalink / raw
To: gentoo-commits
commit: d1f4f46de1234dbf750ab8815dcf2aa6a827eb4d
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 24 09:35:49 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Thu Jun 25 12:45:47 2015 +0000
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, 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 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):
"Takes a keyword list, and returns a list with them all unstable"
nkws = []
@@ -123,6 +137,7 @@ def make_unstable(kws):
nkws.append(kw)
return nkws
+
def belongs_release(cpv, release):
"Check if the given cpv belongs to the given release"
# FIXME: This failure function needs better logic
@@ -130,12 +145,14 @@ def belongs_release(cpv, release):
raise Exception('This function is utterly useless with RECURSIVE mode')
return get_ver(cpv).startswith(release)
+
def issystempackage(cpv):
for i in SYSTEM_PACKAGES:
if cpv.startswith(i):
return True
return False
+
def get_kws(cpv, arches=ARCHES):
"""
Returns an array of KEYWORDS matching 'arches'
@@ -146,6 +163,7 @@ def get_kws(cpv, arches=ARCHES):
kws.append(kw)
return kws
+
def do_not_want(cpv, release=None):
"""
Check if a package atom is p.masked or has empty keywords, or does not
@@ -156,6 +174,7 @@ def do_not_want(cpv, release=None):
return True
return False
+
def match_wanted_atoms(atom, release=None):
"""
Given an atom and a release, return all matching wanted atoms ordered in
@@ -163,7 +182,8 @@ def match_wanted_atoms(atom, release=None):
"""
atoms = []
# xmatch is stupid, and ignores ! in an atom...
- if atom.startswith('!'): return []
+ if atom.startswith('!'):
+ return []
for cpv in portage.portdb.xmatch('match-all', atom):
if do_not_want(cpv, release):
continue
@@ -171,14 +191,15 @@ def match_wanted_atoms(atom, release=None):
atoms.reverse()
return atoms
+
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
+ Returns a list of the best deps of a cpv, optionally matching a release,
+ and with max of the specified keywords
"""
atoms = portage.portdb.aux_get(cpv, ['DEPEND', 'RDEPEND', 'PDEPEND'])
- atoms = ' '.join(atoms).split() # consolidate atoms
- atoms = list(set(atoms)) # de-duplicate
+ atoms = ' '.join(atoms).split() # consolidate atoms
+ atoms = list(set(atoms)) # de-duplicate
deps = set()
tmp = []
for atom in atoms:
@@ -187,7 +208,8 @@ def get_best_deps(cpv, kws, release=None):
continue
ret = match_wanted_atoms(atom, release)
if not ret:
- if DEBUG: debug('We encountered an irrelevant atom: %s' % atom)
+ if DEBUG:
+ debug('We encountered an irrelevant atom: %s' % atom)
continue
best_kws = ['', []]
for i in ret:
@@ -197,7 +219,8 @@ def get_best_deps(cpv, kws, release=None):
cur_ukws = set(make_unstable(get_kws(i, arches=kws+ukws)))
if cur_ukws.intersection(ukws) != set(ukws):
best_kws = 'none'
- if DEBUG: debug('Insufficient unstable keywords in: %s' % i)
+ 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):
@@ -212,14 +235,16 @@ def get_best_deps(cpv, kws, release=None):
# keywords that *we checked* (i.e. kws).
best_kws = [i, []]
if best_kws == 'alreadythere':
- if DEBUG: nothing_to_be_done(atom, type='dep')
+ if DEBUG:
+ nothing_to_be_done(atom, type='dep')
continue
elif best_kws == 'none':
continue
elif not best_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 that pulls it.
+ # This means that this atom does not have any versions with
+ # unstable keywords matching the unstable keywords of the cpv
+ # that pulls it.
# 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
@@ -239,15 +264,16 @@ def get_best_deps(cpv, kws, release=None):
if len(cur_kws) > len(best_kws[1]):
best_kws = [i, cur_kws]
elif not best_kws[0]:
- # This means that none of the versions have any of the stable
- # keywords *at all*. No choice but to arbitrarily select the
- # latest version in that case.
+ # This means that none of the versions have any of
+ # the stable keywords *at all*. No choice but to
+ # arbitrarily select the latest version in that case.
best_kws = [i, []]
deps.add(best_kws[0])
else:
deps.add(best_kws[0])
return list(deps)
+
def max_kws(cpv, release=None):
"""
Given a cpv, find the intersection of "most keywords it can have" and
@@ -259,7 +285,7 @@ def max_kws(cpv, release=None):
Returns None if no cpv has keywords
"""
current_kws = get_kws(cpv, arches=ALL_ARCHES)
- maximum_kws = [] # Maximum keywords that a cpv has
+ maximum_kws = [] # Maximum keywords that a cpv has
missing_kws = []
for atom in match_wanted_atoms('<='+cpv, release):
kws = get_kws(atom)
@@ -277,6 +303,7 @@ def max_kws(cpv, release=None):
# No cpv has the keywords we need
return None
+
# FIXME: This is broken
def kws_wanted(cpv_kws, prev_cpv_kws):
"Generate a list of kws that need to be updated"
@@ -289,13 +316,15 @@ def kws_wanted(cpv_kws, prev_cpv_kws):
wanted.append(kw)
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]:
# 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 get_best_deps()
+ # 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
+ # get_best_deps()
# 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:
@@ -322,6 +351,7 @@ def gen_cpv_kws(cpv, kws_aim, depgraph):
cpv_kw_list.reverse()
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]]"""
@@ -340,6 +370,7 @@ def fix_nesting(nested_list):
index += 1
return nice_list
+
def consolidate_dupes(cpv_kws):
"""
Consolidate duplicate cpvs with differing keywords
@@ -355,7 +386,7 @@ def consolidate_dupes(cpv_kws):
if type(each) is not list:
continue
else:
- if not cpv_indices.has_key(each[0]):
+ if each[0] not in cpv_indices:
cpv_indices[each[0]] = []
cpv_indices[each[0]].append(cpv_kws.index(each))
@@ -388,6 +419,7 @@ def consolidate_dupes(cpv_kws):
return deduped_cpv_kws
+
def get_per_slot_cpvs(cpvs):
"Classify the given cpvs into slots, and yield the best atom for each slot"
slots = set()
@@ -398,6 +430,7 @@ def get_per_slot_cpvs(cpvs):
slots.add(slot)
yield cpv
+
def append_slots(cpv_kws):
"Append slots at the end of cpv atoms"
slotifyed_cpv_kws = []
@@ -407,6 +440,7 @@ def append_slots(cpv_kws):
slotifyed_cpv_kws.append([cpv, kws])
return slotifyed_cpv_kws
+
# FIXME: This is broken
def prettify(cpv_kws):
"Takes a list of [cpv, [kws]] and prettifies it"
@@ -454,9 +488,10 @@ def prettify(cpv_kws):
pretty_list.append([each[0], each[1]])
return pretty_list
-#######################
-## Use the Functions ##
-#######################
+
+#####################
+# Use the Functions #
+#####################
# cpvs that will make it to the final list
if __name__ == "__main__":
index = 0
@@ -485,8 +520,8 @@ if __name__ == "__main__":
# Current cpv has the max keywords => nothing to do
nothing_to_be_done(cpv)
continue
- elif kws_missing == None:
- debug ('No versions with stable keywords for %s' % cpv)
+ elif 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)]
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-26 22:32 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-26 22:32 UTC (permalink / raw
To: gentoo-commits
commit: 19c52766c8ca16879f8b03b3f6a9b85c0865a04f
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Thu Jun 25 12:47:22 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Fri Jun 26 22:14:40 2015 +0000
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__':
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-26 22:32 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-26 22:32 UTC (permalink / raw
To: gentoo-commits
commit: 9e2189f5a6efd3c0ab7d1f386f532d3d42b18734
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 24 12:07:39 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Thu Jun 25 12:46:09 2015 +0000
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):
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-26 22:32 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-26 22:32 UTC (permalink / raw
To: gentoo-commits
commit: 5451ec12c9fc4363c7f812c2fc3da253d8ffa306
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 24 11:26:24 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Thu Jun 25 12:46:00 2015 +0000
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 == []:
# Current cpv has the max keywords => nothing to do
nothing_to_be_done(cpv)
@@ -525,11 +523,11 @@ 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 CHECK_DEPS:
+ if args.check_dependencies:
ALL_CPV_KWS.append(LINE_SEP)
ALL_CPV_KWS = consolidate_dupes(ALL_CPV_KWS)
- if APPEND_SLOTS:
+ if args.append_slots:
ALL_CPV_KWS = append_slots(ALL_CPV_KWS)
for i in prettify(ALL_CPV_KWS):
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-26 22:32 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-26 22:32 UTC (permalink / raw
To: gentoo-commits
commit: c33a3166cd55a0245663cbb1472ef04fda4c44f8
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Thu Jun 25 13:31:07 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Fri Jun 26 22:14:40 2015 +0000
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
# a 'break' above
- ret = match_wanted_atoms(atom, release)
- best_kws = ['', []]
- for i in ret:
- cur_kws = get_kws(i)
- if len(cur_kws) > len(best_kws[1]):
- best_kws = [i, cur_kws]
- elif not best_kws[0]:
+ cpvs = match_wanted_atoms(atom, release)
+ best_cpv_kws = ['', []]
+ for candidate_cpv in cpvs:
+ cur_kws = get_kws(candidate_cpv)
+ if len(cur_kws) > len(best_cpv_kws[1]):
+ best_cpv_kws = [candidate_cpv, cur_kws]
+ elif not best_cpv_kws[0]:
# This means that none of the versions have any of
# the stable keywords *at all*. No choice but to
# arbitrarily select the latest version in that case.
- best_kws = [i, []]
- deps.add(best_kws[0])
+ best_cpv_kws = [candidate_cpv, []]
+
+ deps.add(best_cpv_kws[0])
else:
- deps.add(best_kws[0])
+ deps.add(best_cpv_kws[0])
+
return list(deps)
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-26 22:32 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-26 22:32 UTC (permalink / raw
To: gentoo-commits
commit: 813f7fbce53580a4e7302f9d4ce6f40e5410d965
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 24 13:17:47 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Thu Jun 25 12:46:19 2015 +0000
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)
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-26 22:32 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-26 22:32 UTC (permalink / raw
To: gentoo-commits
commit: 3dd724f0698988b69d2c15aa502d181ca609943b
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 24 12:07:21 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Thu Jun 25 12:46:05 2015 +0000
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
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-26 22:32 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-26 22:32 UTC (permalink / raw
To: gentoo-commits
commit: 9a712ebe4e2495134421a3df88ebe9962b6fa50e
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 24 14:39:56 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Thu Jun 25 12:46:23 2015 +0000
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)
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-26 22:32 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-26 22:32 UTC (permalink / raw
To: gentoo-commits
commit: 30e08cc1e869e0234aaacd56ed93242ba138b31d
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Thu Jun 25 11:22:34 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Thu Jun 25 12:46:24 2015 +0000
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)
)
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-24 12:14 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-24 12:14 UTC (permalink / raw
To: gentoo-commits
commit: 628bef00999b4d6250169a5bf9b73dc7bc671015
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 24 12:07:39 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Wed Jun 24 12:13:27 2015 +0000
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):
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-24 12:14 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-24 12:14 UTC (permalink / raw
To: gentoo-commits
commit: 1bd25971019ba10858560e79e3040b5d4101f61a
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 24 11:23:40 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Wed Jun 24 12:11:21 2015 +0000
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()
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-24 12:14 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-24 12:14 UTC (permalink / raw
To: gentoo-commits
commit: 1ed9be28e1c70ea89f68d15cf7456ffd7721f352
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 24 12:07:21 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Wed Jun 24 12:13:27 2015 +0000
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):
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-24 12:14 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-24 12:14 UTC (permalink / raw
To: gentoo-commits
commit: 06183b984bf5b65d00f3a48fc825019fdc40a524
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 24 12:08:20 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Wed Jun 24 12:13:28 2015 +0000
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)
]
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-24 12:14 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-24 12:14 UTC (permalink / raw
To: gentoo-commits
commit: e2bca7ae46a92bd68f9335ac8b809364ff7f4814
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 24 11:26:24 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Wed Jun 24 12:13:26 2015 +0000
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 CHECK_DEPS:
+ if args.check_dependencies:
ALL_CPV_KWS.append(LINE_SEP)
ALL_CPV_KWS = consolidate_dupes(ALL_CPV_KWS)
^ permalink raw reply related [flat|nested] 28+ messages in thread
* [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/
@ 2015-06-24 12:14 Gilles Dartiguelongue
0 siblings, 0 replies; 28+ messages in thread
From: Gilles Dartiguelongue @ 2015-06-24 12:14 UTC (permalink / raw
To: gentoo-commits
commit: 3e63b913e81f842dfac1b76bb9a5d1fdcbcd5236
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 24 09:35:49 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
CommitDate: Wed Jun 24 12:11:10 2015 +0000
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, 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 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):
"Takes a keyword list, and returns a list with them all unstable"
nkws = []
@@ -123,6 +137,7 @@ def make_unstable(kws):
nkws.append(kw)
return nkws
+
def belongs_release(cpv, release):
"Check if the given cpv belongs to the given release"
# FIXME: This failure function needs better logic
@@ -130,12 +145,14 @@ def belongs_release(cpv, release):
raise Exception('This function is utterly useless with RECURSIVE mode')
return get_ver(cpv).startswith(release)
+
def issystempackage(cpv):
for i in SYSTEM_PACKAGES:
if cpv.startswith(i):
return True
return False
+
def get_kws(cpv, arches=ARCHES):
"""
Returns an array of KEYWORDS matching 'arches'
@@ -146,6 +163,7 @@ def get_kws(cpv, arches=ARCHES):
kws.append(kw)
return kws
+
def do_not_want(cpv, release=None):
"""
Check if a package atom is p.masked or has empty keywords, or does not
@@ -156,6 +174,7 @@ def do_not_want(cpv, release=None):
return True
return False
+
def match_wanted_atoms(atom, release=None):
"""
Given an atom and a release, return all matching wanted atoms ordered in
@@ -163,7 +182,8 @@ def match_wanted_atoms(atom, release=None):
"""
atoms = []
# xmatch is stupid, and ignores ! in an atom...
- if atom.startswith('!'): return []
+ if atom.startswith('!'):
+ return []
for cpv in portage.portdb.xmatch('match-all', atom):
if do_not_want(cpv, release):
continue
@@ -171,14 +191,15 @@ def match_wanted_atoms(atom, release=None):
atoms.reverse()
return atoms
+
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
+ Returns a list of the best deps of a cpv, optionally matching a release,
+ and with max of the specified keywords
"""
atoms = portage.portdb.aux_get(cpv, ['DEPEND', 'RDEPEND', 'PDEPEND'])
- atoms = ' '.join(atoms).split() # consolidate atoms
- atoms = list(set(atoms)) # de-duplicate
+ atoms = ' '.join(atoms).split() # consolidate atoms
+ atoms = list(set(atoms)) # de-duplicate
deps = set()
tmp = []
for atom in atoms:
@@ -187,7 +208,8 @@ def get_best_deps(cpv, kws, release=None):
continue
ret = match_wanted_atoms(atom, release)
if not ret:
- if DEBUG: debug('We encountered an irrelevant atom: %s' % atom)
+ if DEBUG:
+ debug('We encountered an irrelevant atom: %s' % atom)
continue
best_kws = ['', []]
for i in ret:
@@ -197,7 +219,8 @@ def get_best_deps(cpv, kws, release=None):
cur_ukws = set(make_unstable(get_kws(i, arches=kws+ukws)))
if cur_ukws.intersection(ukws) != set(ukws):
best_kws = 'none'
- if DEBUG: debug('Insufficient unstable keywords in: %s' % i)
+ 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):
@@ -212,14 +235,16 @@ def get_best_deps(cpv, kws, release=None):
# keywords that *we checked* (i.e. kws).
best_kws = [i, []]
if best_kws == 'alreadythere':
- if DEBUG: nothing_to_be_done(atom, type='dep')
+ if DEBUG:
+ nothing_to_be_done(atom, type='dep')
continue
elif best_kws == 'none':
continue
elif not best_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 that pulls it.
+ # This means that this atom does not have any versions with
+ # unstable keywords matching the unstable keywords of the cpv
+ # that pulls it.
# 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
@@ -239,15 +264,16 @@ def get_best_deps(cpv, kws, release=None):
if len(cur_kws) > len(best_kws[1]):
best_kws = [i, cur_kws]
elif not best_kws[0]:
- # This means that none of the versions have any of the stable
- # keywords *at all*. No choice but to arbitrarily select the
- # latest version in that case.
+ # This means that none of the versions have any of
+ # the stable keywords *at all*. No choice but to
+ # arbitrarily select the latest version in that case.
best_kws = [i, []]
deps.add(best_kws[0])
else:
deps.add(best_kws[0])
return list(deps)
+
def max_kws(cpv, release=None):
"""
Given a cpv, find the intersection of "most keywords it can have" and
@@ -259,7 +285,7 @@ def max_kws(cpv, release=None):
Returns None if no cpv has keywords
"""
current_kws = get_kws(cpv, arches=ALL_ARCHES)
- maximum_kws = [] # Maximum keywords that a cpv has
+ maximum_kws = [] # Maximum keywords that a cpv has
missing_kws = []
for atom in match_wanted_atoms('<='+cpv, release):
kws = get_kws(atom)
@@ -277,6 +303,7 @@ def max_kws(cpv, release=None):
# No cpv has the keywords we need
return None
+
# FIXME: This is broken
def kws_wanted(cpv_kws, prev_cpv_kws):
"Generate a list of kws that need to be updated"
@@ -289,13 +316,15 @@ def kws_wanted(cpv_kws, prev_cpv_kws):
wanted.append(kw)
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]:
# 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 get_best_deps()
+ # 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
+ # get_best_deps()
# 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:
@@ -322,6 +351,7 @@ def gen_cpv_kws(cpv, kws_aim, depgraph):
cpv_kw_list.reverse()
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]]"""
@@ -340,6 +370,7 @@ def fix_nesting(nested_list):
index += 1
return nice_list
+
def consolidate_dupes(cpv_kws):
"""
Consolidate duplicate cpvs with differing keywords
@@ -355,7 +386,7 @@ def consolidate_dupes(cpv_kws):
if type(each) is not list:
continue
else:
- if not cpv_indices.has_key(each[0]):
+ if each[0] not in cpv_indices:
cpv_indices[each[0]] = []
cpv_indices[each[0]].append(cpv_kws.index(each))
@@ -388,6 +419,7 @@ def consolidate_dupes(cpv_kws):
return deduped_cpv_kws
+
def get_per_slot_cpvs(cpvs):
"Classify the given cpvs into slots, and yield the best atom for each slot"
slots = set()
@@ -398,6 +430,7 @@ def get_per_slot_cpvs(cpvs):
slots.add(slot)
yield cpv
+
def append_slots(cpv_kws):
"Append slots at the end of cpv atoms"
slotifyed_cpv_kws = []
@@ -407,6 +440,7 @@ def append_slots(cpv_kws):
slotifyed_cpv_kws.append([cpv, kws])
return slotifyed_cpv_kws
+
# FIXME: This is broken
def prettify(cpv_kws):
"Takes a list of [cpv, [kws]] and prettifies it"
@@ -454,9 +488,10 @@ def prettify(cpv_kws):
pretty_list.append([each[0], each[1]])
return pretty_list
-#######################
-## Use the Functions ##
-#######################
+
+#####################
+# Use the Functions #
+#####################
# cpvs that will make it to the final list
if __name__ == "__main__":
index = 0
@@ -485,8 +520,8 @@ if __name__ == "__main__":
# Current cpv has the max keywords => nothing to do
nothing_to_be_done(cpv)
continue
- elif kws_missing == None:
- debug ('No versions with stable keywords for %s' % cpv)
+ elif 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)]
^ permalink raw reply related [flat|nested] 28+ messages in thread
end of thread, other threads:[~2015-09-06 16:53 UTC | newest]
Thread overview: 28+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-06-26 22:32 [gentoo-commits] proj/gnome:gen_archlist_cleanup commit in: scripts/ Gilles Dartiguelongue
-- strict thread matches above, loose matches on Subject: below --
2015-09-06 16:53 Gilles Dartiguelongue
2015-06-26 22:32 Gilles Dartiguelongue
2015-06-26 22:32 Gilles Dartiguelongue
2015-06-26 22:32 Gilles Dartiguelongue
2015-06-26 22:32 Gilles Dartiguelongue
2015-06-26 22:32 Gilles Dartiguelongue
2015-06-26 22:32 Gilles Dartiguelongue
2015-06-26 22:32 Gilles Dartiguelongue
2015-06-26 22:32 Gilles Dartiguelongue
2015-06-26 22:32 Gilles Dartiguelongue
2015-06-26 22:32 Gilles Dartiguelongue
2015-06-26 22:32 Gilles Dartiguelongue
2015-06-26 22:32 Gilles Dartiguelongue
2015-06-26 22:32 Gilles Dartiguelongue
2015-06-26 22:32 Gilles Dartiguelongue
2015-06-26 22:32 Gilles Dartiguelongue
2015-06-26 22:32 Gilles Dartiguelongue
2015-06-26 22:32 Gilles Dartiguelongue
2015-06-26 22:32 Gilles Dartiguelongue
2015-06-26 22:32 Gilles Dartiguelongue
2015-06-26 22:32 Gilles Dartiguelongue
2015-06-24 12:14 Gilles Dartiguelongue
2015-06-24 12:14 Gilles Dartiguelongue
2015-06-24 12:14 Gilles Dartiguelongue
2015-06-24 12:14 Gilles Dartiguelongue
2015-06-24 12:14 Gilles Dartiguelongue
2015-06-24 12:14 Gilles Dartiguelongue
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox