From 0b002c2911845005c9c5f181f1cd5d77b8db1ec0 Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Fri, 21 Apr 2017 22:59:30 -0600 Subject: fetch git submodules recursively (#3779) * fetch git submodules recursively This is useful if the submodules have submodules themselves. On the other hand doing a recursive update doesn't hurt if there is only one level. * fetch submodules with depth=1 as well (fix #2190) * use git submodule with depth only for git>=1.8.4 --- lib/spack/docs/packaging_guide.rst | 5 +++-- lib/spack/spack/fetch_strategy.py | 16 +++++++++++++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/spack/docs/packaging_guide.rst b/lib/spack/docs/packaging_guide.rst index 0e8ddfa68f..6f4a3ecf1a 100644 --- a/lib/spack/docs/packaging_guide.rst +++ b/lib/spack/docs/packaging_guide.rst @@ -854,7 +854,7 @@ Git fetching is enabled with the following parameters to ``version``: * ``tag``: name of a tag to fetch. * ``branch``: name of a branch to fetch. * ``commit``: SHA hash (or prefix) of a commit to fetch. -* ``submodules``: Also fetch submodules when checking out this repository. +* ``submodules``: Also fetch submodules recursively when checking out this repository. Only one of ``tag``, ``branch``, or ``commit`` can be used at a time. @@ -917,7 +917,8 @@ Commits Submodules You can supply ``submodules=True`` to cause Spack to fetch submodules - along with the repository at fetch time. + recursively along with the repository at fetch time. For more information + about git submodules see the manpage of git: ``man git-submodule``. .. code-block:: python diff --git a/lib/spack/spack/fetch_strategy.py b/lib/spack/spack/fetch_strategy.py index 7cafeb296d..c694610856 100644 --- a/lib/spack/spack/fetch_strategy.py +++ b/lib/spack/spack/fetch_strategy.py @@ -686,10 +686,20 @@ class GitFetchStrategy(VCSFetchStrategy): # Init submodules if the user asked for them. if self.submodules: - if spack.debug: - self.git('submodule', 'update', '--init') + # only git 1.8.4 and later have --depth option + if self.git_version < ver('1.8.4'): + if spack.debug: + self.git('submodule', 'update', '--init', '--recursive') + else: + self.git('submodule', '--quiet', 'update', '--init', + '--recursive') else: - self.git('submodule', '--quiet', 'update', '--init') + if spack.debug: + self.git('submodule', 'update', '--init', '--recursive', + '--depth=1') + else: + self.git('submodule', '--quiet', 'update', '--init', + '--recursive', '--depth=1') def archive(self, destination): super(GitFetchStrategy, self).archive(destination, exclude='.git') -- cgit v1.2.3-70-g09d2