Universal configurable base tmpdir for all gbp tools
authorMarkus Lehtonen <markus.lehtonen@linux.intel.com>
Wed, 25 Feb 2015 11:50:45 +0000 (13:50 +0200)
committerMarkus Lehtonen <markus.lehtonen@linux.intel.com>
Tue, 3 Mar 2015 08:07:46 +0000 (10:07 +0200)
Adds support for a configurable tmpdir under which all gbp tools now
create their temporary directories and files.

NOTE: an exception is git-import-dscs which doesn't use the common
configuration system.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
gbp/config.py
gbp/scripts/buildpackage.py
gbp/scripts/common/import_orig.py
gbp/scripts/import_dsc.py
gbp/scripts/import_orig.py
gbp/scripts/pq.py

index e9382e7128bcfcdaa7cb4e497a8ca1b73d924ceb..e3349a3461b6d9b11679ec283325e90376e2da16 100644 (file)
@@ -170,6 +170,7 @@ class GbpOptionParser(OptionParser):
                  'purge': 'True',
                  'drop': 'False',
                  'commit': 'False',
+                 'tmp-dir' : '/var/tmp/gbp/',
              }
     help = {
              'debian-branch':
@@ -321,6 +322,9 @@ class GbpOptionParser(OptionParser):
                    "after export. Default is '%(drop)s'"),
               'commit':
                   "commit changes after export, Default is '%(commit)s'",
