summaryrefslogtreecommitdiff
path: root/src/buildstream/_gitsourcebase.py
diff options
context:
space:
mode:
authorTom Mewett <tom.mewett@codethink.co.uk>2020-01-08 13:11:48 +0000
committerTom Mewett <tom@collider.in>2020-01-24 14:32:59 +0000
commit2a49e0827d427850de26d5a4bb0d78d5bb1d1acc (patch)
tree9146d871c9e1e84b6563a427b4ad2e2b2a17c59c /src/buildstream/_gitsourcebase.py
parentb9f61a963e84d9594aecdfd5240b104c459ca72b (diff)
downloadbuildstream-2a49e0827d427850de26d5a4bb0d78d5bb1d1acc.tar.gz
_gitsourcebase.py: Strip git-describe tag info from cache key
The beginning parts of git-describe labels are completely arbitrary. They can be changed either manually or by a track (e.g. if a tag is moved, added or deleted) even if the referenced commit is the same. Hence, only the commit ID part of the label should factor into the cache key. This commit, of course, breaks cache keys for artifacts built with the 'git' source with git-describe refs.
Diffstat (limited to 'src/buildstream/_gitsourcebase.py')
-rw-r--r--src/buildstream/_gitsourcebase.py11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/buildstream/_gitsourcebase.py b/src/buildstream/_gitsourcebase.py
index b9b6952e1..165bd7e2f 100644
--- a/src/buildstream/_gitsourcebase.py
+++ b/src/buildstream/_gitsourcebase.py
@@ -49,6 +49,10 @@ class _RefFormat(FastEnum):
GIT_DESCRIBE = "git-describe"
+def _strip_tag(rev):
+ return rev.split("-g")[-1]
+
+
# This class represents a single Git repository. The Git source needs to account for
# submodules, but we don't want to cache them all under the umbrella of the
# superproject - so we use this class which caches them independently, according
@@ -537,10 +541,15 @@ class _GitSourceBase(Source):
self.host_git_version = None
def get_unique_key(self):
+ ref = self.mirror.ref
+ if ref is not None:
+ # Strip any (arbitary) tag information, leaving just the commit ID
+ ref = _strip_tag(ref)
+
# Here we want to encode the local name of the repository and
# the ref, if the user changes the alias to fetch the same sources
# from another location, it should not affect the cache key.
- key = [self.original_url, self.mirror.ref]
+ key = [self.original_url, ref]
if self.mirror.tags:
tags = {tag: (commit, annotated) for tag, commit, annotated in self.mirror.tags}
key.append({"tags": tags})