From 2a3e15217ab986abe457808a4f2e35504ded535a Mon Sep 17 00:00:00 2001 From: Dan Willemsen Date: Thu, 30 Jul 2015 20:43:33 -0700 Subject: [PATCH] Fix _ReferenceGitDir symlinking This fixes these errors: ... File ".repo/repo/project.py", line 2371, in _ReferenceGitDir os.symlink(os.path.relpath(src, os.path.dirname(dst)), dst) OSError: [Errno 17] File exists Which was happening for checkouts that were created before v1.12.8, when project-objects was created. Nothing had yet been forcing these checkouts to use project-objects, until the recent verification changes. In this OSError case, we already created the symlink, so src == dst, and the directory did not exist. This caused us to run os.makedirs the os.symlink on the same file. dst really should be the file in gitdir, not the target of that symlink if it exists. So just use realpath for the dotgit portion of the path. Change-Id: Iff5396a2093de91029c42cf38aa57131fd22981c --- project.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/project.py b/project.py index 868425ce..9cb7542e 100644 --- a/project.py +++ b/project.py @@ -2347,10 +2347,11 @@ class Project(object): if copy_all: to_copy = os.listdir(gitdir) + dotgit = os.path.realpath(dotgit) for name in set(to_copy).union(to_symlink): try: src = os.path.realpath(os.path.join(gitdir, name)) - dst = os.path.realpath(os.path.join(dotgit, name)) + dst = os.path.join(dotgit, name) if os.path.lexists(dst): continue