diff --git a/docs/manifest-format.txt b/docs/manifest-format.txt index 0bf09f6f..f4629a55 100644 --- a/docs/manifest-format.txt +++ b/docs/manifest-format.txt @@ -56,6 +56,7 @@ following DTD: + @@ -222,6 +223,10 @@ Attribute `upstream`: Name of the Git branch in which a sha1 can be found. Used when syncing a revision locked manifest in -c mode to avoid having to sync the entire ref space. +Attribute `clone-depth`: Set the depth to use when fetching this +project. If specified, this value will override any value given +to repo init with the --depth option on the command line. + Element annotation ------------------ diff --git a/manifest_xml.py b/manifest_xml.py index 92ef7859..4eef748f 100644 --- a/manifest_xml.py +++ b/manifest_xml.py @@ -665,6 +665,16 @@ class XmlManifest(object): else: sync_s = sync_s.lower() in ("yes", "true", "1") + clone_depth = node.getAttribute('clone-depth') + if clone_depth: + try: + clone_depth = int(clone_depth) + if clone_depth <= 0: + raise ValueError() + except ValueError: + raise ManifestParseError('invalid clone-depth %s in %s' % + (clone_depth, self.manifestFile)) + upstream = node.getAttribute('upstream') groups = '' @@ -692,6 +702,7 @@ class XmlManifest(object): groups = groups, sync_c = sync_c, sync_s = sync_s, + clone_depth = clone_depth, upstream = upstream, parent = parent) diff --git a/project.py b/project.py index 901a2831..20bf866c 100644 --- a/project.py +++ b/project.py @@ -488,6 +488,7 @@ class Project(object): groups = None, sync_c = False, sync_s = False, + clone_depth = None, upstream = None, parent = None, is_derived = False): @@ -533,6 +534,7 @@ class Project(object): self.groups = groups self.sync_c = sync_c self.sync_s = sync_s + self.clone_depth = clone_depth self.upstream = upstream self.parent = parent self.is_derived = is_derived @@ -1645,7 +1647,10 @@ class Project(object): # The --depth option only affects the initial fetch; after that we'll do # full fetches of changes. - depth = self.manifest.manifestProject.config.GetString('repo.depth') + if self.clone_depth: + depth = self.clone_depth + else: + depth = self.manifest.manifestProject.config.GetString('repo.depth') if depth and initial: cmd.append('--depth=%s' % depth) @@ -1705,7 +1710,7 @@ class Project(object): return ok def _ApplyCloneBundle(self, initial=False, quiet=False): - if initial and self.manifest.manifestProject.config.GetString('repo.depth'): + if initial and (self.manifest.manifestProject.config.GetString('repo.depth') or self.clone_depth): return False remote = self.GetRemote(self.remote.name)