With v1.12.24 and commit 384b3c594831 ('Fail if gitdir does not point to objdir
during sync') [1], when switching from one branch to another, with a path
backed by a different project between the two branches:
diff --git a/manifest.xml b/manifest.xml
index aaaaaaaaaaa..bbbbbbbbbb 100644
--- a/default.xml
+++ b/default.xml
-<project name="old/old_project" path="project" ...>
+<project name="new/new_project" path="project" ...>
Initial checkout:
$ repo init -u .... -b old -m manifest.xml
$ repo sync
Switch to different branch:
$ repo init -b new -m manifest.xml
$ repo sync
Repo sync failed with following error message:
Fetching projects: 7% (7/89) Fetching project new/new_project
Traceback (most recent call last):
File "/home/ydroneaud/src/work/.repo/repo/main.py", line 513, in <module>
_Main(sys.argv[1:])
File "/home/ydroneaud/src/work/.repo/repo/main.py", line 489, in _Main
result = repo._Run(argv) or 0
File "/home/ydroneaud/src/work/.repo/repo/main.py", line 162, in _Run
result = cmd.Execute(copts, cargs)
File "/home/ydroneaud/src/work/.repo/repo/subcmds/sync.py", line 659, in Execute
fetched = self._Fetch(to_fetch, opt)
File "/home/ydroneaud/src/work/.repo/repo/subcmds/sync.py", line 350, in _Fetch
self._FetchProjectList(**kwargs)
File "/home/ydroneaud/src/work/.repo/repo/subcmds/sync.py", line 244, in _FetchProjectList
success = self._FetchHelper(opt, project, *args, **kwargs)
File "/home/ydroneaud/src/work/.repo/repo/subcmds/sync.py", line 286, in _FetchHelper
optimized_fetch=opt.optimized_fetch)
File "/home/ydroneaud/src/work/.repo/repo/project.py", line 1143, in Sync_NetworkHalf
self._InitGitDir()
File "/home/ydroneaud/src/work/.repo/repo/project.py", line 2183, in _InitGitDir
self._CheckDirReference(self.objdir, self.gitdir, share_refs=False)
File "/home/ydroneaud/src/work/.repo/repo/project.py", line 2305, in _CheckDirReference
raise GitError('cannot overwrite a local work tree')
error.GitError: cannot overwrite a local work tree
After adding some debug to project.py:
diff --git a/project.py b/project.py
index 00f6b90457a1..d5516ce90ca4 100644
--- a/project.py
+++ b/project.py
@@ -2301,6 +2301,7 @@ class Project(object):
src = os.path.realpath(os.path.join(srcdir, name))
# Fail if the links are pointing to the wrong place
if src != dst:
+ print(' srcdir = %s\n destdir = %s\n name = %s\n src = %s\n dst =
%s\n' % (srcdir, destdir, name, src, dst))
raise GitError('cannot overwrite a local work tree')
def _ReferenceGitDir(self, gitdir, dotgit, share_refs, copy_all):
Repo init reports the following:
srcdir = /home/ydroneaud/src/work/.repo/project-objects/new_project.git
destdir = /home/ydroneaud/src/work/.repo/projects/project.git
name = info
src = /home/ydroneaud/src/work/.repo/project-objects/new/new_project.git/info
dst = /home/ydroneaud/src/work/.repo/project-objects/old/old_project.git/info
It seems that .repo/projects/ has 'project' still linked to older repository
objects:
.repo/projects/project.git/info is a symlink to
.repo/project-objects/old/old_project.git/info while it should become a symlink
to .repo/project-objects/new/new_project.git/info.
As already noted in issue #200, I understand the issue the commit [1] is trying
to catch, but it doesn't make anything to avoid the issue, it doesn't do
anything to recover from the issue and doesn't give a hint to fix the issue.
Here, repo sync failed before making the switch to the new repository.
Regards.
Original issue reported on code.google.com by yann@droneaud.fr on 27 Jul 2015 at 2:34
Original issue reported on code.google.com by
yann@droneaud.fr
on 27 Jul 2015 at 2:34