+              'tmp-dir':
+                  ("Base directory under which temporary directories are "
+                   "created, default is '%(tmp-dir)s'"),
            }
 
     def_config_files = [ '/etc/git-buildpackage/gbp.conf',
@@ -596,7 +600,6 @@ class GbpOptionParserRpm(GbpOptionParser):
     """
     defaults = dict(GbpOptionParser.defaults)
     defaults.update({
-            'tmp-dir'                   : '/var/tmp/gbp/',
             'vendor'                    : 'Downstream',
             'packaging-branch'          : 'master',
             'packaging-dir'             : '',
@@ -616,9 +619,6 @@ class GbpOptionParserRpm(GbpOptionParser):
 
     help = dict(GbpOptionParser.help)
     help.update({
-            'tmp-dir':
-                "Base directory under which temporary directories are "
-                "created, default is '%(tmp-dir)s'",
             'vendor':
                 "Distribution vendor name, default is '%(vendor)s'",
             'packaging-branch':
index 699f79fdca090b92e0ef1945560a259e648e6a34..c3ec90fe14d351242e4cfbc4616bd7abac64a153 100755 (executable)
@@ -40,6 +40,7 @@ from gbp.scripts.common.buildpackage import (index_name, wc_names,
                                              git_archive_single, dump_tree,
                                              write_wc, drop_index)
 from gbp.pkg import compressor_opts, compressor_aliases, parse_archive_filename
+from gbp.tmpfile import init_tmpdir, del_tmpdir
 
 def git_archive(repo, cp, output_dir, treeish, comp_type, comp_level, with_submodules):
     "create a compressed orig tarball in output_dir using git_archive"
@@ -407,6 +408,7 @@ def build_parser(name, prefix=None, git_treeish=None):
     parser.add_config_file_option(option_name="color-scheme",
                                   dest="color_scheme")
     parser.add_config_file_option(option_name="notify", dest="notify", type='tristate')
+    parser.add_config_file_option(option_name="tmp-dir", dest="tmp_dir")
     tag_group.add_option("--git-tag", action="store_true", dest="tag", default=False,
                       help="create a tag after a successful build")
     tag_group.add_option("--git-tag-only", action="store_true", dest="tag_only", default=False,
@@ -544,6 +546,8 @@ def main(argv):
     options, gbp_args, builder_args = parse_args(argv, prefix, tree)
 
     try:
+        init_tmpdir(options.tmp_dir, prefix='buildpackage_')
+
         Command(options.cleaner, shell=True)()
         if not options.ignore_new:
             (ret, out) = repo.is_clean(options.ignore_untracked)
@@ -661,6 +665,7 @@ def main(argv):
         retval = 1
     finally:
         drop_index(repo)
+        del_tmpdir()
 
     if not options.tag_only:
         if options.export_dir and options.purge and not retval:
index 2e1b3eaa2520fff4cb8223d02440441edfa528ff..a4e305602d77f6c980e969551f6aeea287f278ac 100644 (file)
@@ -36,14 +36,6 @@ except ImportError:
     pass
 
 
-def cleanup_tmp_tree(tree):
-    """remove a tree of temporary files"""
-    try:
-        gbpc.RemoveTree(tree)()
-    except gbpc.CommandExecFailed:
-        gbp.log.err("Removal of tmptree %s failed." % tree)
-
-
 def ask_package_name(default, name_validator_func, err_msg):
     """
     Ask the user for the source package name.
index 38cf9995adacbeb69c2f8553b39d1ad1f8910ea6..43ac30ab2f7c655588a3909c42109d0f31cc4636 100644 (file)
@@ -21,7 +21,6 @@ import sys
 import re
 import os
 import shutil
-import tempfile
 import glob
 import pipes
 import time
@@ -35,6 +34,7 @@ from gbp.git.modifier import GitModifier
 from gbp.config import (GbpOptionParserDebian, GbpOptionGroup,
                         no_upstream_branch_msg)
 from gbp.errors import GbpError
+from gbp.tmpfile import init_tmpdir, del_tmpdir, tempfile
 import gbp.log
 
 class SkipImport(Exception):
@@ -227,6 +227,7 @@ def build_parser(name):
     parser.add_config_file_option(option_name="color", dest="color", type='tristate')
     parser.add_config_file_option(option_name="color-scheme",
                                   dest="color_scheme")
+    parser.add_config_file_option(option_name="tmp-dir", dest="tmp_dir")
     parser.add_option("--download", action="store_true", dest="download", default=False,
                       help="download source package")
     branch_group.add_config_file_option(option_name="debian-branch",
@@ -288,6 +289,8 @@ def main(argv):
         return 1
 
     try:
+        init_tmpdir(options.tmp_dir, prefix='import-dsc_')
+
         if len(args) != 1:
             gbp.log.err("Need to give exactly one package to import. Try --help.")
             raise GbpError
@@ -328,7 +331,7 @@ def main(argv):
             if repo.bare:
                 set_bare_repo_options(options)
 
-            dirs['tmp'] = os.path.abspath(tempfile.mkdtemp(dir='..'))
+            dirs['tmp'] = os.path.abspath(tempfile.mkdtemp())
             upstream = DebianUpstreamSource(src.tgz)
             upstream = upstream.unpack(dirs['tmp'], options.filters)
 
@@ -411,6 +414,7 @@ def main(argv):
         skipped = True
     finally:
         os.chdir(dirs['top'])
+        del_tmpdir()
 
     for d in [ 'tmp', 'download' ]:
         if d in dirs:
index ab3bd39d0a04fdeec647f8b6f9c9289bfb910056..3be0415735f27969dd1fde2346ff5b6a8404b68c 100644 (file)
@@ -20,7 +20,6 @@
 from six.moves import configparser
 import os
 import sys
-import tempfile
 import gbp.command_wrappers as gbpc
 from gbp.deb import (DebianPkgPolicy, parse_changelog_repo)
 from gbp.deb.upstreamsource import DebianUpstreamSource
@@ -32,9 +31,10 @@ from gbp.errors import GbpError
 from gbp.format import format_str
 import gbp.log
 from gbp.pkg import compressor_opts
-from gbp.scripts.common.import_orig import (cleanup_tmp_tree, ask_package_name,
+from gbp.scripts.common.import_orig import (ask_package_name,
                                             ask_package_version, download_orig,
                                             prepare_sources)
+from gbp.tmpfile import init_tmpdir, del_tmpdir, tempfile
 
 
 def upstream_import_commit_msg(options, version):
@@ -200,6 +200,7 @@ def build_parser(name):
     parser.add_config_file_option(option_name="color", dest="color", type='tristate')
     parser.add_config_file_option(option_name="color-scheme",
                                   dest="color_scheme")
+    parser.add_config_file_option(option_name="tmp-dir", dest="tmp_dir")
 
     # Accepted for compatibility
     parser.add_option("--no-dch", dest='no_dch', action="store_true",
@@ -248,7 +249,6 @@ def parse_args(argv):
 
 def main(argv):
     ret = 0
-    tmpdir = tempfile.mkdtemp(dir='../')
 
     gbp.log.initialize()
 
@@ -257,6 +257,9 @@ def main(argv):
         return 1
 
     try:
+        init_tmpdir(options.tmp_dir, prefix='import-orig_')
+        tmpdir = tempfile.mkdtemp()
+
         if options.download:
             source = download_orig(args[0])
         else:
@@ -383,9 +386,8 @@ def main(argv):
         if len(err.__str__()):
             gbp.log.err(err)
         ret = 1
-
-    if tmpdir:
-        cleanup_tmp_tree(tmpdir)
+    finally:
+        del_tmpdir()
 
     if not ret:
         gbp.log.info("Successfully imported version %s of %s" % (version, source.path))
index 14e93dddd43417a0c69074a6af2cfee43f46b944..02ec514883865888e75b361b6aa43eae35448c16 100755 (executable)
@@ -22,7 +22,6 @@ import errno
 import os
 import shutil
 import sys
-import tempfile
 import re
 from gbp.config import GbpOptionParserDebian
 from gbp.git import (GitRepositoryError, GitRepository)
@@ -36,6 +35,7 @@ from gbp.scripts.common.pq import (is_pq_branch, pq_branch_name, pq_branch_base,
                                  apply_and_commit_patch, switch_pq,
                                  drop_pq, get_maintainer_from_control)
 from gbp.dch import extract_bts_cmds
+from gbp.tmpfile import init_tmpdir, del_tmpdir, tempfile
 
 PATCH_DIR = "debian/patches/"
 SERIES_FILE = os.path.join(PATCH_DIR,"series")
@@ -395,6 +395,7 @@ def main(argv):
         os.chdir(repo.path)
 
     try:
+        init_tmpdir(options.tmp_dir, prefix='pq_')
         current = repo.get_branch()
         if action == "export":
             export_patches(repo, current, options)
@@ -421,6 +422,8 @@ def main(argv):
         if len(err.__str__()):
             gbp.log.err(err)
         retval = 1
+    finally:
+        del_tmpdir()
 
     return retval