Expand environment variables and '~' in gbp.conf paths
authorBenoît Knecht <benoit.knecht@fsfe.org>
Tue, 26 Oct 2010 14:11:36 +0000 (16:11 +0200)
committerGuido Günther <agx@sigxcpu.org>
Tue, 2 Nov 2010 10:57:56 +0000 (11:57 +0100)
Options that expect a path in gbp.conf can now be given as
'~/path/to/dir' or '$HOME/path/to/dir' (or any other environment
variable for that matter).

Closes: #545692
gbp/config.py
git-buildpackage

index 9d443d1375f6807a52edb28a14eef46953550887..e9c108c6f4dda55c7f94870103e34bf417240e6c 100644 (file)
@@ -3,14 +3,24 @@
 # (C) 2006,2007,2010 Guido Guenther <agx@sigxcpu.org>
 """handles command line and config file option parsing for the gbp commands"""
 
-from optparse import OptionParser, OptionGroup
+from optparse import OptionParser, OptionGroup, Option
 from ConfigParser import SafeConfigParser
+from copy import copy
 import os.path
 try:
     from gbp.gbp_version import gbp_version
 except ImportError:
     gbp_version = "[Unknown version]"
 
+def expand_path(option, opt, value):
+    value = os.path.expandvars(value)
+    return os.path.expanduser(value)
+
+class GbpOption(Option):
+    TYPES = Option.TYPES + ('path',)
+    TYPE_CHECKER = copy(Option.TYPE_CHECKER)
+    TYPE_CHECKER['path'] = expand_path
+
 class GbpOptionParser(OptionParser):
     """
     Handles commandline options and parsing of config files
@@ -142,7 +152,7 @@ class GbpOptionParser(OptionParser):
         self.prefix = prefix
         self.config = {}
         self.__parse_config_files()
-        OptionParser.__init__(self, usage=usage, version='%s %s' % (self.command, gbp_version))
+        OptionParser.__init__(self, option_class=GbpOption, usage=usage, version='%s %s' % (self.command, gbp_version))
 
     def _is_boolean(self, option_name, *args, **kwargs):
         """is option_name a boolean option"""
index f58aa35f032c7cec6ef1e6bf7ab294170a216d62..f6fb4c1db0430164ff64162681f4f3f9b97b0dd1 100755 (executable)
@@ -260,7 +260,7 @@ def main(argv):
                       help="force creation of orig.tar.gz", action="store_true")
     orig_group.add_config_file_option(option_name="no-create-orig", dest="no_create_orig",
                       help="don't create orig.tar.gz", action="store_true")
-    orig_group.add_config_file_option(option_name="tarball-dir", dest="tarball_dir",
+    orig_group.add_config_file_option(option_name="tarball-dir", dest="tarball_dir", type="path",
                       help="location to look for external tarballs")
     orig_group.add_config_file_option(option_name="compression", dest="comp_type",
                       help="Compression type, default is '%(compression)s'")
@@ -282,7 +282,7 @@ def main(argv):
     cmd_group.add_boolean_config_file_option(option_name="pbuilder", dest="use_pbuilder")
     cmd_group.add_config_file_option(option_name="dist", dest="pbuilder_dist")
     cmd_group.add_config_file_option(option_name="arch", dest="pbuilder_arch")
-    export_group.add_config_file_option(option_name="export-dir", dest="export_dir",
+    export_group.add_config_file_option(option_name="export-dir", dest="export_dir", type="path",
                       help="before building the package export the source into EXPORT_DIR, default is '%(export-dir)s'")
     export_group.add_config_file_option("export", dest="export",
                       help="export treeish object TREEISH, default is '%(export)s'", metavar="TREEISH")