project: clean up now unused code

Now that we symlink worktree .git/ paths to .repo/projects/, we never
set share_refs=True anywhere, which means all of this logic is dead
code.  Throw it all away.  Do it as a separate commit to make the
parent commit easier to review.

Bug: https://crbug.com/gerrit/15273
Change-Id: If496d39029d3d3bd523ba24c603ce47a63ad9b51
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/326817
Tested-by: Mike Frysinger <vapier@google.com>
Reviewed-by: Jack Neus <jackneus@google.com>
This commit is contained in:
Mike Frysinger 2021-11-14 03:58:00 -05:00
parent d53cb9549a
commit c72bd8486a

View File

@ -459,9 +459,6 @@ class Project(object):
# These objects can be shared between several working trees. # These objects can be shared between several working trees.
shareable_files = ['description', 'info'] shareable_files = ['description', 'info']
shareable_dirs = ['hooks', 'objects', 'rr-cache', 'svn'] shareable_dirs = ['hooks', 'objects', 'rr-cache', 'svn']
# These objects can only be used by a single working tree.
working_tree_files = ['config', 'packed-refs', 'shallow']
working_tree_dirs = ['logs', 'refs']
def __init__(self, def __init__(self,
manifest, manifest,
@ -2483,10 +2480,9 @@ class Project(object):
os.makedirs(self.gitdir) os.makedirs(self.gitdir)
if init_obj_dir or init_git_dir: if init_obj_dir or init_git_dir:
self._ReferenceGitDir(self.objdir, self.gitdir, share_refs=False, self._ReferenceGitDir(self.objdir, self.gitdir, copy_all=True)
copy_all=True)
try: try:
self._CheckDirReference(self.objdir, self.gitdir, share_refs=False) self._CheckDirReference(self.objdir, self.gitdir)
except GitError as e: except GitError as e:
if force_sync: if force_sync:
print("Retrying clone after deleting %s" % print("Retrying clone after deleting %s" %
@ -2650,40 +2646,19 @@ class Project(object):
else: else:
active_git.symbolic_ref('-m', msg, ref, dst) active_git.symbolic_ref('-m', msg, ref, dst)
def _CheckDirReference(self, srcdir, destdir, share_refs): def _CheckDirReference(self, srcdir, destdir):
# Git worktrees don't use symlinks to share at all. # Git worktrees don't use symlinks to share at all.
if self.use_git_worktrees: if self.use_git_worktrees:
return return
symlink_files = self.shareable_files[:] symlink_files = self.shareable_files[:]
symlink_dirs = self.shareable_dirs[:] symlink_dirs = self.shareable_dirs[:]
if share_refs:
symlink_files += self.working_tree_files
symlink_dirs += self.working_tree_dirs
to_symlink = symlink_files + symlink_dirs to_symlink = symlink_files + symlink_dirs
for name in set(to_symlink): for name in set(to_symlink):
# Try to self-heal a bit in simple cases. # Try to self-heal a bit in simple cases.
dst_path = os.path.join(destdir, name) dst_path = os.path.join(destdir, name)
src_path = os.path.join(srcdir, name) src_path = os.path.join(srcdir, name)
if name in self.working_tree_dirs:
# If the dir is missing under .repo/projects/, create it.
if not os.path.exists(src_path):
os.makedirs(src_path)
elif name in self.working_tree_files:
# If it's a file under the checkout .git/ and the .repo/projects/ has
# nothing, move the file under the .repo/projects/ tree.
if not os.path.exists(src_path) and os.path.isfile(dst_path):
platform_utils.rename(dst_path, src_path)
# If the path exists under the .repo/projects/ and there's no symlink
# under the checkout .git/, recreate the symlink.
if name in self.working_tree_dirs or name in self.working_tree_files:
if os.path.exists(src_path) and not os.path.exists(dst_path):
platform_utils.symlink(
os.path.relpath(src_path, os.path.dirname(dst_path)), dst_path)
dst = platform_utils.realpath(dst_path) dst = platform_utils.realpath(dst_path)
if os.path.lexists(dst): if os.path.lexists(dst):
src = platform_utils.realpath(src_path) src = platform_utils.realpath(src_path)
@ -2696,22 +2671,17 @@ class Project(object):
' use `repo sync --force-sync {0}` to ' ' use `repo sync --force-sync {0}` to '
'proceed.'.format(self.relpath)) 'proceed.'.format(self.relpath))
def _ReferenceGitDir(self, gitdir, dotgit, share_refs, copy_all): def _ReferenceGitDir(self, gitdir, dotgit, copy_all):
"""Update |dotgit| to reference |gitdir|, using symlinks where possible. """Update |dotgit| to reference |gitdir|, using symlinks where possible.
Args: Args:
gitdir: The bare git repository. Must already be initialized. gitdir: The bare git repository. Must already be initialized.
dotgit: The repository you would like to initialize. dotgit: The repository you would like to initialize.
share_refs: If true, |dotgit| will store its refs under |gitdir|.
Only one work tree can store refs under a given |gitdir|.
copy_all: If true, copy all remaining files from |gitdir| -> |dotgit|. copy_all: If true, copy all remaining files from |gitdir| -> |dotgit|.
This saves you the effort of initializing |dotgit| yourself. This saves you the effort of initializing |dotgit| yourself.
""" """
symlink_files = self.shareable_files[:] symlink_files = self.shareable_files[:]
symlink_dirs = self.shareable_dirs[:] symlink_dirs = self.shareable_dirs[:]
if share_refs:
symlink_files += self.working_tree_files
symlink_dirs += self.working_tree_dirs
to_symlink = symlink_files + symlink_dirs to_symlink = symlink_files + symlink_dirs
to_copy = [] to_copy = []