gbp-create-remote-repo: add --remote-config
authorGuido Günther <agx@sigxcpu.org>
Wed, 21 Mar 2012 08:52:34 +0000 (09:52 +0100)
committerGuido Günther <agx@sigxcpu.org>
Wed, 21 Mar 2012 22:41:57 +0000 (23:41 +0100)
This specifies an additional config file section that can be used
to preconfigure different remote locations.

docs/manpages/gbp-create-remote-repo.sgml
docs/manpages/gbp.conf.sgml
gbp.conf
gbp/config.py
gbp/scripts/create_remote_repo.py

index e680f9e..93cf926 100644 (file)
@@ -25,6 +25,7 @@
       <arg><option>--remote-url-pattern=</option><replaceable>url-pattern</replaceable></arg>
       <arg><option>--remote-name=</option><replaceable>name</replaceable></arg>
       <arg><option>--template-dir=</option><replaceable>directory</replaceable></arg>
+      <arg><option>--remote-config=</option><replaceable>config</replaceable></arg>
       <arg><option>--[no-]pristine-tar</option></arg>
       <arg><option>--debian-branch=</option><replaceable>branch_name</replaceable></arg>
       <arg><option>--upstream-branch=</option><replaceable>branch_name</replaceable></arg>
         </listitem>
       </varlistentry>
       <varlistentry>
+        <term><option>--remote-config</option>=<replaceable>config</replaceable>
+        </term>
+        <listitem>
+         <para>Name of a config file section in <filename>gbp.conf</filename>
+          that specifies the above paramters. See <xref linkend="gbp.man.gbp.conf">
+          manpage for details.
+         </para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
         <term><option>--debian-branch</option>=<replaceable>branch_name</replaceable>
         </term>
         <listitem>
index e0330d7..09999be 100644 (file)
     [&lt;command&gt;]
     # Specific sections for each command, like &git-buildpackage;
     key = value
+
+    [remote-config &lt;name&gt;]
+    # Specific sections for a remote configuration. This can be used several
+    # times to set up remote configuration for gbp-create-remote-repo
+    key = value
 </programlisting>
 
 <para>
@@ -125,6 +130,32 @@ can't be configured via gbp.conf.
 </para>
 </note>
 
+<para>
+<xref linkend="gbp.man.gbp.create.remote.repo"> can additionally parse remote site
+configurations from <filename>gbp.conf</filename>. For example a configration like:
+</para>
+
+<programlisting>
+[remote-config pkg-libvirt]
+# Location of the repository
+remote-url-pattern = ssh://git.debian.org/git/pkg-libvirt/%(pkg)s
+# Template dir to passed to git-init
+template-dir = /srv/alioth.debian.org/chroot/home/groups/pkg-libvirt/git-template
+</programlisting>
+
+<para>
+Can be used to create remote repositories for the pkg-libvirt project using:
+</para>
+
+<programlisting>
+gbp-create-remote-repo --remote-config=pkg-libvirt
+</programlisting>
+
+<para>
+This can be useful if you're often creating new remote repositores for
+different projects.
+</para>
+
   </refsect1>
   <refsect1>
     <title>EXAMPLES</title>
index f5c689c..a283ed2 100644 (file)
--- a/gbp.conf
+++ b/gbp.conf
 [gbp-create-remote-repo]
 # disable remote branch tracking
 #track = False
+
+# Sample config to create remote repositore using gbp-create-remote-repo:
+[remote-config pkg-libvirt]
+# Location of the repository
+remote-url-pattern = ssh://git.debian.org/git/pkg-libvirt/%(pkg)s
+# Template dir to passed to git-init
+template-dir = /srv/alioth.debian.org/chroot/home/groups/pkg-libvirt/git-template
+
index 960d4b2..35c78b4 100644 (file)
@@ -126,6 +126,7 @@ class GbpOptionParser(OptionParser):
                  'pbuilder-autoconf' : 'True',
                  'pbuilder-options': '',
                  'template-dir': '',
+                 'remote-config': '',
              }
     help = {
              'debian-branch':
@@ -210,7 +211,9 @@ class GbpOptionParser(OptionParser):
              'pbuilder-options':
                   "Options to pass to pbuilder, default is '%(pbuilder-options)s'",
              'template-dir':
-                  "Template directory used by git init, default is %(template-dir)s",
+                  "Template directory used by git init, default is '%(template-dir)s'",
+             'remote-config':
+                  "Remote defintion in gbp.conf used to create the remote repository",
            }
 
     def_config_files = [ '/etc/git-buildpackage/gbp.conf',
@@ -358,6 +361,7 @@ class GbpOptionParser(OptionParser):
         neg_help = "negates '--%s%s'" % (self.prefix, option_name)
         self.add_config_file_option(option_name="no-%s" % option_name, dest=dest, help=neg_help, action="store_false")
 
+
 class GbpOptionGroup(OptionGroup):
     def add_config_file_option(self, option_name, dest, help=None, **kwargs):
         """
index c26551b..1e6b3f8 100644 (file)
@@ -225,10 +225,30 @@ def push_branches(remote, branches):
     gitPush([remote['url'], '--tags'])
 
 
-def parse_args(argv):
+def parse_args(argv, sections=[]):
+    """
+    Parse the command line arguments and config files.
+
+    @param argv: the command line arguments
+    @type argv: C{list} of C{str}
+    @param sections: additional sections to add to the config file parser
+        besides the command name
+    @type sections: C{list} of C{str}
+    """
+
+    # We simpley handle the template section as an additional config file
+    # section to parse, this makes e.g. --help work as expected:
+    for arg in argv:
+        if arg.startswith('--remote-config='):
+            sections = ['remote-config %s' % arg.split('=',1)[1]]
+            break
+    else:
+        sections = []
+
     parser = GbpOptionParserDebian(command=os.path.basename(argv[0]), prefix='',
                                    usage='%prog [options] - '
-                                   'create a remote repository')
+                                   'create a remote repository',
+                                   sections=sections)
     branch_group = GbpOptionGroup(parser,
                                   "branch options",
                                   "branch layout and tracking options")
@@ -257,8 +277,8 @@ def parse_args(argv):
                       help="The name of the remote, default is 'origin'")
     parser.add_config_file_option(option_name="template-dir",
                                   dest="template_dir")
-    parser.add_config_file_option(option_name="remote-template",
-                                  dest="remote_template")
+    parser.add_config_file_option(option_name="remote-config",
+                                  dest="remote_config")
 
     (options, args) = parser.parse_args(argv)
 
@@ -270,9 +290,13 @@ def main(argv):
     changelog = 'debian/changelog'
     cmd = []
 
-    options, args = parse_args(argv)
-    gbp.log.setup(options.color, options.verbose)
+    try:
+        options, args = parse_args(argv)
+    except Exception as e:
+        print >>sys.stderr, "%s" % e
+        return 1
 
+    gbp.log.setup(options.color, options.verbose)
     try:
         repo = DebianGitRepository(os.path.curdir)
     except GitRepositoryError: