Singlejar options handling cleanup
Pass options into the `OutputJar` constructor, instead of to `DoIt`
PiperOrigin-RevId: 835091729
Change-Id: Ifba1dd560ed2db0858f241ce6ef0613fa85b53f2
diff --git a/src/tools/singlejar/output_huge_jar_test.cc b/src/tools/singlejar/output_huge_jar_test.cc
index 70ae468..6c97c18 100644
--- a/src/tools/singlejar/output_huge_jar_test.cc
+++ b/src/tools/singlejar/output_huge_jar_test.cc
@@ -53,11 +53,11 @@
}
fprintf(stderr, "\n");
options_.ParseCommandLine(nargs, option_list);
- ASSERT_EQ(0, output_jar_.Doit(&options_));
+ OutputJar output_jar_(&options_);
+ ASSERT_EQ(0, output_jar_.Doit());
EXPECT_EQ(0, VerifyZip(out_path));
}
- OutputJar output_jar_;
Options options_;
std::unique_ptr<Runfiles> runfiles;
};
diff --git a/src/tools/singlejar/output_jar.cc b/src/tools/singlejar/output_jar.cc
index edfff41..bcfd408 100644
--- a/src/tools/singlejar/output_jar.cc
+++ b/src/tools/singlejar/output_jar.cc
@@ -52,8 +52,9 @@
#include "src/tools/singlejar/zip_headers.h"
#include <zlib.h>
-OutputJar::OutputJar()
- : options_(nullptr),
+OutputJar::OutputJar(Options* options)
+ : options_(options),
+ done_(false),
file_(nullptr),
outpos_(0),
buffer_(nullptr),
@@ -96,11 +97,11 @@
}
}
-int OutputJar::Doit(Options* options) {
- if (nullptr != options_) {
+int OutputJar::Doit() {
+ if (done_) {
diag_errx(1, "%s:%d: Doit() can be called only once.", __FILE__, __LINE__);
}
- options_ = options;
+ done_ = true;
// Register the handler for the build-data.properties file unless
// --exclude_build_data is present. Otherwise we do not generate this file,
@@ -149,7 +150,7 @@
// Copy CDS archive file (.jsa) if it is set. Page aligned start offset
// is required.
if (!options_->cds_archive.empty()) {
- AppendPageAlignedFile(options->cds_archive, "Jsa-Offset", std::string(),
+ AppendPageAlignedFile(options_->cds_archive, "Jsa-Offset", std::string(),
"cds.archive");
}
diff --git a/src/tools/singlejar/output_jar.h b/src/tools/singlejar/output_jar.h
index d1f90c3..01806df 100644
--- a/src/tools/singlejar/output_jar.h
+++ b/src/tools/singlejar/output_jar.h
@@ -38,9 +38,9 @@
class OutputJar {
public:
// Constructor.
- OutputJar();
+ OutputJar(Options* options);
// Do all that needs to be done. Can be called only once.
- int Doit(Options* options);
+ int Doit();
// Destructor.
virtual ~OutputJar();
// Add a combiner to handle the entries with given name. OutputJar will
@@ -116,6 +116,7 @@
bool WriteBytes(const void* buffer, size_t count);
Options* options_;
+ bool done_;
struct EntryInfo {
EntryInfo(Combiner* combiner, int index = -1)
: combiner_(combiner), input_jar_index_(index) {}
diff --git a/src/tools/singlejar/output_jar_simple_test.cc b/src/tools/singlejar/output_jar_simple_test.cc
index f4d13a2..8d2b6dd 100644
--- a/src/tools/singlejar/output_jar_simple_test.cc
+++ b/src/tools/singlejar/output_jar_simple_test.cc
@@ -14,6 +14,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include <vector>
// Must be included before anything else.
#include "src/main/cpp/util/file.h"
@@ -73,6 +74,7 @@
// entry in the data/ directory from the input archives.
class CustomOutputJar : public OutputJar {
public:
+ CustomOutputJar(Options* options) : OutputJar(options) {}
~CustomOutputJar() override {}
void ExtraHandler(const std::string& /*input_jar_path*/, const CDH* cdh,
const std::string* input_jar_aux_label) override {
@@ -94,7 +96,8 @@
protected:
void SetUp() override { runfiles.reset(Runfiles::CreateForTest()); }
- void CreateOutput(const string& out_path, const std::vector<string>& args) {
+ void ParseCommandLine(const string& out_path,
+ const std::vector<string>& args) {
const char* option_list[100] = {"--output", out_path.c_str(),
"--build_target", "//some/target"};
int nargs = 4;
@@ -111,7 +114,12 @@
}
fprintf(stderr, "\n");
options_.ParseCommandLine(nargs, option_list);
- ASSERT_EQ(0, output_jar_.Doit(&options_));
+ }
+
+ void CreateOutput(const string& out_path, const std::vector<string>& args) {
+ ParseCommandLine(out_path, args);
+ OutputJar output_jar(&options_);
+ ASSERT_EQ(0, output_jar.Doit());
EXPECT_EQ(0, VerifyZip(out_path));
}
@@ -135,7 +143,6 @@
return out_path;
}
- OutputJar output_jar_;
Options options_;
std::unique_ptr<Runfiles> runfiles;
};
@@ -590,9 +597,13 @@
string resolvedLibDataPath2 = runfiles->Rlocation(kPathLibData2);
string out_path = OutputFilePath("out.jar");
const char kEntry[] = "tools/singlejar/data/extra_file1";
- output_jar_.ExtraCombiner(kEntry, new Concatenator(kEntry));
- CreateOutput(out_path, {"--sources", resolvedLibDataPath1.c_str(),
- resolvedLibDataPath2.c_str()});
+ ParseCommandLine(out_path, {"--sources", resolvedLibDataPath1.c_str(),
+ resolvedLibDataPath2.c_str()});
+ OutputJar output_jar(&options_);
+ output_jar.ExtraCombiner(kEntry, new Concatenator(kEntry));
+ ASSERT_EQ(0, output_jar.Doit());
+ EXPECT_EQ(0, VerifyZip(out_path));
+
string contents1 = GetEntryContents(resolvedLibDataPath1.c_str(), kEntry);
string contents2 = GetEntryContents(resolvedLibDataPath2.c_str(), kEntry);
EXPECT_EQ(contents1 + contents2, GetEntryContents(out_path, kEntry));
@@ -607,9 +618,9 @@
const char* option_list[] = {"--output", out_path.c_str(), "--sources",
resolvedLibDataPath1.c_str(),
resolvedLibDataPath2.c_str()};
- CustomOutputJar custom_output_jar;
options_.ParseCommandLine(arraysize(option_list), option_list);
- ASSERT_EQ(0, custom_output_jar.Doit(&options_));
+ CustomOutputJar custom_output_jar(&options_);
+ ASSERT_EQ(0, custom_output_jar.Doit());
EXPECT_EQ(0, VerifyZip(out_path));
string contents1 = GetEntryContents(resolvedLibDataPath1.c_str(), kEntry);
diff --git a/src/tools/singlejar/singlejar_local_main.cc b/src/tools/singlejar/singlejar_local_main.cc
index 8502ec9..b1b8f8d 100644
--- a/src/tools/singlejar/singlejar_local_main.cc
+++ b/src/tools/singlejar/singlejar_local_main.cc
@@ -28,7 +28,7 @@
#endif
Options options;
options.ParseCommandLine(argc - 1, argv + 1);
- OutputJar output_jar;
+ OutputJar output_jar(&options);
// Process or drop Java 8 desugaring metadata, see b/65645388. We don't want
// or need these files afterwards so make sure we drop them either way.
Combiner* desugar_checker =
@@ -47,5 +47,5 @@
options.no_duplicates));
output_jar.ExtraCombiner("reference.conf",
new Concatenator("reference.conf"));
- return output_jar.Doit(&options);
+ return output_jar.Doit();
}
diff --git a/src/tools/singlejar/singlejar_main.cc b/src/tools/singlejar/singlejar_main.cc
index 4bebe15..221ed68 100644
--- a/src/tools/singlejar/singlejar_main.cc
+++ b/src/tools/singlejar/singlejar_main.cc
@@ -27,7 +27,7 @@
#endif
Options options;
options.ParseCommandLine(argc - 1, argv + 1);
- OutputJar output_jar;
+ OutputJar output_jar(&options);
// TODO(b/67733424): support desugar deps checking in Bazel
if (options.check_desugar_deps) {
diag_errx(1, "%s:%d: Desugar checking not currently supported in Bazel.",
@@ -42,5 +42,5 @@
options.no_duplicates));
output_jar.ExtraCombiner("reference.conf",
new Concatenator("reference.conf"));
- return output_jar.Doit(&options);
+ return output_jar.Doit();
}