diff options
author | Mark E. Hamilton <mhamilt@sandia.gov> | 2016-02-23 18:10:42 -0700 |
---|---|---|
committer | David Pursehouse <david.pursehouse@sonymobile.com> | 2016-04-08 00:07:52 +0000 |
commit | f9fe3e14d2b56140c90a8969892e06aa71127305 (patch) | |
tree | 5065ff8c40f8a7c8cf4574dd7afa6f573e76ca53 /project.py | |
parent | bdb866ea7630b1aecad0ddc7d72939e67ff39816 (diff) | |
download | git-repo-f9fe3e14d2b56140c90a8969892e06aa71127305.tar.gz |
repo: Repo does not always handle '.' parameter correctly
The repo script allows a manifest to specify a '.' as the path the
top-level directory, which co-locates the .git and .repo directories,
and places files from the git repository at the top-level:
<project name="proj_name" path="." />
<project name="sierra.other.git" path="other" />
Most commands work correctly with this setup. Some commands, however,
fail to find the project. For instance, 'repo sync' works, and 'repo sync .'
works in a sub-project ('other' in this case) but 'repo sync .' in the
top-level directory fails with the error:
error: project . not found
There are two reasons for this:
1. The self.worktree attribute of the Project object is not normalized,
so with a '.' for path its value would be '/my/project/root/.'. This is
fine when used as a path, since it's the same path as '/my/project/root',
but when used in a string comparison it fails. This commit applies
os.path.normpath() to that value before storing it.
2. The _GetProjectByPath method in command.py was not checking the path
against manifest.topdir, so even once it was normalized the project was
not found. This commit adds a check against manifest.topdir if the
loop drops out without finding a project.
Change-Id: Ic84d053f1bbb5a357cad566805d5a326ae8246d2
Diffstat (limited to 'project.py')
-rw-r--r-- | project.py | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -626,7 +626,7 @@ class Project(object): | |||
626 | self.gitdir = gitdir.replace('\\', '/') | 626 | self.gitdir = gitdir.replace('\\', '/') |
627 | self.objdir = objdir.replace('\\', '/') | 627 | self.objdir = objdir.replace('\\', '/') |
628 | if worktree: | 628 | if worktree: |
629 | self.worktree = worktree.replace('\\', '/') | 629 | self.worktree = os.path.normpath(worktree.replace('\\', '/')) |
630 | else: | 630 | else: |
631 | self.worktree = None | 631 | self.worktree = None |
632 | self.relpath = relpath | 632 | self.relpath = relpath |