other distros move to nodemanager that has a single specfile for all packages
[build.git] / pkgs.py
diff --git a/pkgs.py b/pkgs.py
index b2a6be8..7525c0b 100755 (executable)
--- 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():