aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar David Chen <dzc@google.com>2016-08-16 08:05:30 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2016-08-16 15:21:32 +0000
commit753bcacfb7da3b04c68a30f11b9162653163ef3b (patch)
tree5bffe98bc0b5c2f63f7194f6c0020d9906b45b28 /src/main/java/com/google/devtools/build
parent9650f54d1b27618a0191065160ad7c409d4f4b94 (diff)
Use Options for BE docgen command line arguments.
-- MOS_MIGRATED_REVID=130371455
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/docgen/BUILD2
-rw-r--r--src/main/java/com/google/devtools/build/docgen/BlazeRuleHelpPrinter.java5
-rw-r--r--src/main/java/com/google/devtools/build/docgen/BuildDocCollector.java2
-rw-r--r--src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaGenerator.java60
-rw-r--r--src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaOptions.java65
-rw-r--r--src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaProcessor.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/BUILD6
7 files changed, 109 insertions, 33 deletions
diff --git a/src/main/java/com/google/devtools/build/docgen/BUILD b/src/main/java/com/google/devtools/build/docgen/BUILD
index f52df1aad7..3de3431b66 100644
--- a/src/main/java/com/google/devtools/build/docgen/BUILD
+++ b/src/main/java/com/google/devtools/build/docgen/BUILD
@@ -17,6 +17,7 @@ java_library(
"//src/main/java/com/google/devtools/build/lib:skylarkinterface",
"//src/main/java/com/google/devtools/build/lib/rules/apple",
"//src/main/java/com/google/devtools/build/lib/rules/cpp",
+ "//src/main/java/com/google/devtools/common/options",
"//third_party:apache_velocity",
"//third_party:guava",
"//third_party:jsr305",
@@ -31,6 +32,7 @@ java_binary(
":docgen_javalib",
"//src/main/java/com/google/devtools/build/lib:bazel-rules",
"//src/main/java/com/google/devtools/build/lib:build-base",
+ "//src/main/java/com/google/devtools/common/options",
],
)
diff --git a/src/main/java/com/google/devtools/build/docgen/BlazeRuleHelpPrinter.java b/src/main/java/com/google/devtools/build/docgen/BlazeRuleHelpPrinter.java
index 8194d79723..e262aa4267 100644
--- a/src/main/java/com/google/devtools/build/docgen/BlazeRuleHelpPrinter.java
+++ b/src/main/java/com/google/devtools/build/docgen/BlazeRuleHelpPrinter.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.docgen;
import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
import java.io.IOException;
@@ -37,8 +38,8 @@ public class BlazeRuleHelpPrinter {
try {
BuildDocCollector collector = new BuildDocCollector(provider, false);
Map<String, RuleDocumentation> ruleDocs = collector.collect(
- new String[] {"java/com/google/devtools/build/lib/view",
- "java/com/google/devtools/build/lib/rules"}, null);
+ ImmutableList.of("java/com/google/devtools/build/lib/view",
+ "java/com/google/devtools/build/lib/rules"), null);
ruleDocMap = new HashMap<>();
for (RuleDocumentation ruleDoc : ruleDocs.values()) {
ruleDocMap.put(ruleDoc.getRuleName(), ruleDoc);
diff --git a/src/main/java/com/google/devtools/build/docgen/BuildDocCollector.java b/src/main/java/com/google/devtools/build/docgen/BuildDocCollector.java
index 870bf9558b..00e1d50f30 100644
--- a/src/main/java/com/google/devtools/build/docgen/BuildDocCollector.java
+++ b/src/main/java/com/google/devtools/build/docgen/BuildDocCollector.java
@@ -87,7 +87,7 @@ public class BuildDocCollector {
* @param blackList specify an optional black list file that list some rules that should
* not be listed in the output.
*/
- public Map<String, RuleDocumentation> collect(String[] inputDirs, String blackList)
+ public Map<String, RuleDocumentation> collect(List<String> inputDirs, String blackList)
throws BuildEncyclopediaDocException, IOException {
// Read the blackList file
Set<String> blacklistedRules = readBlackList(blackList);
diff --git a/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaGenerator.java b/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaGenerator.java
index f16f70384e..64c0584a7d 100644
--- a/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaGenerator.java
+++ b/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaGenerator.java
@@ -14,26 +14,26 @@
package com.google.devtools.build.docgen;
import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
+import com.google.devtools.common.options.OptionsParser;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.util.Collections;
/**
* The main class for the docgen project. The class checks the input arguments
* and uses the BuildEncyclopediaProcessor for the actual documentation generation.
*/
public class BuildEncyclopediaGenerator {
-
- private static boolean checkArgs(String[] args) {
- if (args.length < 2) {
- System.err.println("There has to be two to four input parameters\n"
- + " - a comma separated list for input directories\n"
- + " - the name of the rule class provider\n"
- + " - an output directory (optional)."
- + " - a path to a file listing rules to not document (optional)");
- return false;
- }
- return true;
+ private static void printUsage(OptionsParser parser) {
+ System.err.println(
+ "Usage: docgen_bin -p rule_class_provider (-i input_dir)+\n"
+ + " [-o outputdir] [-b blacklist] [-h]\n\n"
+ + "Generates the Build Encyclopedia from embedded native rule documentation.\n"
+ + "The rule class provider (-p) and at least one input_dir (-i) must be specified.\n");
+ System.err.println(
+ parser.describeOptions(
+ Collections.<String, String>emptyMap(), OptionsParser.HelpVerbosity.LONG));
}
private static void fail(Throwable e, boolean printStackTrace) {
@@ -53,22 +53,30 @@ public class BuildEncyclopediaGenerator {
}
public static void main(String[] args) {
- if (checkArgs(args)) {
- // TODO(bazel-team): use flags
- try {
- BuildEncyclopediaProcessor processor = new BuildEncyclopediaProcessor(
- createRuleClassProvider(args[1]));
- processor.generateDocumentation(
- args[0].split(","), getArgsOrNull(args, 2), getArgsOrNull(args, 3));
- } catch (BuildEncyclopediaDocException e) {
- fail(e, false);
- } catch (Throwable e) {
- fail(e, true);
- }
+ OptionsParser parser = OptionsParser.newOptionsParser(BuildEncyclopediaOptions.class);
+ parser.setAllowResidue(false);
+ parser.parseAndExitUponError(args);
+ BuildEncyclopediaOptions options = parser.getOptions(BuildEncyclopediaOptions.class);
+
+ if (options.help) {
+ printUsage(parser);
+ Runtime.getRuntime().exit(0);
}
- }
- private static String getArgsOrNull(String[] args, int idx) {
- return args.length > idx ? args[idx] : null;
+ if (options.inputDirs.size() == 0 || options.provider.isEmpty()) {
+ printUsage(parser);
+ Runtime.getRuntime().exit(1);
+ }
+
+ try {
+ BuildEncyclopediaProcessor processor = new BuildEncyclopediaProcessor(
+ createRuleClassProvider(options.provider));
+ processor.generateDocumentation(
+ options.inputDirs, options.outputDir, options.blacklist);
+ } catch (BuildEncyclopediaDocException e) {
+ fail(e, false);
+ } catch (Throwable e) {
+ fail(e, true);
+ }
}
}
diff --git a/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaOptions.java b/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaOptions.java
new file mode 100644
index 0000000000..f75dc6a82b
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaOptions.java
@@ -0,0 +1,65 @@
+// Copyright 2014 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.google.devtools.build.docgen;
+
+import com.google.devtools.common.options.Option;
+import com.google.devtools.common.options.OptionsBase;
+
+import java.util.List;
+
+/**
+ * Command line options for the Build Encyclopedia docgen.
+ */
+public class BuildEncyclopediaOptions extends OptionsBase {
+ @Option(
+ name = "input_dir",
+ abbrev = 'i',
+ defaultValue = "",
+ allowMultiple = true,
+ help = "An input directory to read source files"
+ )
+ public List<String> inputDirs;
+
+ @Option(
+ name = "provider",
+ abbrev = 'p',
+ defaultValue = "",
+ help = "The name of the rule class provider"
+ )
+ public String provider;
+
+ @Option(
+ name = "output_dir",
+ abbrev = 'o',
+ defaultValue = ".",
+ help = "An output directory."
+ )
+ public String outputDir;
+
+ @Option(
+ name = "blacklist",
+ abbrev = 'b',
+ defaultValue = "",
+ help = "A path to a file listing rules not to document."
+ )
+ public String blacklist;
+
+ @Option(
+ name = "help",
+ abbrev = 'h',
+ defaultValue = "false",
+ help = "Prints the help string."
+ )
+ public boolean help;
+}
diff --git a/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaProcessor.java b/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaProcessor.java
index b29e7610ef..c6bf396441 100644
--- a/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaProcessor.java
+++ b/src/main/java/com/google/devtools/build/docgen/BuildEncyclopediaProcessor.java
@@ -67,7 +67,7 @@ public class BuildEncyclopediaProcessor {
* @param outputRootDir output directory where to write the build encyclopedia
* @param blackList optional path to a file listing rules to not document
*/
- public void generateDocumentation(String[] inputDirs, String outputDir, String blackList)
+ public void generateDocumentation(List<String> inputDirs, String outputDir, String blackList)
throws BuildEncyclopediaDocException, IOException {
writeStaticPage(outputDir, "make-variables");
writeStaticPage(outputDir, "predefined-python-variables");
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index cd023db4e1..a82f8d867e 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -1071,9 +1071,9 @@ genrule(
cmd = (
"mkdir -p $(@D)/be && " +
"$(location //src/main/java/com/google/devtools/build/docgen:docgen_bin)" +
- " $$PWD/src/main/java/com/google/devtools/build/lib " +
- "com.google.devtools.build.lib.bazel.rules.BazelRuleClassProvider" +
- " $(@D)/be &&" +
+ " --provider=com.google.devtools.build.lib.bazel.rules.BazelRuleClassProvider" +
+ " --input_dir=$$PWD/src/main/java/com/google/devtools/build/lib" +
+ " --output_dir=$(@D)/be &&" +
"zip -qj $@ $(@D)/be/*"
),
tools = [