diff options
Diffstat (limited to 'git/objects/submodule/base.py')
-rw-r--r-- | git/objects/submodule/base.py | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/git/objects/submodule/base.py b/git/objects/submodule/base.py index ae45e3db..92b0c8e8 100644 --- a/git/objects/submodule/base.py +++ b/git/objects/submodule/base.py @@ -238,6 +238,17 @@ class Submodule(util.IndexObject, Iterable, Traversable): path = path[:-1] # END handle trailing slash + if os.path.isabs(path): + working_tree_linux = to_native_path_linux(repo.working_tree_dir) + if not path.startswith(working_tree_linux): + raise ValueError("Submodule checkout path '%s' needs to be within the parents repository at '%s'" + % (working_tree_linux, path)) + path = path[len(working_tree_linux) + 1:] + if not path: + raise ValueError("Absolute submodule path '%s' didn't yield a valid relative path" % path) + # end verify converted relative path makes sense + # end convert to a relative path + # assure we never put backslashes into the url, as some operating systems # like it ... if url is not None: |