ソースを参照

manifest_xml: allow src=. with symlinks

Some Android/Nest manifests are using <linkfile> with src="." to
create stable paths to specific projects.  Allow that specific
use case as it seems reasonable to support.

Bug: https://crbug.com/gerrit/11218
Change-Id: I5eadec257cd58ba0f8687c590ddc250a7a414a85
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/254276
Reviewed-by: Michael Mortensen <mmortensen@google.com>
Reviewed-by: Mike Frysinger <vapier@google.com>
Tested-by: Mike Frysinger <vapier@google.com>
Mike Frysinger 6 年 前
コミット
ae62541005
2 ファイル変更9 行追加5 行削除
  1. 7 5
      manifest_xml.py
  2. 2 0
      tests/test_manifest_xml.py

+ 7 - 5
manifest_xml.py

@@ -985,11 +985,13 @@ class XmlManifest(object):
     # Assume paths might be used on case-insensitive filesystems.
     path = path.lower()
 
-    # We don't really need to reject '.' here, but there shouldn't really be a
-    # need to ever use it, so no need to accept it either.
-    for part in set(path.split(os.path.sep)):
-      if part in {'.', '..', '.git'} or part.startswith('.repo'):
-        return 'bad component: %s' % (part,)
+    # Some people use src="." to create stable links to projects.  Lets allow
+    # that but reject all other uses of "." to keep things simple.
+    parts = path.split(os.path.sep)
+    if parts != ['.']:
+      for part in set(parts):
+        if part in {'.', '..', '.git'} or part.startswith('.repo'):
+          return 'bad component: %s' % (part,)
 
     if not symlink and path.endswith(os.path.sep):
       return 'dirs not allowed'

+ 2 - 0
tests/test_manifest_xml.py

@@ -49,6 +49,8 @@ class ManifestValidateFilePaths(unittest.TestCase):
     # We allow symlinks to end in a slash since we allow them to point to dirs
     # in general.  Technically the slash isn't necessary.
     check('foo/', 'bar')
+    # We allow a single '.' to get a reference to the project itself.
+    check('.', 'bar')
 
   def test_bad_paths(self):
     """Make sure bad paths (src & dest) are rejected."""