aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Laurent Le Brun <laurentlb@google.com>2015-03-09 20:55:40 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2015-03-10 15:08:09 +0000
commitc7a6e3602def43512f8553c86298e1be037594d5 (patch)
tree60d3baa4fc2368790eeb8d6977c8f985b1474641
parent50fe7e143f46d7b92857ad51cbacfd075298b62f (diff)
Skylark: Show ordering when pretty-printing sets.
-- MOS_MIGRATED_REVID=88149329
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/MethodLibrary.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java36
-rw-r--r--src/test/java/com/google/devtools/build/lib/syntax/SkylarkNestedSetTest.java7
4 files changed, 53 insertions, 16 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/MethodLibrary.java b/src/main/java/com/google/devtools/build/lib/packages/MethodLibrary.java
index 65ad87a0dd..4fce8b113b 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/MethodLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/MethodLibrary.java
@@ -608,19 +608,7 @@ public class MethodLibrary {
@Override
public Object call(Object[] args, FuncallExpression ast) throws EvalException,
ConversionException {
- Order order;
- if (args[1] == null || args[1].equals("stable")) {
- order = Order.STABLE_ORDER;
- } else if (args[1].equals("compile")) {
- order = Order.COMPILE_ORDER;
- } else if (args[1].equals("link")) {
- order = Order.LINK_ORDER;
- } else if (args[1].equals("naive_link")) {
- order = Order.NAIVE_LINK_ORDER;
- } else {
- throw new EvalException(ast.getLocation(), "Invalid order: " + args[1]);
- }
-
+ Order order = SkylarkNestedSet.parseOrder((String) args[1], ast.getLocation());
if (args[0] == null) {
return new SkylarkNestedSet(order, SkylarkList.EMPTY_LIST, ast.getLocation());
}
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java b/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
index 15eaaa20c5..59aadd1819 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/EvalUtils.java
@@ -22,6 +22,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -302,9 +303,14 @@ public abstract class EvalUtils {
prettyPrintValue(entry.getValue(), buffer);
} else if (o instanceof SkylarkNestedSet) {
- Iterable<?> seq = (Iterable<?>) o;
- // TODO(bazel-team): preserve the order= flag when not the default "stable".
- printList(seq, "set([", ", ", "])", buffer);
+ SkylarkNestedSet set = (SkylarkNestedSet) o;
+ buffer.append("set(");
+ printList(set, "[", ", ", "]", buffer);
+ Order order = set.getOrder();
+ if (order != Order.STABLE_ORDER) {
+ buffer.append(", order = \"" + SkylarkNestedSet.orderString(order) + "\"");
+ }
+ buffer.append(")");
} else if (o instanceof Function) {
Function func = (Function) o;
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java
index d946454c36..233cfdd6c8 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkNestedSet.java
@@ -207,4 +207,40 @@ public final class SkylarkNestedSet implements Iterable<Object> {
public String toString() {
return EvalUtils.prettyPrintValue(this);
}
+
+ /**
+ * Parse the string as a set order.
+ */
+ public static Order parseOrder(String s, Location loc) throws EvalException {
+ // Keep in sync with orderString
+ if (s == null || s.equals("stable")) {
+ return Order.STABLE_ORDER;
+ } else if (s.equals("compile")) {
+ return Order.COMPILE_ORDER;
+ } else if (s.equals("link")) {
+ return Order.LINK_ORDER;
+ } else if (s.equals("naive_link")) {
+ return Order.NAIVE_LINK_ORDER;
+ } else {
+ throw new EvalException(loc, "Invalid order: " + s);
+ }
+ }
+
+ /**
+ * Get the order as a string.
+ */
+ public static String orderString(Order order) {
+ // Keep in sync with parseOrder
+ switch (order) {
+ case STABLE_ORDER: return "stable";
+ case COMPILE_ORDER: return "compile";
+ case LINK_ORDER: return "link";
+ case NAIVE_LINK_ORDER: return "naive_link";
+ default: throw new IllegalStateException("unknown order: " + order);
+ }
+ }
+
+ public Order getOrder() {
+ return set.getOrder();
+ }
}
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkNestedSetTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkNestedSetTest.java
index f54583a8d4..1c895d9abc 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkNestedSetTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkNestedSetTest.java
@@ -176,6 +176,13 @@ public class SkylarkNestedSetTest extends AbstractEvaluationTestCase {
assertEquals("set([2, 4, 6, 3, 5])", env.lookup("x"));
}
+ @Test
+ public void testNsetToStringWithOrder() throws Exception {
+ exec("s = set(order = 'link') + [2, 4, 6] + [3, 4, 5]",
+ "x = str(s)");
+ assertEquals("set([2, 4, 6, 3, 5], order = \"link\")", env.lookup("x"));
+ }
+
private void exec(String... input) throws Exception {
exec(parseFileForSkylark(Joiner.on("\n").join(input)), env);
}