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>
diff --git a/manifest_xml.py b/manifest_xml.py
index 035cc61..b92b267 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -985,11 +985,13 @@
# 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'
diff --git a/tests/test_manifest_xml.py b/tests/test_manifest_xml.py
index ecc84ad..b6ec5b8 100644
--- a/tests/test_manifest_xml.py
+++ b/tests/test_manifest_xml.py
@@ -49,6 +49,8 @@
# 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."""