diff options
| -rw-r--r-- | manifest_xml.py | 9 | ||||
| -rw-r--r-- | project.py | 16 |
2 files changed, 21 insertions, 4 deletions
diff --git a/manifest_xml.py b/manifest_xml.py index 3c43295e..db7a9286 100644 --- a/manifest_xml.py +++ b/manifest_xml.py | |||
| @@ -768,8 +768,11 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md | |||
| 768 | 768 | ||
| 769 | @property | 769 | @property |
| 770 | def is_multimanifest(self): | 770 | def is_multimanifest(self): |
| 771 | """Whether this is a multimanifest checkout""" | 771 | """Whether this is a multimanifest checkout. |
| 772 | return bool(self.outer_client.submanifests) | 772 | |
| 773 | This is safe to use as long as the outermost manifest XML has been parsed. | ||
| 774 | """ | ||
| 775 | return bool(self._outer_client._submanifests) | ||
| 773 | 776 | ||
| 774 | @property | 777 | @property |
| 775 | def is_submanifest(self): | 778 | def is_submanifest(self): |
| @@ -1679,7 +1682,7 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md | |||
| 1679 | # We allow people to mix git worktrees & non-git worktrees for now. | 1682 | # We allow people to mix git worktrees & non-git worktrees for now. |
| 1680 | # This allows for in situ migration of repo clients. | 1683 | # This allows for in situ migration of repo clients. |
| 1681 | if os.path.exists(gitdir) or not self.UseGitWorktrees: | 1684 | if os.path.exists(gitdir) or not self.UseGitWorktrees: |
| 1682 | objdir = os.path.join(self.subdir, 'project-objects', namepath) | 1685 | objdir = os.path.join(self.repodir, 'project-objects', namepath) |
| 1683 | else: | 1686 | else: |
| 1684 | use_git_worktrees = True | 1687 | use_git_worktrees = True |
| 1685 | gitdir = os.path.join(self.repodir, 'worktrees', namepath) | 1688 | gitdir = os.path.join(self.repodir, 'worktrees', namepath) |
| @@ -49,6 +49,9 @@ MAXIMUM_RETRY_SLEEP_SEC = 3600.0 | |||
| 49 | # +-10% random jitter is added to each Fetches retry sleep duration. | 49 | # +-10% random jitter is added to each Fetches retry sleep duration. |
| 50 | RETRY_JITTER_PERCENT = 0.1 | 50 | RETRY_JITTER_PERCENT = 0.1 |
| 51 | 51 | ||
| 52 | # Whether to use alternates. | ||
| 53 | # TODO(vapier): Remove knob once behavior is verified. | ||
| 54 | _ALTERNATES = os.environ.get('REPO_USE_ALTERNATES') == '1' | ||
| 52 | 55 | ||
| 53 | def _lwrite(path, content): | 56 | def _lwrite(path, content): |
| 54 | lock = '%s.lock' % path | 57 | lock = '%s.lock' % path |
| @@ -460,7 +463,7 @@ class RemoteSpec(object): | |||
| 460 | 463 | ||
| 461 | class Project(object): | 464 | class Project(object): |
| 462 | # These objects can be shared between several working trees. | 465 | # These objects can be shared between several working trees. |
| 463 | shareable_dirs = ['hooks', 'objects', 'rr-cache'] | 466 | shareable_dirs = ['hooks', 'rr-cache'] |
| 464 | 467 | ||
| 465 | def __init__(self, | 468 | def __init__(self, |
| 466 | manifest, | 469 | manifest, |
| @@ -1143,6 +1146,17 @@ class Project(object): | |||
| 1143 | self._UpdateHooks(quiet=quiet) | 1146 | self._UpdateHooks(quiet=quiet) |
| 1144 | self._InitRemote() | 1147 | self._InitRemote() |
| 1145 | 1148 | ||
| 1149 | if _ALTERNATES or self.manifest.is_multimanifest: | ||
| 1150 | # If gitdir/objects is a symlink, migrate it from the old layout. | ||
| 1151 | gitdir_objects = os.path.join(self.gitdir, 'objects') | ||
| 1152 | if platform_utils.islink(gitdir_objects): | ||
| 1153 | platform_utils.remove(gitdir_objects, missing_ok=True) | ||
| 1154 | gitdir_alt = os.path.join(self.gitdir, 'objects/info/alternates') | ||
| 1155 | if not os.path.exists(gitdir_alt): | ||
| 1156 | os.makedirs(os.path.dirname(gitdir_alt), exist_ok=True) | ||
| 1157 | _lwrite(gitdir_alt, os.path.join( | ||
| 1158 | os.path.relpath(self.objdir, gitdir_objects), 'objects') + '\n') | ||
| 1159 | |||
| 1146 | if is_new: | 1160 | if is_new: |
| 1147 | alt = os.path.join(self.objdir, 'objects/info/alternates') | 1161 | alt = os.path.join(self.objdir, 'objects/info/alternates') |
| 1148 | try: | 1162 | try: |
