GitInput: Include deepClone option in the cache key

Without this commit, two jobsets using the same repository as input,
but different `deepClone` options, end up incorrectly sharing the same
"checkout" for a given (`uri`, `branch`, `revision`) tuple.  The
presence or absence of `.git` is determined by the jobset execution
order.

This patch adds the missing `isDeepClone` boolean to the cache key.

The database upgrade script empties the `CachedGitInputs` table, as we
don't know if existing checkouts are deep clones.  Unfortunately, this
generally forces rebuilds even for correct `deepClone` checkouts, as
the binary contents of `.git` are not deterministic.

Fixes #510
This commit is contained in:
Damien Diederen
2021-06-15 10:31:42 +02:00
parent b6921c2006
commit df7dab1291
4 changed files with 28 additions and 5 deletions

12
src/sql/upgrade-76.sql Normal file
View File

@@ -0,0 +1,12 @@
-- We don't know if existing checkouts are deep clones. This will
-- force a new fetch (and most likely trigger a new build for deep
-- clones, as the binary contents of '.git' are not deterministic).
DELETE FROM CachedGitInputs;
ALTER TABLE CachedGitInputs
ADD COLUMN isDeepClone BOOLEAN NOT NULL;
ALTER TABLE CachedGitInputs DROP CONSTRAINT cachedgitinputs_pkey;
ALTER TABLE CachedGitInputs ADD CONSTRAINT cachedgitinputs_pkey
PRIMARY KEY (uri, branch, revision, isDeepClone);