diff options
author | Darius Makovsky <traveltissues@protonmail.com> | 2019-11-04 11:47:01 +0000 |
---|---|---|
committer | Darius Makovsky <traveltissues@protonmail.com> | 2019-11-04 14:07:38 +0000 |
commit | 1a1d4592d32d96604aa72bc169388a8f5e42238d (patch) | |
tree | 7c062bca73572e9baa2114145474dfc5f66a89e8 | |
parent | 861f9636a503f6dbd5acc132e2f8ba6743762216 (diff) | |
download | buildstream-traveltissues/splitdepkeys.tar.gz |
[WIP]Split dependencies into dependency-names and dependency-keystraveltissues/splitdepkeys
In Element._calculate_cache_key the dependency field of the cache key
dictionary is replaced with the dependency-names field and the
dependency-keys field. The first is only populated in the case where the
weak dependencies are passed and the second is only populated when the
strong dependencies are passed. Additionally, in the case where the
element holds at least one source advertising BST_NO_REF, the new fields
are both initialised to `[]` in order to correctly update dependencies.
Failing to reinitialise dependency fields in this case will lead to
erroneous dependencies from old states of BST_NO_REF sources.
29 files changed, 38 insertions, 33 deletions
diff --git a/src/buildstream/element.py b/src/buildstream/element.py index 0efb6b48c..6bb00d393 100644 --- a/src/buildstream/element.py +++ b/src/buildstream/element.py @@ -258,6 +258,7 @@ class Element(Plugin): self.__cached_remotely = None # Whether the element is cached remotely # List of Sources self.__sources = [] # type: List[Source] + self.__has_no_ref_source = False # at least one of the sources advertises BST_NO_REF = True self.__weak_cache_key = None # Our cached weak cache key self.__strict_cache_key = None # Our cached cache key for strict builds self.__artifacts = context.artifactcache # Artifact cache @@ -2167,6 +2168,8 @@ class Element(Plugin): self.__cache_key_dict['sources'] = [] for source in self.__sources: + if source.BST_NO_REF: + self.__has_no_ref_source = True self.__cache_key_dict['sources'].append( {'key': source._get_unique_key(), 'name': source._get_source_name()}) @@ -2174,13 +2177,15 @@ class Element(Plugin): self.__cache_key_dict['fatal-warnings'] = sorted(project._fatal_warnings) cache_key_dict = self.__cache_key_dict.copy() - cache_key_dict['dependency-keys-strong'] = [] - cache_key_dict['dependency-keys-weak'] = [] - if dep_strength == _KeyStrength.WEAK: - cache_key_dict['dependency-keys-weak'] = dependencies + if self.__has_no_ref_source: + cache_key_dict['dependency-names'] = [] + cache_key_dict['dependency-keys'] = [] + + if dep_strength == _KeyStrength.WEAK and not self.BST_STRICT_REBUILD: + cache_key_dict['dependency-names'] = dependencies else: - cache_key_dict['dependency-keys-strong'] = dependencies + cache_key_dict['dependency-keys'] = dependencies return _cachekey.generate_key(cache_key_dict) diff --git a/tests/cachekey/project/elements/build1.expected b/tests/cachekey/project/elements/build1.expected index 4044df2c9..75c153f89 100644 --- a/tests/cachekey/project/elements/build1.expected +++ b/tests/cachekey/project/elements/build1.expected @@ -1 +1 @@ -5428a5de8a9b26513aacc1f319723f601ea15ab9287ce1797cf8104029d22e8d
\ No newline at end of file +e4b9bbba1474716bb37f24f1a8ad83cef839143dd5528c43c5d090a5a21a5822
\ No newline at end of file diff --git a/tests/cachekey/project/elements/build2.expected b/tests/cachekey/project/elements/build2.expected index 85f8ffd44..c9be79514 100644 --- a/tests/cachekey/project/elements/build2.expected +++ b/tests/cachekey/project/elements/build2.expected @@ -1 +1 @@ -f1eae5a7b0ebb147fc3e910d9f802553c79242af6d2901b7e9386768531a0951
\ No newline at end of file +bddd914705a53691fd93cd39cc11f24d13d5c22d38fe5385dee5f984774eecb0
\ No newline at end of file diff --git a/tests/cachekey/project/elements/compose1.expected b/tests/cachekey/project/elements/compose1.expected index c13c9ddd6..d6e699451 100644 --- a/tests/cachekey/project/elements/compose1.expected +++ b/tests/cachekey/project/elements/compose1.expected @@ -1 +1 @@ -21eab9c3f5f64f06a86b206b489282c36d2730af751790e25c32db288530ac51
\ No newline at end of file +65879fc4348dcdfd4ae37e5f993a65a0863433f28de4250cc7ae599ef59d555a
\ No newline at end of file diff --git a/tests/cachekey/project/elements/compose2.expected b/tests/cachekey/project/elements/compose2.expected index ace86d0ca..769d2a9a8 100644 --- a/tests/cachekey/project/elements/compose2.expected +++ b/tests/cachekey/project/elements/compose2.expected @@ -1 +1 @@ -428aadf565b5677c4d08bcba0d61f61877dce32c85d4b1c361839c5c8f95f230
\ No newline at end of file +37e7f56c8d619bfb5ddcd7be197f4f69477b00b9f09819455796a68c41fb1080
\ No newline at end of file diff --git a/tests/cachekey/project/elements/compose3.expected b/tests/cachekey/project/elements/compose3.expected index 5d818c0d3..9239d3bfd 100644 --- a/tests/cachekey/project/elements/compose3.expected +++ b/tests/cachekey/project/elements/compose3.expected @@ -1 +1 @@ -f4ba0e2ca52dcada647e1d67f4d08211b2136833ac88dc390f4cade069893540
\ No newline at end of file +8b1910c7018e2f0d7a613530c9e40b4d8ac5a43f0dbc06ddcacd8498ae46c89e
\ No newline at end of file diff --git a/tests/cachekey/project/elements/compose4.expected b/tests/cachekey/project/elements/compose4.expected index 73c199427..76968d85c 100644 --- a/tests/cachekey/project/elements/compose4.expected +++ b/tests/cachekey/project/elements/compose4.expected @@ -1 +1 @@ -df638236726329e1bccb268b2b222559f6bb5e38b1d8621caef040c4ef9336c4
\ No newline at end of file +1d0257a9b882bb072cfc56d369ae2531692ec265e261e0bff38349e94038d669
\ No newline at end of file diff --git a/tests/cachekey/project/elements/compose5.expected b/tests/cachekey/project/elements/compose5.expected index 8f8c72977..437004bd9 100644 --- a/tests/cachekey/project/elements/compose5.expected +++ b/tests/cachekey/project/elements/compose5.expected @@ -1 +1 @@ -7ad4ce5aedcaa7e0f25cb31c4e6016fb547df90b62dc1e1c6cf9eb37dbf12462
\ No newline at end of file +64230eb1aff83451470cd5195ad06a17bb78da456270e38154e61d053ecf4018
\ No newline at end of file diff --git a/tests/cachekey/project/elements/import1.expected b/tests/cachekey/project/elements/import1.expected index ad2e9a9d8..8410d2fcb 100644 --- a/tests/cachekey/project/elements/import1.expected +++ b/tests/cachekey/project/elements/import1.expected @@ -1 +1 @@ -8f05d68de71fbd70661eb4a3516189d754c9ee76af42eff93ed9cde6c441e257
\ No newline at end of file +d5ee4030265fdfd217ddd63e78d726f76a48729edf2fad3e38e2a27c41747838
\ No newline at end of file diff --git a/tests/cachekey/project/elements/import2.expected b/tests/cachekey/project/elements/import2.expected index 179a86778..6839ad95f 100644 --- a/tests/cachekey/project/elements/import2.expected +++ b/tests/cachekey/project/elements/import2.expected @@ -1 +1 @@ -df9c8856a0e652bacbee483ec115e61336bad7d008bcbb8b31cc604a819c9b3a
\ No newline at end of file +597f0b2b8060cdfd7c5865b41163d3ff060a9ec35e6dd55c75c8c08c1d4fe6b0
\ No newline at end of file diff --git a/tests/cachekey/project/elements/import3.expected b/tests/cachekey/project/elements/import3.expected index 10b9216f5..896fbd460 100644 --- a/tests/cachekey/project/elements/import3.expected +++ b/tests/cachekey/project/elements/import3.expected @@ -1 +1 @@ -7afb1275c1d5f2e019ab6319dcd19447fcebd2f587a4aba9f25d86fd8df93d75
\ No newline at end of file +445a240fafb2806ac396b19c1a22d4c98daef830f03f557deb1d33c00c1bc9ed
\ No newline at end of file diff --git a/tests/cachekey/project/elements/script1.expected b/tests/cachekey/project/elements/script1.expected index ec6dc0a01..87ab8698f 100644 --- a/tests/cachekey/project/elements/script1.expected +++ b/tests/cachekey/project/elements/script1.expected @@ -1 +1 @@ -249d98e96abd7e23fc5587eab5a5f94eee116c35a02a6968b28ff7845a9d8b0d
\ No newline at end of file +3830801f89cad317d7c4ae3ed6c8232269a106f98a3eb0b63cd67779703ec49b
\ No newline at end of file diff --git a/tests/cachekey/project/sources/bzr1.expected b/tests/cachekey/project/sources/bzr1.expected index 069881cfb..25dfb85ab 100644 --- a/tests/cachekey/project/sources/bzr1.expected +++ b/tests/cachekey/project/sources/bzr1.expected @@ -1 +1 @@ -cb1e72ea1b5d842010d056498a86bc3c3302a1b9919f7285da9329fffe556187
\ No newline at end of file +63fde363b4bd14bc3956480e3f6174473da23f3079fa80f6122e6e9eac764155
\ No newline at end of file diff --git a/tests/cachekey/project/sources/git1.expected b/tests/cachekey/project/sources/git1.expected index 482ed50c9..8b13262f7 100644 --- a/tests/cachekey/project/sources/git1.expected +++ b/tests/cachekey/project/sources/git1.expected @@ -1 +1 @@ -b61a46d4effd5501f0553b1eedfd24220912102370e9be7b489159cd1e02d47f
\ No newline at end of file +45b6c44d93d39eb3a2ba0a3141d3a979d669191aacb8479343a87d499766b95a
\ No newline at end of file diff --git a/tests/cachekey/project/sources/git2.expected b/tests/cachekey/project/sources/git2.expected index 1591ef3c5..c39f7af6b 100644 --- a/tests/cachekey/project/sources/git2.expected +++ b/tests/cachekey/project/sources/git2.expected @@ -1 +1 @@ -878922a1112f47701bf05a9ee752b331463fca98580e88dcac5c4d90897a181a
\ No newline at end of file +accd48003ce58abb5a040e86c06b916e391aa6a39ab6c574316287deb2a21e1e
\ No newline at end of file diff --git a/tests/cachekey/project/sources/git3.expected b/tests/cachekey/project/sources/git3.expected index dbe658b90..f87f320eb 100644 --- a/tests/cachekey/project/sources/git3.expected +++ b/tests/cachekey/project/sources/git3.expected @@ -1 +1 @@ -4363cd830fd28b8b20354b8e2643e2f55e99afc0328f26ae3af8a049b5fdafb2
\ No newline at end of file +e64e9be7741d58ec0e3ca6cee6372c77a78cb0b9dd49913da3da10f2e9c6f429
\ No newline at end of file diff --git a/tests/cachekey/project/sources/local1.expected b/tests/cachekey/project/sources/local1.expected index ad2e9a9d8..8410d2fcb 100644 --- a/tests/cachekey/project/sources/local1.expected +++ b/tests/cachekey/project/sources/local1.expected @@ -1 +1 @@ -8f05d68de71fbd70661eb4a3516189d754c9ee76af42eff93ed9cde6c441e257
\ No newline at end of file +d5ee4030265fdfd217ddd63e78d726f76a48729edf2fad3e38e2a27c41747838
\ No newline at end of file diff --git a/tests/cachekey/project/sources/local2.expected b/tests/cachekey/project/sources/local2.expected index 713581851..638d2d3fe 100644 --- a/tests/cachekey/project/sources/local2.expected +++ b/tests/cachekey/project/sources/local2.expected @@ -1 +1 @@ -4c2f914ab71bae44c21c72768bed96a7a27bd4426ac651093ad07566e948a62d
\ No newline at end of file +22b34c80285b24e8c68dcdfacdd3bbb0f34707dbf5d6e620ac0153b3b203f60a
\ No newline at end of file diff --git a/tests/cachekey/project/sources/patch1.expected b/tests/cachekey/project/sources/patch1.expected index d13e6c13f..6b6d809b2 100644 --- a/tests/cachekey/project/sources/patch1.expected +++ b/tests/cachekey/project/sources/patch1.expected @@ -1 +1 @@ -2bfdd9b55896b4287bac41cc57974eb266bacd21dc1e8a7eb78417cdaf17dd3d
\ No newline at end of file +beef0339dd6c1546f18b84814d21eea48e44d7587c6539a64959938ced91c945
\ No newline at end of file diff --git a/tests/cachekey/project/sources/patch2.expected b/tests/cachekey/project/sources/patch2.expected index 8826ab3f5..0bf1e28a8 100644 --- a/tests/cachekey/project/sources/patch2.expected +++ b/tests/cachekey/project/sources/patch2.expected @@ -1 +1 @@ -666d87ff1fcf238c1cc621d850be8d7b955990579c63c18797fb022ea46e0150
\ No newline at end of file +1afe4af8ed15abd5d930889dc8c303551a1d6a64293be4fc0ba184d16ce78280
\ No newline at end of file diff --git a/tests/cachekey/project/sources/patch3.expected b/tests/cachekey/project/sources/patch3.expected index 83f4292f9..004b25898 100644 --- a/tests/cachekey/project/sources/patch3.expected +++ b/tests/cachekey/project/sources/patch3.expected @@ -1 +1 @@ -9bb2454bd6a8a2af627d304045d48d5587cca32cd802216b8b67c83c7da049b5
\ No newline at end of file +7028b5eff533e2a02c1b1241c1ccabc339f1b269052bda3c98a0870029e0ed34
\ No newline at end of file diff --git a/tests/cachekey/project/sources/pip1.expected b/tests/cachekey/project/sources/pip1.expected index d09d8d6aa..81c869091 100644 --- a/tests/cachekey/project/sources/pip1.expected +++ b/tests/cachekey/project/sources/pip1.expected @@ -1 +1 @@ -877660711746453066c7a780b23aeee81961a510eb6405d55d24d9880e18d277
\ No newline at end of file +7753ff309c4a5d96bfc05389bdc08a8c154028ac592350d1c8b9a3067a84c557
\ No newline at end of file diff --git a/tests/cachekey/project/sources/remote1.expected b/tests/cachekey/project/sources/remote1.expected index e25a282b8..d14e1b761 100644 --- a/tests/cachekey/project/sources/remote1.expected +++ b/tests/cachekey/project/sources/remote1.expected @@ -1 +1 @@ -ddeb5f82ef95533d863883546d1579e1cd3882459aec8e0bb8e9948143204d00
\ No newline at end of file +fe5e2754b6fc914ee4c115df12bc697280acadf1901a1f629b00d291b393b519
\ No newline at end of file diff --git a/tests/cachekey/project/sources/remote2.expected b/tests/cachekey/project/sources/remote2.expected index 5c68f919c..02dadc9fb 100644 --- a/tests/cachekey/project/sources/remote2.expected +++ b/tests/cachekey/project/sources/remote2.expected @@ -1 +1 @@ -fb7a50cf67554963126b698ce0f9c175c8992472b3d1e34ed27b10e6db2b465b
\ No newline at end of file +6613a5e861097054492cb5d2f9acd44f3ad1227a835867bcef4cddc3197ef4de
\ No newline at end of file diff --git a/tests/cachekey/project/sources/tar1.expected b/tests/cachekey/project/sources/tar1.expected index 0ea93ca03..711582ed8 100644 --- a/tests/cachekey/project/sources/tar1.expected +++ b/tests/cachekey/project/sources/tar1.expected @@ -1 +1 @@ -4609c3c0f007ac68d801e2893cd8ccce57b4b374fe800c8eef26d5dc95993d0d
\ No newline at end of file +941705647f14e5853b42ad89277cba461e6b119d382994f7d2046ab15dd729e3
\ No newline at end of file diff --git a/tests/cachekey/project/sources/tar2.expected b/tests/cachekey/project/sources/tar2.expected index 84ffefa8b..4694a2265 100644 --- a/tests/cachekey/project/sources/tar2.expected +++ b/tests/cachekey/project/sources/tar2.expected @@ -1 +1 @@ -1b5a123bc483b3350c1e26573a70311956c7c2ccadb14ddc758b3329020c3ee0
\ No newline at end of file +1400e784b1419361cda94586065ed8fe128429ab9e31feb789297cf2ccfd0df8
\ No newline at end of file diff --git a/tests/cachekey/project/sources/zip1.expected b/tests/cachekey/project/sources/zip1.expected index ecb6c5167..dd38d767f 100644 --- a/tests/cachekey/project/sources/zip1.expected +++ b/tests/cachekey/project/sources/zip1.expected @@ -1 +1 @@ -45f3248e0d4d4c8872927d6a76f730afce3655b5204b484a10eedaa3a39cdd4a
\ No newline at end of file +422d9b2aba7113634d0108202b1421cba20c52a704f607dcc423385a3f5e36b2
\ No newline at end of file diff --git a/tests/cachekey/project/sources/zip2.expected b/tests/cachekey/project/sources/zip2.expected index 68ffc9fc3..390540e38 100644 --- a/tests/cachekey/project/sources/zip2.expected +++ b/tests/cachekey/project/sources/zip2.expected @@ -1 +1 @@ -9c041e467499a1849f02e78cec5af73c5d8e8440bdab3abba131fa620379239b
\ No newline at end of file +31b6d65dc5a22173764a09421e612c6b4b46d00e22c0299c9dfd7be1971c5499
\ No newline at end of file diff --git a/tests/cachekey/project/target.expected b/tests/cachekey/project/target.expected index cf0e262ae..c43fedde2 100644 --- a/tests/cachekey/project/target.expected +++ b/tests/cachekey/project/target.expected @@ -1 +1 @@ -bf4f53d434bf0c140007a270c9787fe3b67ce3e09dd2fe168de742990d900e01
\ No newline at end of file +b6a4b6dbbde547f2dd3e634a108f25759d14cf621ca4b213cfafe5b0501b73fe
\ No newline at end of file |