summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorHarald Braumann <harry@unheit.net>2008-02-23 21:45:00 +0100
committerGuido Guenther <agx@sigxcpu.org>2008-02-23 21:45:00 +0100
commit4f4af28050d11d21300b59917893cc48f87fa562 (patch)
tree03db4e1feaea58751b66adc98f1997fa2831c89b
parent5082194530a089312b9fda1d62d800c834f224ab (diff)
Allow multiple file filters for git-import-{orig,dsc}
-rw-r--r--gbp/command_wrappers.py12
-rw-r--r--gbp/config.py9
-rwxr-xr-xgit-import-dsc17
-rwxr-xr-xgit-import-orig16
4 files changed, 32 insertions, 22 deletions
diff --git a/gbp/command_wrappers.py b/gbp/command_wrappers.py
index 42177e56..f11d4860 100644
--- a/gbp/command_wrappers.py
+++ b/gbp/command_wrappers.py
@@ -87,17 +87,17 @@ class PristineTar(Command):
class UnpackTarArchive(Command):
"""Wrap tar to Unpack a gzipped tar archive"""
- def __init__(self, archive, dir, filter=""):
+ def __init__(self, archive, dir, filters=[]):
self.archive = archive
self.dir = dir
- exclude = [ "", "--exclude=%s" % filter ][len(filter) > 0]
+ exclude = [("--exclude=%s" % filter) for filter in filters]
if archive.lower().endswith(".bz2"):
decompress = "--bzip2"
else:
decompress = "--gzip"
- Command.__init__(self, 'tar', [ exclude, '-C', dir, decompress, '-xf', archive ])
+ Command.__init__(self, 'tar', exclude + ['-C', dir, decompress, '-xf', archive ])
self.run_error = "Couldn't unpack %s" % self.archive
@@ -222,7 +222,7 @@ class GitCommitAll(GitCommand):
GitCommand.__call__(self, args)
-def copy_from(orig_dir, filter=""):
+def copy_from(orig_dir, filters=[]):
"""
copy a source tree over via tar
@param orig_dir: where to copy from
@@ -230,10 +230,10 @@ def copy_from(orig_dir, filter=""):
@return: list of copied files
@rtype: list
"""
- exclude = [ "", "--exclude=%s" % filter ][len(filter) > 0]
+ exclude = [("--exclude=%s" % filter) for filter in filters]
try:
- p1 = subprocess.Popen(["tar", exclude, "-cSpf", "-", "." ], stdout=subprocess.PIPE, cwd=orig_dir)
+ p1 = subprocess.Popen(["tar"] + exclude + ["-cSpf", "-", "." ], stdout=subprocess.PIPE, cwd=orig_dir)
p2 = subprocess.Popen(["tar", "-xvSpf", "-" ], stdin=p1.stdout, stdout=subprocess.PIPE)
files = p2.communicate()[0].split('\n')
except OSError, err:
diff --git a/gbp/config.py b/gbp/config.py
index 6e1d5fa0..c18fc283 100644
--- a/gbp/config.py
+++ b/gbp/config.py
@@ -34,7 +34,7 @@ class GbpOptionParser(OptionParser):
'posttag' : '',
'debian-tag' : 'debian/%(version)s',
'upstream-tag' : 'upstream/%(version)s',
- 'filter' : '',
+ 'filter' : [],
'snapshot-number' : 'snapshot + 1',
'git-log' : '--no-merges',
'export-dir' : '',
@@ -52,6 +52,13 @@ class GbpOptionParser(OptionParser):
self.config = dict(parser.defaults())
if parser.has_section(self.command):
self.config.update(dict(parser.items(self.command, raw=True)))
+ # filter can be either a list or a string, always build a list:
+ if self.config['filter']:
+ if self.config['filter'].startswith('['):
+ self.config['filter'] = eval(self.config['filter'])
+ else:
+ self.config['filter'] = [ self.config['filter'] ]
+
def __init__(self, command, prefix='', usage=None):
self.command = command
diff --git a/git-import-dsc b/git-import-dsc
index cafa792b..5c142770 100755
--- a/git-import-dsc
+++ b/git-import-dsc
@@ -82,13 +82,13 @@ def parse_dsc(dscfile):
return dsc
-def import_initial(src, dirs, options, tagger, filter):
+def import_initial(src, dirs, options, tagger, filters):
"""
import the intial version and (in the case of a non native package) create
the 'upstream' branch. Tag everything appropriately.
"""
try:
- unpackTGZ = gbpc.UnpackTarArchive(src.tgz, dirs['tmp'], filter=filter)
+ unpackTGZ = gbpc.UnpackTarArchive(src.tgz, dirs['tmp'], filters=filters)
unpackTGZ()
except gbpc.CommandExecFailed:
print >>sys.stderr, "Unpacking of %s failed" % src.tgz
@@ -120,7 +120,7 @@ def import_initial(src, dirs, options, tagger, filter):
return True
-def apply_debian_patch(src, dirs, options, tagger, filter):
+def apply_debian_patch(src, dirs, options, tagger, filters):
"""apply the debian patch and tag appropriately"""
try:
version = "%s-%s" % (src.upstream_version, src.debian_version)
@@ -129,7 +129,7 @@ def apply_debian_patch(src, dirs, options, tagger, filter):
repo = GitRepository('.')
old = set(repo.index_files())
- new = set(gbpc.copy_from(dirs['dpkg-src'], filter))
+ new = set(gbpc.copy_from(dirs['dpkg-src'], filters))
gbpc.GitAdd()(['.'])
files = [ obj for obj in old - new if not os.path.isdir(obj)]
if files:
@@ -192,8 +192,9 @@ def main(argv):
help="Format string for debian tags, default is '%(debian-tag)s'")
parser.add_config_file_option(option_name="upstream-tag", dest="upstream_tag",
help="Format string for upstream tags, default is '%(upstream-tag)s'")
- parser.add_config_file_option(option_name="filter", dest="filter",
- help="files to filter out during import")
+ parser.add_config_file_option(option_name="filter", dest="filters",
+ help="files to filter out during import (can be given multiple times)",
+ action="append")
parser.add_config_file_option(option_name="pristine-tar", dest="pristine_tar",
help="Use pristine-tar to import the tarball", action="store_true")
(options, args) = parser.parse_args(argv[1:])
@@ -213,7 +214,7 @@ def main(argv):
raise GbpError
dirs['tmp'] = os.path.abspath(tempfile.mkdtemp(dir='.'))
- if not import_initial(src, dirs, options, gitTag, options.filter):
+ if not import_initial(src, dirs, options, gitTag, options.filters):
raise GbpError
os.chdir(dirs['top'])
@@ -222,7 +223,7 @@ def main(argv):
os.mkdir(dirs['unpack'])
dirs['dpkg-src'] = os.path.join(dirs['unpack'],
"%s-%s-%s" % (src.pkg, src.upstream_version, src.debian_version))
- if not apply_debian_patch(src, dirs, options, gitTag, options.filter):
+ if not apply_debian_patch(src, dirs, options, gitTag, options.filters):
raise GbpError
create_debian_branch(options.debian_branch, dirs)
os.chdir(dirs['top'])
diff --git a/git-import-orig b/git-import-orig
index 6a1d5b23..25a0ea7a 100755
--- a/git-import-orig
+++ b/git-import-orig
@@ -50,11 +50,11 @@ def unpack_orig(archive, tmpdir):
return unpackArchive.dir
-def import_source_tree(repo, orig_dir, version, filter, verbose):
+def import_source_tree(repo, orig_dir, version, filters, verbose):
"""import source tree to the current branch"""
try:
old = set(repo.index_files())
- new = set(gbpc.copy_from(orig_dir, filter))
+ new = set(gbpc.copy_from(orig_dir, filters))
gbpc.GitAdd()(['.'])
files = [ obj for obj in old - new if not os.path.isdir(obj)]
if files:
@@ -110,8 +110,9 @@ def main(argv):
help="GPG keyid to sign tags with")
parser.add_config_file_option(option_name="upstream-tag", dest="upstream_tag",
help="format string for upstream tags, default is '%(upstream-tag)s'")
- parser.add_config_file_option(option_name="filter", dest="filter",
- help="files to filter out during import")
+ parser.add_config_file_option(option_name="filter", dest="filters",
+ help="files to filter out during import (can be given multiple times)",
+ action="append")
parser.add_config_file_option(option_name="pristine-tar", dest="pristine_tar",
help="run pristine-tar to import the tarball", action="store_true")
(options, args) = parser.parse_args(argv[1:])
@@ -182,13 +183,14 @@ on howto create it otherwise use --upstream-branch to specify it.
orig_dir = tmpdir
try:
+ filter_msg = ["", " (filtering out %s)" % options.filters][len(options.filters) > 0]
if not is_empty:
- print "Importing '%s' to branch '%s'..." % (archive, options.upstream_branch)
+ print "Importing '%s' to branch '%s'%s..." % (archive, options.upstream_branch, filter_msg)
gbpc.GitCheckoutBranch(options.upstream_branch)()
else:
- print "Initial import of '%s'..." % archive
+ print "Initial import of '%s' %s..." % (archive, filter_msg)
- import_source_tree(repo, orig_dir, version, options.filter, verbose=not is_empty)
+ import_source_tree(repo, orig_dir, version, options.filters, verbose=not is_empty)
if options.pristine_tar:
gbpc.PristineTar().commit(archive, options.upstream_branch)
gbpc.GitTag(options.sign_tags, options.keyid)(build_tag(options.upstream_tag, version),