diff options
author | Christoph Weiss <weiss@wsoptics.de> | 2019-09-18 08:45:46 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2019-09-29 20:47:59 +0300 |
commit | 0008b326ffc39c86be2ae4352bdddc03f01840cc (patch) | |
tree | b6dd4664e33d74da8cbe27c86ddc27feebf56e96 | |
parent | a65d5801f363f70c01bc76c562d9b9e820dc52aa (diff) | |
download | meson-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.md | 8 | ||||
-rw-r--r-- | docs/markdown/snippets/depth.md | 7 | ||||
-rw-r--r-- | mesonbuild/wrap/wrap.py | 19 |
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: |