Add an ArgumentParser Action to load project conf
authorZhang Qiang <qiang.z.zhang@intel.com>
Wed, 4 Sep 2013 05:38:06 +0000 (13:38 +0800)
committerZhang Qiang <qiang.z.zhang@intel.com>
Wed, 4 Sep 2013 08:19:44 +0000 (16:19 +0800)
Without this patch project special gbs.conf will not
be loaded if gbs running out of project, for example:

 $ gbs export /path/to/project

This patch add an ArgumentParser Action to process
all gitdir positional argument

Fixes: #1272

Change-Id: Ia2e1ef8f9d58c6e3f6115d795bf0a503e692fb2c

gitbuildsys/utils.py
tools/gbs

index c63036f..c0b5cc9 100644 (file)
@@ -29,13 +29,14 @@ import hashlib
 import fnmatch
 import signal
 import subprocess
+import argparse
 import xml.etree.ElementTree as ET
 from collections import defaultdict
 
 from gitbuildsys.errors import UrlError, GbsError
 from gitbuildsys.log import LOGGER as log
 
-from gbp.rpm.git import GitRepositoryError
+from gbp.rpm.git import RpmGitRepository, GitRepositoryError
 from gbp.errors import GbpError
 
 
@@ -489,6 +490,25 @@ class RepoParser(object):
 
         return filter_valid_repo(repos)
 
+class SearchConfAction(argparse.Action):
+    """
+    Action for gitdir position argument to find project special
+    gbs.conf
+    """
+    def __call__(self, parser, namespace, value, option_string=None):
+        from gitbuildsys.conf import configmgr
+
+        workdir = value
+        try:
+            repo = RpmGitRepository(value)
+            workdir = repo.path
+        except GitRepositoryError, err:
+            pass
+
+        prj_conf = os.path.join(workdir, '.gbs.conf')
+        if os.path.exists(prj_conf) and workdir != os.getcwd():
+            configmgr.add_conf(prj_conf)
+        setattr(namespace, self.dest, value)
 
 def git_status_checker(git, opts):
     """
index 1e466e3..ae06cf4 100755 (executable)
--- a/tools/gbs
+++ b/tools/gbs
@@ -28,6 +28,7 @@ from gitbuildsys import errors
 from gitbuildsys.parsing import subparser, GbsHelpFormatter, basename_type
 from gitbuildsys import log
 from gitbuildsys import cmd_build
+from gitbuildsys.utils import SearchConfAction
 
 
 @subparser
@@ -87,6 +88,7 @@ def export_parser(parser):
 
     parser.add_argument('gitdir', nargs='?', type=os.path.abspath,
                         default=os.getcwd(),
+                        action=SearchConfAction,
                         help='path to git repository')
 
     parser.add_argument('-o', '--outdir', help='output directory')
@@ -136,6 +138,7 @@ def build_parser(parser):
 
     parser.add_argument('gitdir', nargs='?', type=os.path.abspath,
                         default=os.getcwd(),
+                        action=SearchConfAction,
                         help='git repository path, which can contain multiple '
                         'packages, in this case, all packages will be built in '
                         'dependency order')
@@ -292,6 +295,7 @@ def remotebuild_parser(parser):
 
     parser.add_argument('gitdir', nargs='?', type=os.path.abspath,
                         default=os.getcwd(),
+                        action=SearchConfAction,
                         help='path to git repository')
 
     parser.add_argument('-T', '--target-obsprj',
@@ -371,6 +375,7 @@ def changelog_parser(parser):
 
     parser.add_argument('gitdir', nargs='?', type=os.path.abspath,
                         default=os.getcwd(),
+                        action=SearchConfAction,
                         help='path to git repository')
 
     parser.add_argument('--spec', type=basename_type,
@@ -397,6 +402,7 @@ def submit_parser(parser):
 
     parser.add_argument('gitdir', nargs='?', type=os.path.abspath,
                         default=os.getcwd(),
+                        action=SearchConfAction,
                         help='path to git repository')
 
     parser.add_argument('--tag', help='create tag using specified tag name. '