Manifest: filter file names with repoman's regex
authorZac Medico <zmedico@gentoo.org>
Sat, 17 Mar 2012 16:44:03 +0000 (09:44 -0700)
committerZac Medico <zmedico@gentoo.org>
Sat, 17 Mar 2012 16:44:03 +0000 (09:44 -0700)
This makes Manifest generation consistent with repoman, which is
necessary if repoman is going to ignore irrelevant files as requested
in bug #406877.

bin/repoman
pym/portage/manifest.py

index 3f16603f83b9a52d020e71511395d2dfc37ce9c4..ffedf2e2117974962e5348aabbd0501394ca917e 100755 (executable)
@@ -69,6 +69,8 @@ from portage import cvstree, normalize_path
 from portage import util
 from portage.exception import (FileNotFound, MissingParameter,
        ParseError, PermissionDenied)
+from portage.manifest import _prohibited_filename_chars_re as \
+       disallowed_filename_chars_re
 from portage.process import find_binary, spawn
 from portage.output import bold, create_color_func, \
        green, nocolor, red
@@ -85,7 +87,6 @@ util.initialize_logger()
 # 14 is the length of DESCRIPTION=""
 max_desc_len = 100
 allowed_filename_chars="a-zA-Z0-9._-+:"
-disallowed_filename_chars_re = re.compile(r'[^a-zA-Z0-9._\-+:]')
 pv_toolong_re = re.compile(r'[0-9]{19,}')
 bad = create_color_func("BAD")
 
index da40ae11749243ab5d5fc3a78c8a795d82620eec..90324eebe1508137746485b80f698170c43e7c9e 100644 (file)
@@ -1,8 +1,9 @@
-# Copyright 1999-2011 Gentoo Foundation
+# Copyright 1999-2012 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 import errno
 import io
+import re
 import warnings
 
 import portage
@@ -22,6 +23,9 @@ from portage.const import (MANIFEST1_HASH_FUNCTIONS, MANIFEST2_HASH_DEFAULTS,
        MANIFEST2_HASH_FUNCTIONS, MANIFEST2_IDENTIFIERS, MANIFEST2_REQUIRED_HASH)
 from portage.localization import _
 
+# Characters prohibited by repoman's file.name check.
+_prohibited_filename_chars_re = re.compile(r'[^a-zA-Z0-9._\-+:]')
+
 class FileNotInManifestException(PortageException):
        pass
 
@@ -33,10 +37,14 @@ def manifest2AuxfileFilter(filename):
        for x in mysplit:
                if x[:1] == '.':
                        return False
+               if _prohibited_filename_chars_re.search(x) is not None:
+                       return False
        return not filename[:7] == 'digest-'
 
 def manifest2MiscfileFilter(filename):
        filename = filename.strip(os.sep)
+       if _prohibited_filename_chars_re.search(filename) is not None:
+               return False
        return not (filename in ["CVS", ".svn", "files", "Manifest"] or filename.endswith(".ebuild"))
 
 def guessManifestFileType(filename):