From b750b48f50eb4a11087ca6775161d5bf4d5c47d5 Mon Sep 17 00:00:00 2001 From: LaMont Jones Date: Thu, 18 Aug 2022 07:20:57 -0400 Subject: [PATCH] init: add --manifest-depth for shallow manifest clone People rarely care about the history of the manifest repo. Add a parameter to specify depth for the manifest. For now, make the default behavior the same as the current behavior. At a future date, the default will be changed to 1. People who need the full history should begin passing --manifest-depth=0 to preserve the behavior when the default changes. We can't reuse the existing --depth option because that applies to all projects we clone, not just the manifest repo. Bug: https://crbug.com/gerrit/16193, https://crbug.com/gerrit/16358 Change-Id: I9130fed3eaed656435c778a85cfe9d04e3a4a6a0 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/349814 Tested-by: LaMont Jones Reviewed-by: Xin Li --- man/repo-gitc-init.1 | 6 +++++- man/repo-init.1 | 6 +++++- man/repo-manifest.1 | 12 ++++++++++-- repo | 4 ++++ subcmds/init.py | 4 ++++ 5 files changed, 28 insertions(+), 4 deletions(-) diff --git a/man/repo-gitc-init.1 b/man/repo-gitc-init.1 index 88136de6..02581c69 100644 --- a/man/repo-gitc-init.1 +++ b/man/repo-gitc-init.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man. -.TH REPO "1" "August 2022" "repo gitc-init" "Repo Manual" +.TH REPO "1" "October 2022" "repo gitc-init" "Repo Manual" .SH NAME repo \- repo gitc-init - manual page for repo gitc-init .SH SYNOPSIS @@ -45,6 +45,10 @@ sync any submodules associated with the manifest repo \fB\-\-standalone\-manifest\fR download the manifest as a static file rather then create a git checkout of the manifest repo +.TP +\fB\-\-manifest\-depth\fR=\fI\,DEPTH\/\fR +create a shallow clone of the manifest repo with given +depth (0 for full clone); see git clone (default: 0) .SS Manifest (only) checkout options: .TP \fB\-\-current\-branch\fR diff --git a/man/repo-init.1 b/man/repo-init.1 index 32b3ea1b..cf93de1f 100644 --- a/man/repo-init.1 +++ b/man/repo-init.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man. -.TH REPO "1" "August 2022" "repo init" "Repo Manual" +.TH REPO "1" "October 2022" "repo init" "Repo Manual" .SH NAME repo \- repo init - manual page for repo init .SH SYNOPSIS @@ -45,6 +45,10 @@ sync any submodules associated with the manifest repo \fB\-\-standalone\-manifest\fR download the manifest as a static file rather then create a git checkout of the manifest repo +.TP +\fB\-\-manifest\-depth\fR=\fI\,DEPTH\/\fR +create a shallow clone of the manifest repo with given +depth (0 for full clone); see git clone (default: 0) .SS Manifest (only) checkout options: .TP \fB\-c\fR, \fB\-\-current\-branch\fR diff --git a/man/repo-manifest.1 b/man/repo-manifest.1 index 382918ce..e49836ca 100644 --- a/man/repo-manifest.1 +++ b/man/repo-manifest.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man. -.TH REPO "1" "July 2022" "repo manifest" "Repo Manual" +.TH REPO "1" "October 2022" "repo manifest" "Repo Manual" .SH NAME repo \- repo manifest - manual page for repo manifest .SH SYNOPSIS @@ -190,6 +190,8 @@ CDATA #IMPLIED> + + .IP @@ -485,6 +487,12 @@ project. Same syntax as the corresponding element of `project`. Attribute `remote`: If specified, overrides the remote of the original project. Same syntax as the corresponding element of `project`. .PP +Attribute `dest\-branch`: If specified, overrides the dest\-branch of the original +project. Same syntax as the corresponding element of `project`. +.PP +Attribute `upstream`: If specified, overrides the upstream of the original +project. Same syntax as the corresponding element of `project`. +.PP Element annotation .PP Zero or more annotation elements may be specified as children of a project or @@ -600,7 +608,7 @@ included manifest belong. This appends and recurses, meaning all projects in included manifests carry all parent include groups. Same syntax as the corresponding element of `project`. .PP -Local Manifests +Local Manifests .PP Additional remotes and projects may be added through local manifest files stored in `$TOP_DIR/.repo/local_manifests/*.xml`. diff --git a/repo b/repo index 7491e3a1..2e99c7cc 100755 --- a/repo +++ b/repo @@ -316,6 +316,10 @@ def InitParser(parser, gitc_init=False): help='download the manifest as a static file ' 'rather then create a git checkout of ' 'the manifest repo') + group.add_option('--manifest-depth', type='int', default=0, metavar='DEPTH', + help='create a shallow clone of the manifest repo with ' + 'given depth (0 for full clone); see git clone ' + '(default: %default)') # Options that only affect manifest project, and not any of the projects # specified in the manifest itself. diff --git a/subcmds/init.py b/subcmds/init.py index cae0e342..0c979cd4 100644 --- a/subcmds/init.py +++ b/subcmds/init.py @@ -109,6 +109,10 @@ to update the working directory files. Args: opt: options from optparse. """ + # Normally this value is set when instantiating the project, but the + # manifest project is special and is created when instantiating the + # manifest which happens before we parse options. + self.manifest.manifestProject.clone_depth = opt.manifest_depth if not self.manifest.manifestProject.Sync( manifest_url=opt.manifest_url, manifest_branch=opt.manifest_branch,