diff options
Diffstat (limited to 'project.py')
| -rw-r--r-- | project.py | 27 |
1 files changed, 27 insertions, 0 deletions
| @@ -3415,6 +3415,11 @@ class Project: | |||
| 3415 | """ | 3415 | """ |
| 3416 | dotgit = os.path.join(self.worktree, ".git") | 3416 | dotgit = os.path.join(self.worktree, ".git") |
| 3417 | 3417 | ||
| 3418 | # If bare checkout of the submodule is stored under the subproject dir, | ||
| 3419 | # migrate it. | ||
| 3420 | if self.parent: | ||
| 3421 | self._MigrateOldSubmoduleDir() | ||
| 3422 | |||
| 3418 | # If using an old layout style (a directory), migrate it. | 3423 | # If using an old layout style (a directory), migrate it. |
| 3419 | if not platform_utils.islink(dotgit) and platform_utils.isdir(dotgit): | 3424 | if not platform_utils.islink(dotgit) and platform_utils.isdir(dotgit): |
| 3420 | self._MigrateOldWorkTreeGitDir(dotgit, project=self.name) | 3425 | self._MigrateOldWorkTreeGitDir(dotgit, project=self.name) |
| @@ -3548,6 +3553,28 @@ class Project: | |||
| 3548 | dotgit, | 3553 | dotgit, |
| 3549 | ) | 3554 | ) |
| 3550 | 3555 | ||
| 3556 | def _MigrateOldSubmoduleDir(self): | ||
| 3557 | """Move the old bare checkout in 'subprojects' to 'modules' | ||
| 3558 | as bare checkouts of submodules are now in 'modules' dir. | ||
| 3559 | """ | ||
| 3560 | subprojects = os.path.join(self.parent.gitdir, "subprojects") | ||
| 3561 | if not platform_utils.isdir(subprojects): | ||
| 3562 | return | ||
| 3563 | |||
| 3564 | modules = os.path.join(self.parent.gitdir, "modules") | ||
| 3565 | old = self.gitdir | ||
| 3566 | new = os.path.splitext(self.gitdir.replace(subprojects, modules))[0] | ||
| 3567 | |||
| 3568 | if all(map(platform_utils.isdir, [old, new])): | ||
| 3569 | platform_utils.rmtree(old, ignore_errors=True) | ||
| 3570 | else: | ||
| 3571 | os.makedirs(modules, exist_ok=True) | ||
| 3572 | platform_utils.rename(old, new) | ||
| 3573 | self.gitdir = new | ||
| 3574 | self.UpdatePaths(self.relpath, self.worktree, self.gitdir, self.objdir) | ||
| 3575 | if platform_utils.isdir(subprojects) and not os.listdir(subprojects): | ||
| 3576 | platform_utils.rmtree(subprojects, ignore_errors=True) | ||
| 3577 | |||
| 3551 | def _get_symlink_error_message(self): | 3578 | def _get_symlink_error_message(self): |
| 3552 | if platform_utils.isWindows(): | 3579 | if platform_utils.isWindows(): |
| 3553 | return ( | 3580 | return ( |
