diff options
author | Richard Maw <richard.maw@codethink.co.uk> | 2015-05-06 11:23:30 +0000 |
---|---|---|
committer | Richard Maw <richard.maw@codethink.co.uk> | 2015-05-06 14:00:26 +0000 |
commit | 49c75289090767256b06a20ded55ad58bd9932d6 (patch) | |
tree | d252b09c4bcb10a70b7245aba2b282c904bd72e9 | |
parent | 9c8852879b80d867a4c52179c5c0b7ddb32f0446 (diff) | |
download | morph-49c75289090767256b06a20ded55ad58bd9932d6.tar.gz |
LRC: Make get_updated_repo handle multiple refs
Passing a single ref is still accepted, but if you have multiple refs
you need to check from the same repository, it is more appropriate to do
it in one call to get_updated_repo, as otherwise there will be
unnecessary output about it not needing to be updated in multiple
places.
-rw-r--r-- | morphlib/localrepocache.py | 45 |
1 files changed, 28 insertions, 17 deletions
diff --git a/morphlib/localrepocache.py b/morphlib/localrepocache.py index 53f3d5a4..db72eaf1 100644 --- a/morphlib/localrepocache.py +++ b/morphlib/localrepocache.py @@ -23,6 +23,7 @@ import cliapp import fs.osfs import morphlib +from morphlib.util import word_join_list as _word_join_list # urlparse.urljoin needs to know details of the URL scheme being used. @@ -242,14 +243,13 @@ class LocalRepoCache(object): return repo raise NotCached(reponame) - def get_updated_repo(self, repo_name, ref=None): # pragma: no cover + def get_updated_repo(self, repo_name, + ref=None, refs=None): # pragma: no cover '''Return object representing cached repository. - If 'ref' is None, the repo will be updated unless - app.settings['no-git-update'] is set. - - If 'ref' is set to a SHA1, the repo will only be updated if 'ref' isn't - already available locally. + If all the specified refs in 'ref' or 'refs' point to SHA1s that are + already in the repository, or --no-git-update is set, then the + repository won't be updated. ''' @@ -261,19 +261,30 @@ class LocalRepoCache(object): repo_name=repo_name) return self.get_repo(repo_name) + if ref is not None and refs is None: + refs = (ref,) + if self.has_repo(repo_name): repo = self.get_repo(repo_name) - if ref and morphlib.git.is_valid_sha1(ref): - try: - repo.resolve_ref_to_commit(ref) - self._app.status(msg='Not updating git repository ' - '%(repo_name)s because it ' - 'already contains sha1 %(sha1)s', - chatty=True, repo_name=repo_name, - sha1=ref) - return repo - except morphlib.gitdir.InvalidRefError: - pass + if refs: + required_refs = set(refs) + missing_refs = set() + for required_ref in required_refs: + if morphlib.git.is_valid_sha1(required_ref): + try: + repo.resolve_ref_to_commit(required_ref) + continue + except morphlib.gitdir.InvalidRefError: + pass + missing_refs.add(required_ref) + + if not missing_refs: + self._app.status(msg='Not updating git repository ' + '%(repo_name)s because it already ' + 'contains %(sha1s)s', + chatty=True, repo_name=repo_name, + sha1s=_word_join_list(tuple(required_refs))) + return repo self._app.status(msg='Updating %(repo_name)s', repo_name=repo_name) |