Add --spec option and add guess_spec fuc to select correct spec file
authorZhang Qiang <qiang.z.zhang@intel.com>
Tue, 29 May 2012 09:20:54 +0000 (17:20 +0800)
committerZhang Qiang <qiang.z.zhang@intel.com>
Tue, 29 May 2012 09:20:54 +0000 (17:20 +0800)
gitbuildsys/cmd_build.py
gitbuildsys/cmd_export.py
gitbuildsys/cmd_remotebuild.py
gitbuildsys/utils.py
tools/gbs

index 15929a797c83610d814d15a1b051241d2bbb7e9a..ffcd6879ed3c59e69b514eecc1198e1693b038b1 100644 (file)
@@ -92,11 +92,7 @@ def do(opts, args):
     if not specs:
         msger.error('no spec file found under /packaging sub-directory')
 
-    specfile = specs[0] #TODO:
-    if len(specs) > 1:
-        msger.warning('multiple specfiles found.')
-
-
+    specfile = utils.guess_spec(workdir, opts.spec)
     distconf = configmgr.get('distconf', 'build')
     if opts.dist:
         distconf = opts.dist
index 3be0e71ab3ee1f46370fd7063a7dc9a6548c6a8b..5468afcfc2b0be43de76569cccf5ca4cfc9dcdd4 100644 (file)
@@ -26,6 +26,7 @@ import shutil
 import errno
 
 import msger
+import utils
 
 from gbp.scripts.buildpackage_rpm import git_archive, guess_comp_type
 from gbp.rpm.git import GitRepositoryError, RpmGitRepository
@@ -66,19 +67,7 @@ def do(opts, args):
     if opts.outdir:
         outdir = opts.outdir
 
-    git_project =  os.path.basename(workdir)
-    specfile = '%s/packaging/%s.spec' % (workdir, git_project)
-    if not os.path.exists(specfile):
-        specs = glob.glob('%s/packaging/*.spec' % workdir)
-        if not specs:
-            msger.error('no spec file found under',
-                        '/packaging sub-directory of %s' % workdir)
-
-        if len(specs) > 1:
-            msger.error("Can't decide which spec file to use.")
-        else:
-            specfile = specs[0]
-
+    specfile = utils.guess_spec(workdir, opts.spec)
     spec = rpm.parse_spec(specfile)
     if not spec.name or not spec.version:
         msger.error('can\'t get correct name or version from spec file.')
index 5781fb8d05f7b1f1c1acbb756fe210f39363b758..fdeeff67b918eea0dca5dd735a539dde69470491 100644 (file)
@@ -27,7 +27,7 @@ import msger
 from conf import configmgr
 import obspkg
 import errors
-from utils import Workdir
+import utils
 
 import gbp.rpm
 from gbp.scripts.buildpackage_rpm import main as gbp_build
@@ -83,10 +83,7 @@ def do(opts, args):
     if not specs:
         msger.error('no spec file found under /packaging sub-directory')
 
-    specfile = specs[0] #TODO:
-    if len(specs) > 1:
-        msger.warning('multiple specfiles found.')
-
+    specfile = utils.guess_spec(workdir, opts.spec)
     # get 'name' and 'version' from spec file
     spec = gbp.rpm.parse_spec(specfile)
     if not spec.name or not spec.version:
@@ -121,7 +118,7 @@ def do(opts, args):
     oscworkdir = localpkg.get_workdir()
     localpkg.remove_all()
 
-    with Workdir(workdir):
+    with utils.Workdir(workdir):
         if gbp_build(["argv[0] placeholder", "--git-export-only",
                       "--git-ignore-new", "--git-builder=osc",
                       "--git-export-dir=%s" % oscworkdir,
index b3886b68565d083e9da2292b8e5c98d2ad40a7d9..490ba0deed3f936c4667f513f0c81624c009d911 100644 (file)
@@ -290,3 +290,22 @@ def setup_qemu_emulator():
         fd.close()
 
     return qemu_emulator
+
+def guess_spec(workdir, default_spec):
+    if default_spec:
+        if not os.path.exists(default_spec):
+            msger.error('%s does not exit' % default_spec)
+        return default_spec
+    git_project =  os.path.basename(workdir)
+    specfile = '%s/packaging/%s.spec' % (workdir, git_project)
+    if not os.path.exists(specfile):
+        specs = glob.glob('%s/packaging/*.spec' % workdir)
+        if not specs:
+            msger.error('no spec file found under',
+                        '/packaging sub-directory of %s' % workdir)
+
+        if len(specs) > 1:
+            msger.error("Can't decide which spec file to use.")
+        else:
+            specfile = specs[0]
+    return specfile
index 68352d6bfb2aacf3b01a3079805add873f43f9b7..2d1e09edcca946c2a5ac88d290c0e7a8056cc4e8 100755 (executable)
--- a/tools/gbs
+++ b/tools/gbs
@@ -82,6 +82,10 @@ class Gbs(cmdln.Cmdln):
                   default=None,
                   dest='outdir',
                   help='Output directory')
+    @cmdln.option('--spec',
+                  default=None,
+                  dest='spec',
+                  help='Specify a spec file to use')
     def do_export(self, _subcmd, opts, *args):
         """${cmd_name}: export files and prepare for build
 
@@ -141,6 +145,10 @@ class Gbs(cmdln.Cmdln):
                   help='Do incremental build, which need support of spec file,'
                        ' and tar ball unpack stage should be enabled with the '
                        'condition of RPM macro RSYNCDONE')
+    @cmdln.option('--spec',
+                  default=None,
+                  dest='spec',
+                  help='Specify a spec file to use')
     @cmdln.option('--debuginfo',
                   action='store_true',
                   default=False,
@@ -191,6 +199,10 @@ class Gbs(cmdln.Cmdln):
                   callback=handle_project,
                   help='Base OBS project being used to branch from, ' \
                        'use "Trunk" if not specified')
+    @cmdln.option('--spec',
+                  default=None,
+                  dest='spec',
+                  help='Specify a spec file to use')
     def do_remotebuild(self, subcmd, opts, *args):
         """${cmd_name}: remote build package