mirror of
https://gerrit.googlesource.com/git-repo
synced 2025-06-26 20:17:52 +00:00
Update internal filesystem layout for submodules
Change the bare checkout directory for submodules from 'subprojects' to 'modules'. Git expects bare submodule checkouts to be in the 'modules' directory. If old subproject directories are found, they will be migrated to the new modules directory. This change is the first step in ensuring Git can understand repo's submodules to some extent. Change-Id: I385029f1bb55d040616d970d6ffb4bb856692520 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/444881 Tested-by: Kaushik Lingarkar <kaushikl@qti.qualcomm.com> Reviewed-by: Josip Sokcevic <sokcevic@chromium.org>
This commit is contained in:
27
project.py
27
project.py
@ -3415,6 +3415,11 @@ class Project:
|
||||
"""
|
||||
dotgit = os.path.join(self.worktree, ".git")
|
||||
|
||||
# If bare checkout of the submodule is stored under the subproject dir,
|
||||
# migrate it.
|
||||
if self.parent:
|
||||
self._MigrateOldSubmoduleDir()
|
||||
|
||||
# If using an old layout style (a directory), migrate it.
|
||||
if not platform_utils.islink(dotgit) and platform_utils.isdir(dotgit):
|
||||
self._MigrateOldWorkTreeGitDir(dotgit, project=self.name)
|
||||
@ -3548,6 +3553,28 @@ class Project:
|
||||
dotgit,
|
||||
)
|
||||
|
||||
def _MigrateOldSubmoduleDir(self):
|
||||
"""Move the old bare checkout in 'subprojects' to 'modules'
|
||||
as bare checkouts of submodules are now in 'modules' dir.
|
||||
"""
|
||||
subprojects = os.path.join(self.parent.gitdir, "subprojects")
|
||||
if not platform_utils.isdir(subprojects):
|
||||
return
|
||||
|
||||
modules = os.path.join(self.parent.gitdir, "modules")
|
||||
old = self.gitdir
|
||||
new = os.path.splitext(self.gitdir.replace(subprojects, modules))[0]
|
||||
|
||||
if all(map(platform_utils.isdir, [old, new])):
|
||||
platform_utils.rmtree(old, ignore_errors=True)
|
||||
else:
|
||||
os.makedirs(modules, exist_ok=True)
|
||||
platform_utils.rename(old, new)
|
||||
self.gitdir = new
|
||||
self.UpdatePaths(self.relpath, self.worktree, self.gitdir, self.objdir)
|
||||
if platform_utils.isdir(subprojects) and not os.listdir(subprojects):
|
||||
platform_utils.rmtree(subprojects, ignore_errors=True)
|
||||
|
||||
def _get_symlink_error_message(self):
|
||||
if platform_utils.isWindows():
|
||||
return (
|
||||
|
Reference in New Issue
Block a user