Skip to content

Commit eddddc3

Browse files
committed
Add option to use argument file in reobf tasks. Fixes #968
1 parent 477b868 commit eddddc3

File tree

4 files changed

+97
-7
lines changed

4 files changed

+97
-7
lines changed

src/common/java/net/minecraftforge/gradle/common/tasks/JarExec.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ public void close() {}
153153
}
154154
}
155155

156-
protected List<String> filterArgs(List<String> args) {
156+
protected List<String> filterArgs(List<String> args) throws IOException {
157157
return args;
158158
}
159159

src/patcher/java/net/minecraftforge/gradle/patcher/tasks/ReobfuscateJar.java

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,21 @@
1818
import org.gradle.api.tasks.Input;
1919
import org.gradle.api.tasks.InputFile;
2020
import org.gradle.api.tasks.InputFiles;
21+
import org.gradle.api.tasks.Internal;
2122
import org.gradle.api.tasks.Optional;
2223
import org.gradle.api.tasks.OutputFile;
2324
import org.gradle.api.tasks.TaskAction;
2425

2526
import com.google.common.collect.ImmutableMap;
2627
import java.io.BufferedOutputStream;
28+
import java.io.File;
2729
import java.io.FileOutputStream;
2830
import java.io.IOException;
2931
import java.io.OutputStream;
3032
import java.nio.charset.StandardCharsets;
3133
import java.nio.file.Files;
3234
import java.nio.file.StandardOpenOption;
35+
import java.util.Arrays;
3336
import java.util.Enumeration;
3437
import java.util.HashSet;
3538
import java.util.List;
@@ -41,13 +44,15 @@
4144
public abstract class ReobfuscateJar extends JarExec {
4245
private boolean keepPackages = false;
4346
private boolean keepData = false;
47+
private boolean useArgsFile = false;
4448

4549
private final Provider<RegularFile> outputTemp = workDir.map(d -> d.file("output_temp.jar"));
4650

4751
public ReobfuscateJar() {
4852
getTool().set(Utils.FART);
4953
getArgs().addAll("--input", "{input}", "--output", "{output}", "--names", "{srg}", "--lib", "{libraries}");
5054
getOutput().convention(workDir.map(d -> d.file("output.jar")));
55+
getArgsFile().convention(workDir.map(d -> d.file("command_line_args.txt")));
5156
}
5257

5358
@TaskAction
@@ -88,14 +93,21 @@ public void apply() throws IOException {
8893
}
8994

9095
@Override
91-
protected List<String> filterArgs(List<String> args) {
92-
return replaceArgsMulti(args, ImmutableMap.of(
96+
protected List<String> filterArgs(List<String> args) throws IOException {
97+
List<String> ret = replaceArgsMulti(args, ImmutableMap.of(
9398
"{input}", getInput().get().getAsFile(),
9499
"{output}", outputTemp.get().getAsFile(),
95100
"{srg}", getSrg().get().getAsFile()),
96101
ImmutableMultimap.<String, Object>builder()
97102
.putAll("{libraries}", getLibraries().getFiles())
98103
.build());
104+
105+
if (!useArgsFile)
106+
return ret;
107+
108+
File argsFile = getArgsFile().get().getAsFile();
109+
Files.write(argsFile.toPath(), ret, StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
110+
return Arrays.asList("--cfg", argsFile.getAbsolutePath());
99111
}
100112

101113
@InputFile
@@ -107,6 +119,9 @@ protected List<String> filterArgs(List<String> args) {
107119
@OutputFile
108120
public abstract RegularFileProperty getOutput();
109121

122+
@Internal
123+
public abstract RegularFileProperty getArgsFile();
124+
110125
/**
111126
* The libraries to use for inheritance data during the renaming process.
112127
*/
@@ -139,4 +154,17 @@ public void keepData() {
139154
public void filterData() {
140155
this.keepData = false;
141156
}
157+
158+
@Internal
159+
public boolean getUseArgsFile() {
160+
return this.useArgsFile;
161+
}
162+
163+
public void setUseArgsFile(boolean value) {
164+
this.useArgsFile = value;
165+
}
166+
167+
public void useArgsFile() {
168+
this.useArgsFile = true;
169+
}
142170
}

src/userdev/java/net/minecraftforge/gradle/userdev/tasks/RenameJar.java

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.gradle.api.provider.Provider;
1616
import org.gradle.api.tasks.InputFile;
1717
import org.gradle.api.tasks.InputFiles;
18+
import org.gradle.api.tasks.Internal;
1819
import org.gradle.api.tasks.Optional;
1920
import org.gradle.api.tasks.OutputFile;
2021

@@ -24,26 +25,40 @@
2425

2526
import java.io.File;
2627
import java.io.IOException;
28+
import java.nio.charset.StandardCharsets;
29+
import java.nio.file.Files;
30+
import java.nio.file.StandardOpenOption;
31+
import java.util.Arrays;
2732
import java.util.List;
2833

2934
public abstract class RenameJar extends JarExec {
3035
private final Provider<RegularFile> tempMappings = this.workDir.map(s -> s.file("mappings.tsrg"));
3136

37+
private boolean useArgsFile = false;
38+
3239
public RenameJar() {
3340
getTool().set(Utils.FART);
3441
getArgs().addAll("--input", "{input}", "--output", "{output}", "--names", "{mappings}", "--lib", "{libraries}");
42+
getArgsFile().convention(workDir.map(d -> d.file("command_line_args.txt")));
3543
}
3644

3745
@Override
38-
protected List<String> filterArgs(List<String> args) {
39-
return replaceArgsMulti(args, ImmutableMap.of(
46+
protected List<String> filterArgs(List<String> args) throws IOException {
47+
List<String> ret = replaceArgsMulti(args, ImmutableMap.of(
4048
"{input}", getInput().get().getAsFile(),
4149
"{output}", getOutput().get().getAsFile(),
4250
"{mappings}", this.tempMappings.get().getAsFile()),
4351
ImmutableMultimap.<String, Object>builder()
4452
.putAll("{libraries}", getLibraries().getFiles())
4553
.build()
4654
);
55+
56+
if (!useArgsFile)
57+
return ret;
58+
59+
File argsFile = getArgsFile().get().getAsFile();
60+
Files.write(argsFile.toPath(), ret, StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
61+
return Arrays.asList("--cfg", argsFile.getAbsolutePath());
4762
}
4863

4964
@TaskAction
@@ -91,4 +106,20 @@ public void apply() throws IOException {
91106

92107
@OutputFile
93108
public abstract RegularFileProperty getOutput();
109+
110+
@Internal
111+
public abstract RegularFileProperty getArgsFile();
112+
113+
@Internal
114+
public boolean getUseArgsFile() {
115+
return this.useArgsFile;
116+
}
117+
118+
public void setUseArgsFile(boolean value) {
119+
this.useArgsFile = value;
120+
}
121+
122+
public void useArgsFile() {
123+
this.useArgsFile = true;
124+
}
94125
}

src/userdev/java/net/minecraftforge/gradle/userdev/tasks/RenameJarInPlace.java

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,35 +16,50 @@
1616
import org.gradle.api.provider.Provider;
1717
import org.gradle.api.tasks.InputFile;
1818
import org.gradle.api.tasks.InputFiles;
19+
import org.gradle.api.tasks.Internal;
1920
import org.gradle.api.tasks.Optional;
2021
import org.gradle.api.tasks.TaskAction;
2122

2223
import com.google.common.collect.ImmutableMap;
2324
import com.google.common.collect.ImmutableMultimap;
2425
import java.io.File;
2526
import java.io.IOException;
27+
import java.nio.charset.StandardCharsets;
28+
import java.nio.file.Files;
29+
import java.nio.file.StandardOpenOption;
30+
import java.util.Arrays;
2631
import java.util.List;
2732

2833
public abstract class RenameJarInPlace extends JarExec {
2934
private final Provider<RegularFile> tempOutput = this.workDir.map(s -> s.file("output.jar"));
3035
private final Provider<RegularFile> tempMappings = this.workDir.map(s -> s.file("mappings.tsrg"));
3136

37+
private boolean useArgsFile = false;
38+
3239
public RenameJarInPlace() {
3340
getTool().set(Utils.FART);
3441
getArgs().addAll("--input", "{input}", "--output", "{output}", "--names", "{mappings}", "--lib", "{libraries}");
3542
this.getOutputs().upToDateWhen(task -> false);
43+
this.getArgsFile().convention(workDir.map(d -> d.file("command_line_args.txt")));
3644
}
3745

3846
@Override
39-
protected List<String> filterArgs(List<String> args) {
40-
return replaceArgsMulti(args, ImmutableMap.of(
47+
protected List<String> filterArgs(List<String> args) throws IOException {
48+
List<String> ret = replaceArgsMulti(args, ImmutableMap.of(
4149
"{input}", getInput().get().getAsFile(),
4250
"{output}", tempOutput.get().getAsFile(),
4351
"{mappings}", this.tempMappings.get().getAsFile()),
4452
ImmutableMultimap.<String, Object>builder()
4553
.putAll("{libraries}", getLibraries().getFiles())
4654
.build()
4755
);
56+
57+
if (!useArgsFile)
58+
return ret;
59+
60+
File argsFile = getArgsFile().get().getAsFile();
61+
Files.write(argsFile.toPath(), ret, StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
62+
return Arrays.asList("--cfg", argsFile.getAbsolutePath());
4863
}
4964

5065
@Override
@@ -90,4 +105,20 @@ public void apply() throws IOException {
90105

91106
@InputFile
92107
public abstract RegularFileProperty getInput();
108+
109+
@Internal
110+
public abstract RegularFileProperty getArgsFile();
111+
112+
@Internal
113+
public boolean getUseArgsFile() {
114+
return this.useArgsFile;
115+
}
116+
117+
public void setUseArgsFile(boolean value) {
118+
this.useArgsFile = value;
119+
}
120+
121+
public void useArgsFile() {
122+
this.useArgsFile = true;
123+
}
93124
}

0 commit comments

Comments
 (0)