Merge pull request #1217 from LLNL/features/git-submodule-init

Add `submodules` option for git fetching.
This commit is contained in:
Todd Gamblin 2016-07-11 14:17:41 -07:00 committed by GitHub
commit 78ac11ff88
2 changed files with 19 additions and 2 deletions

View File

@ -604,6 +604,7 @@ Git fetching is enabled with the following parameters to ``version``:
* ``tag``: name of a tag to fetch. * ``tag``: name of a tag to fetch.
* ``branch``: name of a branch to fetch. * ``branch``: name of a branch to fetch.
* ``commit``: SHA hash (or prefix) of a commit to fetch. * ``commit``: SHA hash (or prefix) of a commit to fetch.
* ``submodules``: Also fetch submodules when checking out this repository.
Only one of ``tag``, ``branch``, or ``commit`` can be used at a time. Only one of ``tag``, ``branch``, or ``commit`` can be used at a time.
@ -660,6 +661,17 @@ Commits
could just use the abbreviated commit hash. It's up to the package could just use the abbreviated commit hash. It's up to the package
author to decide what makes the most sense. author to decide what makes the most sense.
Submodules
You can supply ``submodules=True`` to cause Spack to fetch submodules
along with the repository at fetch time.
.. code-block:: python
version('1.0.1', git='https://github.com/example-project/example.git',
tag='v1.0.1', submdoules=True)
Installing Installing
^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^

View File

@ -366,8 +366,8 @@ def fetch(self):
try: try:
self.check() self.check()
except ChecksumError: except ChecksumError:
# Future fetchers will assume they don't need to download if the # Future fetchers will assume they don't need to
# file remains # download if the file remains
os.remove(self.archive_file) os.remove(self.archive_file)
raise raise
@ -517,6 +517,7 @@ def __init__(self, **kwargs):
super(GitFetchStrategy, self).__init__( super(GitFetchStrategy, self).__init__(
'git', 'tag', 'branch', 'commit', **forwarded_args) 'git', 'tag', 'branch', 'commit', **forwarded_args)
self._git = None self._git = None
self.submodules = kwargs.get('submodules', False)
@property @property
def git_version(self): def git_version(self):
@ -595,6 +596,10 @@ def fetch(self):
self.git('pull', '--tags', ignore_errors=1) self.git('pull', '--tags', ignore_errors=1)
self.git('checkout', self.tag) self.git('checkout', self.tag)
# Init submodules if the user asked for them.
if self.submodules:
self.git('submodule', 'update', '--init')
def archive(self, destination): def archive(self, destination):
super(GitFetchStrategy, self).archive(destination, exclude='.git') super(GitFetchStrategy, self).archive(destination, exclude='.git')