You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by tv...@apache.org on 2021/02/04 07:51:49 UTC

[buildstream] 02/02: Fix key sorting when using workspaces

This is an automated email from the ASF dual-hosted git repository.

tvb pushed a commit to branch valentdavid/sysroot_dependencies
in repository https://gitbox.apache.org/repos/asf/buildstream.git

commit 90a370ae63bcda01ad705a018b9c029d4373c290
Author: Valentin David <va...@codethink.co.uk>
AuthorDate: Tue Oct 16 12:17:43 2018 +0200

    Fix key sorting when using workspaces
---
 buildstream/element.py | 31 ++++++++++++++++++++++---------
 1 file changed, 22 insertions(+), 9 deletions(-)

diff --git a/buildstream/element.py b/buildstream/element.py
index 331e329..37dfaaa 100644
--- a/buildstream/element.py
+++ b/buildstream/element.py
@@ -80,6 +80,7 @@ from collections import Mapping, OrderedDict
 from contextlib import contextmanager
 import tempfile
 import shutil
+import functools
 
 from . import _yaml
 from ._variables import Variables
@@ -1137,21 +1138,33 @@ class Element(Plugin):
             self.__build_result = None
             return
 
+        def cmp_dep(a, b):
+            sysroot_a, key_a = a
+            sysroot_b, key_b = b
+            if key_a is None:
+                key_a = ''
+            if key_b is None:
+                key_b = ''
+            if (sysroot_a, key_a) < (sysroot_b, key_b):
+                return -1
+            elif (sysroot_a, key_a) > (sysroot_b, key_b):
+                return 1
+            else:
+                return 0
+
         if self.__weak_cache_key is None:
             # Calculate weak cache key
             # Weak cache key includes names of direct build dependencies
             # but does not include keys of dependencies.
             dependencies = []
             if self.BST_STRICT_REBUILD:
-                for sysroot, e in self.dependencies(Scope.BUILD, with_sysroot=True):
-                    dependencies = [(sysroot, e._get_cache_key(strength=_KeyStrength.WEAK))
-                                    for sysroot, e in self.dependencies(Scope.BUILD, with_sysroot=True)]
+                dependencies = [(sysroot, e._get_cache_key(strength=_KeyStrength.WEAK))
+                                for sysroot, e in self.dependencies(Scope.BUILD, with_sysroot=True)]
             else:
-                for sysroot, e in self.dependencies(Scope.BUILD, with_sysroot=True):
-                    dependencies = [(sysroot, e.name)
-                                    for sysroot, e in self.dependencies(Scope.BUILD, with_sysroot=True)]
+                dependencies = [(sysroot, e.name)
+                                for sysroot, e in self.dependencies(Scope.BUILD, with_sysroot=True)]
 
-            self.__weak_cache_key = self.__calculate_cache_key(sorted(dependencies))
+            self.__weak_cache_key = self.__calculate_cache_key(sorted(dependencies, key=functools.cmp_to_key(cmp_dep)))
 
             if self.__weak_cache_key is None:
                 # Weak cache key could not be calculated yet
@@ -1179,7 +1192,7 @@ class Element(Plugin):
         if self.__strict_cache_key is None:
             dependencies = [(sysroot, e.__strict_cache_key)
                             for sysroot, e in self.dependencies(Scope.BUILD, with_sysroot=True)]
-            self.__strict_cache_key = self.__calculate_cache_key(sorted(dependencies))
+            self.__strict_cache_key = self.__calculate_cache_key(sorted(dependencies, key=functools.cmp_to_key(cmp_dep)))
 
             if self.__strict_cache_key is None:
                 # Strict cache key could not be calculated yet
@@ -1220,7 +1233,7 @@ class Element(Plugin):
             elif self.__assemble_scheduled or self.__assemble_done:
                 dependencies = [(sysroot, e._get_cache_key())
                                 for sysroot, e in self.dependencies(Scope.BUILD, with_sysroot=True)]
-                self.__cache_key = self.__calculate_cache_key(sorted(dependencies))
+                self.__cache_key = self.__calculate_cache_key(sorted(dependencies, key=functools.cmp_to_key(cmp_dep)))
 
             if self.__cache_key is None:
                 # Strong cache key could not be calculated yet