# HG changeset patch # User Bernhard Herzog # Date 1213977084 0 # Node ID 261b75d7b9727d7091ca037dae25f6c14f3f82fd # Parent be07b88b44eaeeebf36f491e2350bfc733383468 Extend listdir_abs with an optional glob pattern diff -r be07b88b44ea -r 261b75d7b972 test/test_util.py --- a/test/test_util.py Fri Jun 20 15:19:03 2008 +0000 +++ b/test/test_util.py Fri Jun 20 15:51:24 2008 +0000 @@ -7,11 +7,12 @@ """Tests for the treepkg.util module""" +import os import unittest from filesupport import FileTestMixin -from treepkg.util import replace_in_file +from treepkg.util import replace_in_file, listdir_abs class TestReplaceInFile(unittest.TestCase, FileTestMixin): @@ -48,3 +49,26 @@ "and more filler") self.runtest(template % dict(rev=0), template % dict(rev=0), r"0\.9-svn0", "1.0-svn321") + + +class TestListDirAbs(unittest.TestCase, FileTestMixin): + + def setUp(self): + self.directory = self.create_temp_dir(self.id()) + + def test_listdir_abs(self): + self.create_files(self.directory, [("foo.orig.tgz", ""), + ("foo.dsc", ""), + ("foo.diff.gz", ""),]) + self.assertEquals(sorted(listdir_abs(self.directory)), + sorted([os.path.join(self.directory, d) + for d in ["foo.orig.tgz", "foo.dsc", + "foo.diff.gz"]])) + + def test_listdir_abs_pattern(self): + self.create_files(self.directory, [("foo.orig.tgz", ""), + ("foo.dsc", ""), + ("foo.diff.gz", ""),]) + self.assertEquals(sorted(listdir_abs(self.directory, '*.dsc')), + [os.path.join(self.directory, "foo.dsc")]) + diff -r be07b88b44ea -r 261b75d7b972 treepkg/util.py --- a/treepkg/util.py Fri Jun 20 15:19:03 2008 +0000 +++ b/treepkg/util.py Fri Jun 20 15:51:24 2008 +0000 @@ -11,6 +11,7 @@ import re import tempfile import shutil +import fnmatch import run @@ -51,9 +52,15 @@ if not os.path.isdir(directory): os.makedirs(directory) -def listdir_abs(directory): - """Like os.listdir, but returns a list of absolute pathnames""" - return [os.path.join(directory, d) for d in os.listdir(directory)] +def listdir_abs(directory, pattern=None): + """Like os.listdir, but returns a list of absolute pathnames. + Optionally, a glob pattern can be given to restrict the names + returned by the function. + """ + filenames = os.listdir(directory) + if pattern is not None: + filenames = fnmatch.filter(filenames, pattern) + return [os.path.join(directory, filename) for filename in filenames] def copytree(src, dst, symlinks=False): """Recursively copy a directory tree using copy2().