aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/actions
diff options
context:
space:
mode:
authorGravatar tomlu <tomlu@google.com>2017-09-17 22:24:02 +0200
committerGravatar László Csomor <laszlocsomor@google.com>2017-09-18 11:29:19 +0200
commit7d67e02616c198f5cb8947cd813e313c819047ec (patch)
tree3d969d2537c2e2f21a1ddc65dbcfd4cf6cdf9ba9 /src/main/java/com/google/devtools/build/lib/analysis/actions
parent2aee44b68bbbc29397993062b8757b419f6a5614 (diff)
Change param file arg string to a format string instead of a prefix string.
Makes it easier to do Skylark param file support which uses a format string. PiperOrigin-RevId: 169019600
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/actions')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/ParamFileInfo.java34
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java6
2 files changed, 22 insertions, 18 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/ParamFileInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/ParamFileInfo.java
index 33a9245c2b..6e94070ff1 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/ParamFileInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/ParamFileInfo.java
@@ -31,13 +31,14 @@ import javax.annotation.concurrent.Immutable;
public final class ParamFileInfo {
private final ParameterFileType fileType;
private final Charset charset;
- private final String flag;
+ private final String flagFormatString;
private final boolean always;
- private ParamFileInfo(ParameterFileType fileType, Charset charset, String flag, boolean always) {
+ private ParamFileInfo(
+ ParameterFileType fileType, Charset charset, String flagFormatString, boolean always) {
this.fileType = Preconditions.checkNotNull(fileType);
this.charset = Preconditions.checkNotNull(charset);
- this.flag = Preconditions.checkNotNull(flag);
+ this.flagFormatString = Preconditions.checkNotNull(flagFormatString);
this.always = always;
}
@@ -55,11 +56,9 @@ public final class ParamFileInfo {
return charset;
}
- /**
- * Returns the prefix for the params filename on the command line (typically "@").
- */
- public String getFlag() {
- return flag;
+ /** Returns the format string for the params filename on the command line (typically "@%s"). */
+ public String getFlagFormatString() {
+ return flagFormatString;
}
/** Returns true if a params file should always be used. */
@@ -69,7 +68,7 @@ public final class ParamFileInfo {
@Override
public int hashCode() {
- return Objects.hash(charset, flag, fileType, always);
+ return Objects.hash(charset, flagFormatString, fileType, always);
}
@Override
@@ -83,7 +82,7 @@ public final class ParamFileInfo {
ParamFileInfo other = (ParamFileInfo) obj;
return fileType.equals(other.fileType)
&& charset.equals(other.charset)
- && flag.equals(other.flag)
+ && flagFormatString.equals(other.flagFormatString)
&& always == other.always;
}
@@ -95,7 +94,7 @@ public final class ParamFileInfo {
public static class Builder {
private final ParameterFileType fileType;
private Charset charset = ISO_8859_1;
- private String flag = "@";
+ private String flagFormatString = "@%s";
private boolean always;
private Builder(ParameterFileType fileType) {
@@ -108,9 +107,14 @@ public final class ParamFileInfo {
return this;
}
- /** Sets a prefix to use for the flag that is passed to original command. */
- public Builder setFlag(@CompileTimeConstant String flag) {
- this.flag = flag;
+ /**
+ * Sets a format string to use for the flag that is passed to original command.
+ *
+ * <p>The format string must have a single "%s" that will be replaced by the execution path to
+ * the param file.
+ */
+ public Builder setFlagFormatString(@CompileTimeConstant String flagFormatString) {
+ this.flagFormatString = flagFormatString;
return this;
}
@@ -121,7 +125,7 @@ public final class ParamFileInfo {
}
public ParamFileInfo build() {
- return new ParamFileInfo(fileType, charset, flag, always);
+ return new ParamFileInfo(fileType, charset, flagFormatString, always);
}
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
index ac9aa7266a..a6af9fc364 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
@@ -1327,8 +1327,8 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie
result.add((String) value);
} else if (value instanceof Artifact) {
Artifact paramFile = (Artifact) value;
- String flag = (String) values[++i];
- result.add(flag + paramFile.getExecPathString());
+ String flagFormatString = (String) values[++i];
+ result.add(flagFormatString.replaceFirst("%s", paramFile.getExecPathString()));
} else if (value instanceof CommandLine) {
CommandLine commandLine = (CommandLine) value;
if (artifactExpander != null) {
@@ -1351,7 +1351,7 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie
Builder addParamFile(Artifact paramFile, ParamFileInfo paramFileInfo) {
values.add(paramFile);
- values.add(paramFileInfo.getFlag());
+ values.add(paramFileInfo.getFlagFormatString());
return this;
}