Skip to content

Commit a610aba

Browse files
authored
Merge pull request #525 from M0ses/issue_520
FIXES: #520
2 parents bfbf96f + bc7f7e4 commit a610aba

File tree

6 files changed

+64
-36
lines changed

6 files changed

+64
-36
lines changed

TarSCM/archive.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,18 @@ def filter_files(self, filelist, topdir, args):
5757
excludes = r'$.'
5858
re_topdir = '(%s)/(%s)'
5959

60+
if args.include_re:
61+
includes = re_topdir % (re.escape(topdir), args.include_re)
62+
63+
if args.exclude_re:
64+
excludes = re_topdir % (re.escape(topdir), args.exclude_re)
65+
6066
if args.include:
6167
incl_arr = [fnmatch.translate(x + '*') for x in args.include]
6268
includes = re_topdir % (re.escape(topdir), r'|'.join(incl_arr))
69+
6370
if args.exclude:
64-
excl_arr = [x for x in args.exclude]
71+
excl_arr = [fnmatch.translate(x) for x in args.exclude]
6572
excludes = re_topdir % (re.escape(topdir), r'|'.join(excl_arr))
6673

6774
# add topdir without filtering for now

TarSCM/cli.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,18 @@ def parse_args(self, options):
149149
default=[], metavar='REGEXP',
150150
help='Specifies subset of files/subdirectories to '
151151
'pack in the tarball (can be repeated)')
152+
group.add_argument('--include-re',
153+
metavar='REGEXP',
154+
help='Specifies a regex pattern to match '
155+
'files/subdirectories to pack in the archive')
152156
group.add_argument('--exclude', action='append',
153157
default=[], metavar='REGEXP',
154158
help='Specifies excludes when creating the '
155159
'tarball (can be repeated)')
160+
group.add_argument('--exclude-re',
161+
metavar='REGEXP',
162+
help='Specifies a regex pattern to exclude matching'
163+
' files from the archive')
156164
parser.add_argument('--package-meta',
157165
choices=['yes', 'no'], default='no',
158166
help='Package the meta data of SCM to allow the '

tar_scm.service.in

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,10 +155,16 @@
155155
<description>Specify suffix name of package, which is used together with filename to determine tarball name.</description>
156156
</parameter>
157157
<parameter name="exclude">
158-
<description>Specify glob pattern to exclude when creating the tarball.</description>
158+
<description>Specify glob pattern to exclude when creating the archive.</description>
159+
</parameter>
160+
<parameter name="exclude-re">
161+
<description>Specify regex pattern to exclude when creating the archive.</description>
159162
</parameter>
160163
<parameter name="include">
161-
<description>Specify subset of files/subdirectories to pack in the tarball.</description>
164+
<description>Specify subset of files/subdirectories to pack in the archive.</description>
165+
</parameter>
166+
<parameter name="include-re">
167+
<description>Specifies a regex pattern to match files/subdirectories to pack in the archive.</description>
162168
</parameter>
163169
<parameter name="extract">
164170
<description>Specify a file/glob to be exported directly. Useful for build descriptions like spec files

tests/commontests.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def test_tar_exclude(self):
6363
self.assertTrue(tarents == expected)
6464

6565
def test_tar_exclude_re(self):
66-
self.tar_scm_std('--exclude', '(a|c)')
66+
self.tar_scm_std('--exclude-re', '(a|c)')
6767
tar_file = os.path.join(self.outdir, self.basename()+'.tar')
6868
tar = tarfile.open(tar_file)
6969
tarents = tar.getnames()
@@ -82,6 +82,16 @@ def test_tar_include(self):
8282
self.basename() + '/subdir/b']
8383
self.assertTrue(tarents == expected)
8484

85+
def test_tar_include_re(self):
86+
self.tar_scm_std('--include-re', '(a|c)')
87+
tar_file = os.path.join(self.outdir, self.basename()+'.tar')
88+
tar = tarfile.open(tar_file)
89+
tarents = tar.getnames()
90+
expected = [self.basename(),
91+
self.basename() + '/a',
92+
self.basename() + '/c']
93+
self.assertTrue(tarents == expected)
94+
8595
def test_obs_scm_exclude(self):
8696
self.tar_scm_std('--exclude', 'a', '--exclude', 'c', '--use-obs-scm', 'True')
8797
cpio = os.path.join(self.outdir, self.basename()+'.obscpio')

tests/gitsvntests.py

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,13 @@ def test_changesgenerate_new_commit_no_changes_file(self): # pylint: disable=C0
9191
self._check_servicedata(revision=3)
9292

