From 4f4af28050d11d21300b59917893cc48f87fa562 Mon Sep 17 00:00:00 2001 From: Harald Braumann Date: Sat, 23 Feb 2008 21:45:00 +0100 Subject: Allow multiple file filters for git-import-{orig,dsc} --- gbp/command_wrappers.py | 12 ++++++------ gbp/config.py | 9 ++++++++- git-import-dsc | 17 +++++++++-------- git-import-orig | 16 +++++++++------- 4 files changed, 32 insertions(+), 22 deletions(-) diff --git a/gbp/command_wrappers.py b/gbp/command_wrappers.py index 42177e5..f11d486 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 6e1d5fa..c18fc28 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 cafa792..5c14277 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 6a1d5b2..25a0ea7 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), -- cgit v1.2.3