From ede7f12d4a0f7362aaccd2c825a83765b9b9d968 Mon Sep 17 00:00:00 2001 From: David Pursehouse Date: Tue, 27 Nov 2012 22:25:30 +0900 Subject: [PATCH] Allow clone depth to be specified per project If the clone-depth attribute is set on a project, its value will be used to set the depth when fetching the git. The value, if given, must be a positive integer. The value in the clone-depth attribute overrides any value given to repo init via the --depth command line option. Change-Id: I273015b3724213600b63e40cca4cafaa9f782ddf --- docs/manifest-format.txt | 5 +++++ manifest_xml.py | 11 +++++++++++ project.py | 9 +++++++-- 3 files changed, 23 insertions(+), 2 deletions(-) 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)