9393
def _new_change_entry_regexp(self, author, changes): # pylint: disable=R0201
94-
return textwrap.dedent("""\
95-
^-------------------------------------------------------------------
96-
\w{3} \w{3} [ \d]\d \d\d:\d\d:\d\d [A-Z]{3} 20\d\d - %s
97-
98-
%s
99-
""") % (author, changes)
94+
regex = \
95+
r"^-+\n" \
96+
r"\w{3} \w{3} [ \d]\d \d\d:\d\d:\d\d [A-Z]{3} 20\d\d - %s\n" \
97+
r"\n" \
98+
r"%s\n" % (author, changes)
99+
print(regex)
100+
return regex
100101

101102
def _check_changes(self, orig_changes, expected_changes_regexp):
102103
new_changes_file = os.path.join(self.outdir, 'pkg.changes')
@@ -160,12 +161,11 @@ def _test_changesgenerate_new_commit_and_changes_file(self, changesauthor, expec
160161
print("XXXX 4")
161162
expected_changes_regexp = self._new_change_entry_regexp(
162163
expected_author,
163-
textwrap.dedent("""\
164-
- Update to version 0.6.%s:
165-
\* 5
166-
\* 4
167-
\* 3
168-
""") % rev
164+
r"- Update to version 0.6.%s:\n"
165+
r" \* 5\n"
166+
r" \* 4\n"
167+
r" \* 3\n"
168+
% rev
169169
)
170170
self._check_changes(orig_changes, expected_changes_regexp)
171171

@@ -190,12 +190,11 @@ def test_changesgenerate_new_commit_and_changes_file_no_version(self): # pylint
190190
expected_author = self.fixtures.user_email
191191
expected_changes_regexp = self._new_change_entry_regexp(
192192
expected_author,
193-
textwrap.dedent("""\
194-
- Update to version %s:
195-
\* 5
196-
\* 4
197-
\* 3
198-
""") % ver_regex
193+
r"- Update to version %s:\n"
194+
r" \* 5\n"
195+
r" \* 4\n"
196+
r" \* 3\n"
197+
% ver_regex
199198
)
200199
self._check_changes(orig_changes, expected_changes_regexp)
201200

@@ -220,12 +219,11 @@ def test_changesgenerate_new_commit_and_changes_file_with_subdir(self): # pyli
220219
expected_author = self.fixtures.user_email
221220
expected_changes_regexp = self._new_change_entry_regexp(
222221
expected_author,
223-
textwrap.dedent("""\
224-
- Update to version 0.6.%s:
225-
\* 8
226-
\* 7
227-
\* 6
228-
""") % self.changesrevision(rev, abbrev=True)
222+
r"- Update to version 0.6.%s:\n"
223+
r" \* 8\n"
224+
r" \* 7\n"
225+
r" \* 6\n"
226+
% self.changesrevision(rev, abbrev=True)
229227
)
230228
self._check_changes(orig_changes, expected_changes_regexp)
231229

@@ -254,11 +252,10 @@ def test_changesgenerate_old_servicedata(self): # pylint: disable=C0103
254252
expected_author = self.fixtures.user_email
255253
expected_changes_regexp = self._new_change_entry_regexp(
256254
expected_author,
257-
textwrap.dedent("""\
258-
- Update to version 0.6.%s:
259-
\* 5
260-
\* 4
261-
\* 3
262-
""") % self.changesrevision(rev, abbrev=True)
255+
r"- Update to version 0.6.%s:\n"
256+
r" \* 5\n"
257+
r" \* 4\n"
258+
r" \* 3\n"
259+
% self.changesrevision(rev, abbrev=True)
263260
)
264261
self._check_changes(orig_changes, expected_changes_regexp)

tests/gittests.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def changesrevision(self, rev, abbrev=False):
8484
return self.sha1s('tag%d' % rev)
8585

8686
def changesregex(self, rev): # pylint: disable=R0201
87-
return '\d{10}.%s' % rev # noqa: W605, pylint: disable=W1401
87+
return r'\d{10}.%s' % rev # noqa: W605, pylint: disable=W1401
8888

8989
def tar_scm_args(self): # pylint: disable=R0201
9090
scm_args = [
@@ -245,7 +245,7 @@ def test_versionrewrite(self):
245245
fix = self.fixtures
246246
fix.create_commits(2)
247247
self.tar_scm_std("--revision", 'tag2',
248-
"--versionrewrite-pattern", 'tag(\d+)', # noqa: W605,E501 pylint: disable=W1401
248+
"--versionrewrite-pattern", r'tag(\d+)', # noqa: W605,E501 pylint: disable=W1401
249249
"--versionrewrite-replacement", '\\1-test',
250250
"--versionformat", "@PARENT_TAG@")
251251
self.assertTarOnly(self.basename(version="2-test"))

0 commit comments

Comments
 (0)