X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=pkgs.py;h=7525c0b31756c0e35a227f6205d656f9701d46da;hb=refs%2Fheads%2Fnm-one-spec;hp=b2a6be8f43a955d47a5855a96bd0d055894c3b63;hpb=7f1c4dcb004f581fdf27883b8708d5394640b768;p=build.git diff --git a/pkgs.py b/pkgs.py index b2a6be8f..7525c0b3 100755 --- a/pkgs.py +++ b/pkgs.py @@ -1,8 +1,5 @@ #!/usr/bin/python # -# $Id$ -# $URL$ -# # This is a replacement for the formerly bash-written function pl_parsePkgs () # # Usage: $0 [-a arch] default_arch keyword fcdistro pldistro pkgs-file[..s] @@ -35,12 +32,23 @@ from optparse import OptionParser import re default_arch='x86_64' -known_arch = ['i386','x86_64'] -default_fcdistro='f12' -known_fcdistros = [ 'centos5','centos6','f8', 'f9','f10','f11','f12', 'f13' ] +known_arch = ['i386', 'i686', 'x86_64'] +default_fcdistro='f14' +known_fcdistros = [ 'centos5','centos6', + 'f8', 'f10','f12', 'f14', 'f16', 'f18','f20','f22', + 'sl6', + # debians + 'squeeze','wheezy','jessie', + # ubuntus + 'oneiric', 'precise', 'quantal', 'raring', 'saucy', 'trusty' ] default_pldistro='onelab' -known_keywords=['groupname', 'groupdesc', 'kexclude', 'package', 'group', 'precious', 'junk', 'mirror', ] +known_keywords=[ + 'group', 'groupname', 'groupdesc', + 'package', 'pip', 'gem', + 'nodeyumexclude', 'plcyumexclude', 'yumexclude', + 'precious', 'junk', 'mirror', +] m_fcdistro_cutter = re.compile('([a-z]+)([0-9]+)') @@ -59,7 +67,12 @@ class PkgsParser: ok=False for known in known_fcdistros: if fcdistro == known: - (distro,version)=m_fcdistro_cutter.match(fcdistro).groups() + try: + (distro,version)=m_fcdistro_cutter.match(fcdistro).groups() + # debian-like names can't use numbering + except: + distro=fcdistro + version=0 ok=True if ok: self.distro=distro @@ -166,12 +179,14 @@ class PkgsParser: included += i excluded += e ok = ok and o - results = list (set(included).difference(set(excluded))) + # avoid set operations that would not preserve order + results = [ x for x in included if x not in excluded ] results = [ x.replace('@arch@',self.arch).\ replace('@fcdistro@',self.fcdistro).\ replace('@pldistro@',self.pldistro) for x in results] - results.sort() + if self.options.sort_results: + results.sort() # default is space-separated if not self.options.new_line: print " ".join(results) @@ -184,7 +199,7 @@ def main (): usage="Usage: %prog [options] keyword input[...]" parser=OptionParser (usage=usage) parser.add_option ('-a','--arch',dest='arch',action='store',default=default_arch, - help='target arch, e.g. i386 or x86_64') + help='target arch, e.g. i386 or x86_64, default=%s'%default_arch) parser.add_option ('-f','--fcdistro',dest='fcdistro',action='store', default=default_fcdistro, help='fcdistro, e.g. f12 or centos5') parser.add_option ('-d','--pldistro',dest='pldistro',action='store', default=default_pldistro, @@ -193,6 +208,8 @@ def main (): help='verbose when using qualifiers') parser.add_option ('-n', '--new-line',dest='new_line',action='store_true',default=False, help='print outputs separated with newlines rather than with a space') + parser.add_option ('-u', '--no-sort',dest='sort_results',default=True,action='store_false', + help='keep results in the same order as in the inputs') (options,args) = parser.parse_args() if len(args) <=1 : @@ -204,6 +221,7 @@ def main (): print >> stderr, 'Unsupported arch',options.arch parser.print_help(file=stderr) sys.exit(1) + if options.arch == 'i686': options.arch='i386' if not options.fcdistro in known_fcdistros: print >> stderr, 'Unsupported fcdistro',options.fcdistro parser.print_help(file=stderr) @@ -211,9 +229,10 @@ def main (): pkgs = PkgsParser (options.arch,options.fcdistro,options.pldistro,keyword,inputs,options) - pkgs.run() - - sys.exit(0) + if pkgs.run(): + sys.exit(0) + else: + sys.exit(1) if __name__ == '__main__': if main():