Title: [111213] trunk/Tools
Revision
111213
Author
[email protected]
Date
2012-03-19 12:08:01 -0700 (Mon, 19 Mar 2012)

Log Message

test-webkitpy is failing on SL/Python 2.6.1
https://bugs.webkit.org/show_bug.cgi?id=81533

Reviewed by Ojan Vafai.

It appears that itertools.combinations() is buggy in 2.6.1; this
backports the implementation from 2.7.

* Scripts/webkitpy/layout_tests/models/test_configuration.py:
(TestConfigurationConverter.collapse_macros):
(TestConfigurationConverter):
(TestConfigurationConverter.combinations):

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (111212 => 111213)


--- trunk/Tools/ChangeLog	2012-03-19 19:02:27 UTC (rev 111212)
+++ trunk/Tools/ChangeLog	2012-03-19 19:08:01 UTC (rev 111213)
@@ -1,3 +1,18 @@
+2012-03-19  Dirk Pranke  <[email protected]>
+
+        test-webkitpy is failing on SL/Python 2.6.1
+        https://bugs.webkit.org/show_bug.cgi?id=81533
+
+        Reviewed by Ojan Vafai.
+
+        It appears that itertools.combinations() is buggy in 2.6.1; this
+        backports the implementation from 2.7.
+
+        * Scripts/webkitpy/layout_tests/models/test_configuration.py:
+        (TestConfigurationConverter.collapse_macros):
+        (TestConfigurationConverter):
+        (TestConfigurationConverter.combinations):
+
 2012-03-19  David Michael Barr  <[email protected]>
 
         Optimize the cleanup sequence in the start-queue.sh script

Modified: trunk/Tools/Scripts/webkitpy/layout_tests/models/test_configuration.py (111212 => 111213)


--- trunk/Tools/Scripts/webkitpy/layout_tests/models/test_configuration.py	2012-03-19 19:02:27 UTC (rev 111212)
+++ trunk/Tools/Scripts/webkitpy/layout_tests/models/test_configuration.py	2012-03-19 19:08:01 UTC (rev 111213)
@@ -169,7 +169,7 @@
             if len(macro) == 1:
                 continue
 
-            for combination in itertools.combinations(specifiers_list, len(macro)):
+            for combination in cls.combinations(specifiers_list, len(macro)):
                 if cls.symmetric_difference(combination) == set(macro):
                     for item in combination:
                         specifiers_list.remove(item)
@@ -193,6 +193,30 @@
         for macro_specifier, macro in macros_dict.items():
             collapse_individual_specifier_set(macro_specifier, macro)
 
+    # FIXME: itertools.combinations in buggy in Python 2.6.1 (the version that ships on SL).
+    # It seems to be okay in 2.6.5 or later; until then, this is the implementation given
+    # in http://docs.python.org/library/itertools.html (from 2.7).
+    @staticmethod
+    def combinations(iterable, r):
+        # combinations('ABCD', 2) --> AB AC AD BC BD CD
+        # combinations(range(4), 3) --> 012 013 023 123
+        pool = tuple(iterable)
+        n = len(pool)
+        if r > n:
+            return
+        indices = range(r)
+        yield tuple(pool[i] for i in indices)
+        while True:
+            for i in reversed(range(r)):
+                if indices[i] != i + n - r:
+                    break
+            else:
+                return
+            indices[i] += 1
+            for j in range(i + 1, r):
+                indices[j] = indices[j - 1] + 1
+            yield tuple(pool[i] for i in indices)
+
     @classmethod
     def intersect_combination(cls, combination):
         return reduce(set.intersection, [set(specifiers) for specifiers in combination])
@@ -224,7 +248,7 @@
         def try_collapsing(size, collapsing_sets):
             if len(specifiers_list) < size:
                 return False
-            for combination in itertools.combinations(specifiers_list, size):
+            for combination in self.combinations(specifiers_list, size):
                 if self.symmetric_difference(combination) in collapsing_sets:
                     for item in combination:
                         specifiers_list.remove(item)
@@ -241,7 +265,7 @@
         def try_abbreviating(collapsing_sets):
             if len(specifiers_list) < 2:
                 return False
-            for combination in itertools.combinations(specifiers_list, 2):
+            for combination in self.combinations(specifiers_list, 2):
                 for collapsing_set in collapsing_sets:
                     diff = self.symmetric_difference(combination)
                     if diff <= collapsing_set:
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to