aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Weiss <weiss@wsoptics.de>2019-09-18 08:45:46 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2019-09-29 20:47:59 +0300
commit0008b326ffc39c86be2ae4352bdddc03f01840cc (patch)
treeb6dd4664e33d74da8cbe27c86ddc27feebf56e96
parenta65d5801f363f70c01bc76c562d9b9e820dc52aa (diff)
downloadmeson-0008b326ffc39c86be2ae4352bdddc03f01840cc.zip
meson-0008b326ffc39c86be2ae4352bdddc03f01840cc.tar.gz
meson-0008b326ffc39c86be2ae4352bdddc03f01840cc.tar.bz2
Add support for `depth` option in wrap-git
This allows cloning subprojects shallowly. It works recursively for a subproject's submodules in case `clone-recursive` is set to `true`.
-rw-r--r--docs/markdown/Wrap-dependency-system-manual.md8
-rw-r--r--docs/markdown/snippets/depth.md7
-rw-r--r--mesonbuild/wrap/wrap.py19
3 files changed, 27 insertions, 7 deletions
diff --git a/docs/markdown/Wrap-dependency-system-manual.md b/docs/markdown/Wrap-dependency-system-manual.md
index 619492a..22ba589 100644
--- a/docs/markdown/Wrap-dependency-system-manual.md
+++ b/docs/markdown/Wrap-dependency-system-manual.md
@@ -143,6 +143,14 @@ automatically by adding the following *(since 0.48.0)*:
clone-recursive = true
```
+Setting the clone depth is supported using the `depth` directive *(since 0.52.0)*.
+Note that git always allow shallowly cloning branches, but in order to clone commit ids
+shallowly, the server must support `uploadpack.allowReachableSHA1InWant=true`.
+
+```ini
+depth = 1
+```
+
## Using wrapped projects
Wraps provide a convenient way of obtaining a project into your subproject directory.
diff --git a/docs/markdown/snippets/depth.md b/docs/markdown/snippets/depth.md
new file mode 100644
index 0000000..bdb032c
--- /dev/null
+++ b/docs/markdown/snippets/depth.md
@@ -0,0 +1,7 @@
+## Add `depth` option to `wrap-git`
+
+To allow shallow cloning, an option `depth` has been added to `wrap-git`.
+This applies recursively to submodules when `clone-recursive` is set to `true`.
+
+Note that the git server may have to be configured to support shallow cloning
+not only for branches but also for tags.
diff --git a/mesonbuild/wrap/wrap.py b/mesonbuild/wrap/wrap.py
index 4b2a323..89bc307 100644
--- a/mesonbuild/wrap/wrap.py
+++ b/mesonbuild/wrap/wrap.py
@@ -226,16 +226,21 @@ class Resolver:
self.apply_patch()
def get_git(self):
+ # git doesn't support directly cloning shallowly for commits,
+ # so we follow https://stackoverflow.com/a/43136160
+ subprocess.check_call(['git', 'init', self.directory], cwd=self.subdir_root)
+ subprocess.check_call(['git', 'remote', 'add', 'origin', self.wrap.get('url')],
+ cwd=self.dirname)
+ git_options = []
revno = self.wrap.get('revision')
- subprocess.check_call(['git', 'clone', self.wrap.get('url'),
- self.directory], cwd=self.subdir_root)
- if revno.lower() != 'head':
- if subprocess.call(['git', 'checkout', revno], cwd=self.dirname) != 0:
- subprocess.check_call(['git', 'fetch', self.wrap.get('url'), revno], cwd=self.dirname)
- subprocess.check_call(['git', 'checkout', revno], cwd=self.dirname)
+ if self.wrap.values.get('depth', '') != '':
+ git_options.extend(['--depth', self.wrap.values.get('depth')])
+ subprocess.check_call(['git', 'fetch'] + git_options + ['origin', revno],
+ cwd=self.dirname)
+ subprocess.check_call(['git', 'checkout', revno], cwd=self.dirname)
if self.wrap.values.get('clone-recursive', '').lower() == 'true':
subprocess.check_call(['git', 'submodule', 'update',
- '--init', '--checkout', '--recursive'],
+ '--init', '--checkout', '--recursive'] + git_options,
cwd=self.dirname)
push_url = self.wrap.values.get('push-url')
if push_url: