From b291bb95b940bbdb197b75638bfe6a01df33c012 Mon Sep 17 00:00:00 2001 From: Emily Ball Date: Wed, 13 Apr 2022 16:21:01 -0700 Subject: [PATCH] feat: disableChangelog option --- .../com/microsoft/build/YmlFilesBuilder.java | 6 +++-- .../com/microsoft/doclet/DocFxDoclet.java | 18 +++++++++++++-- .../java/com/microsoft/model/TocContents.java | 10 ++++---- .../java/com/microsoft/model/TocFile.java | 6 +++-- .../microsoft/build/YmlFilesBuilderTest.java | 2 +- .../com/microsoft/model/TocContentsTest.java | 23 +++++++++++++++++-- .../java/com/microsoft/model/TocFileTest.java | 2 +- 7 files changed, 53 insertions(+), 14 deletions(-) diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java index 94cd8abe..b558d1a6 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/build/YmlFilesBuilder.java @@ -25,18 +25,20 @@ public class YmlFilesBuilder { private ElementUtil elementUtil; private PackageLookup packageLookup; private String projectName; + private boolean disableChangelog; private ProjectBuilder projectBuilder; private PackageBuilder packageBuilder; private ClassBuilder classBuilder; private ReferenceBuilder referenceBuilder; public YmlFilesBuilder(DocletEnvironment environment, String outputPath, - String[] excludePackages, String[] excludeClasses, String projectName) { + String[] excludePackages, String[] excludeClasses, String projectName, boolean disableChangelog) { this.environment = environment; this.outputPath = outputPath; this.elementUtil = new ElementUtil(excludePackages, excludeClasses); this.packageLookup = new PackageLookup(environment); this.projectName = projectName; + this.disableChangelog = disableChangelog; this.projectBuilder = new ProjectBuilder(projectName); ClassLookup classLookup = new ClassLookup(environment); this.referenceBuilder = new ReferenceBuilder(environment, classLookup, elementUtil); @@ -46,7 +48,7 @@ public YmlFilesBuilder(DocletEnvironment environment, String outputPath, public boolean build() { // table of contents - TocFile tocFile = new TocFile(outputPath, projectName); + TocFile tocFile = new TocFile(outputPath, projectName, disableChangelog); // overview page MetadataFile projectMetadataFile = new MetadataFile(outputPath, "overview.yml"); // package summary pages diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java index 068c7bcd..20050e74 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/doclet/DocFxDoclet.java @@ -25,9 +25,10 @@ public boolean run(DocletEnvironment environment) { reporter.print(Kind.NOTE, "Output path: " + outputPath); reporter.print(Kind.NOTE, "Excluded packages: " + Arrays.toString(excludePackages)); reporter.print(Kind.NOTE, "Excluded classes: " + Arrays.toString(excludeClasses)); - reporter.print(Kind.NOTE, "Project Name: " + projectName); + reporter.print(Kind.NOTE, "Project name: " + projectName); + reporter.print(Kind.NOTE, "Disable changelog: " + disableChangelog); - return (new YmlFilesBuilder(environment, outputPath, excludePackages, excludeClasses, projectName)).build(); + return (new YmlFilesBuilder(environment, outputPath, excludePackages, excludeClasses, projectName, disableChangelog)).build(); } @Override @@ -39,6 +40,7 @@ public String getName() { private String[] excludePackages = {}; private String[] excludeClasses = {}; private String projectName; + private boolean disableChangelog; @Override public Set getSupportedOptions() { @@ -75,6 +77,18 @@ public boolean process(String option, List arguments) { return true; } }, + new CustomOption( + "Disable changelog", Arrays.asList("-disable-changelog", "--disable-changelog"), "disableChangelog") { + @Override + public boolean process(String option, List arguments) { + if (arguments.get(0).equalsIgnoreCase("false")){ + disableChangelog = false; + } else { + disableChangelog = true; + } + return true; + } + }, // Support next properties for compatibility with Gradle javadoc task. // According to javadoc spec - these properties used by StandardDoclet and used only when // 'doclet' parameter not populated. But Gradle javadoc not align with this rule and diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocContents.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocContents.java index d55c027d..cd8e4ceb 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocContents.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocContents.java @@ -23,22 +23,24 @@ public class TocContents { private final String projectName; private final List contents = new ArrayList<>(); - public TocContents(String projectName, List items) { + public TocContents(String projectName, boolean disableChangelog, List items) { this.projectName = projectName; if (projectName == null || projectName.equals("")) { contents.addAll(items); } else { // only include product hierarchy and guides if projectName included - createTocContents(projectName, items); + createTocContents(projectName, disableChangelog, items); } } - private void createTocContents(String projectName, List items) { + private void createTocContents(String projectName, boolean disableChangelog, List items) { List tocItems = new ArrayList<>(); // combine guides and tocItems tocItems.add(new Guide("Overview", "overview.html")); - tocItems.add(new Guide("Version history", "history.md")); + if (!disableChangelog) { + tocItems.add(new Guide("Version history", "history.md")); + } tocItems.addAll(items); // wrap guides + tocItems with product hierarchy contents.add(new ProjectContents(projectName, tocItems)); diff --git a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java index cef0fb26..e32af29b 100644 --- a/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java +++ b/third_party/docfx-doclet-143274/src/main/java/com/microsoft/model/TocFile.java @@ -14,10 +14,12 @@ public class TocFile extends ArrayList implements YmlFile { private final static String TOC_FILE_NAME = "toc.yml"; private final String outputPath; private final String projectName; + private final boolean disableChangelog; - public TocFile(String outputPath, String projectName) { + public TocFile(String outputPath, String projectName, boolean disableChangelog) { this.outputPath = outputPath; this.projectName = projectName; + this.disableChangelog = disableChangelog; } public void addTocItem(TocItem packageTocItem) { @@ -31,7 +33,7 @@ protected void sortByUid() { @Override public String getFileContent() { sortByUid(); - List tocContents = new TocContents(projectName, this).getContents(); + List tocContents = new TocContents(projectName, disableChangelog, this).getContents(); return TOC_FILE_HEADER + YamlUtil.objectToYamlString(tocContents); } diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java index c6d92d40..027ba7d7 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/build/YmlFilesBuilderTest.java @@ -23,7 +23,7 @@ public class YmlFilesBuilderTest { @Before public void setup() { environment = Mockito.mock(DocletEnvironment.class); - ymlFilesBuilder = new YmlFilesBuilder(environment, "./target", new String[]{}, new String[]{}, "google-cloud-product"); + ymlFilesBuilder = new YmlFilesBuilder(environment, "./target", new String[]{}, new String[]{}, "google-cloud-product", false); } @Test diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocContentsTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocContentsTest.java index d1d5965d..530910d8 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocContentsTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocContentsTest.java @@ -23,6 +23,7 @@ import java.util.List; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; public class TocContentsTest { @@ -31,6 +32,7 @@ public class TocContentsTest { private TocItem tocItemC; private List tocItems; private String projectName = "google-cloud-project"; + private boolean disableChangelog = false; @Before public void setup() { @@ -47,7 +49,7 @@ public void setup() { @Test public void getContentsWithProjectName() { // should include ProjectContents and Guides - List tocContents = new TocContents(projectName, tocItems).getContents(); + List tocContents = new TocContents(projectName, disableChangelog, tocItems).getContents(); assertEquals("Should only include 1 item", tocContents.size(), 1); assertEquals("Should include ProjectContents", tocContents.get(0).getClass(), ProjectContents.class); @@ -73,7 +75,7 @@ public void getContentsWithProjectName() { @Test public void getContentsNoProjectName() { - List tocContents = new TocContents("", tocItems).getContents(); + List tocContents = new TocContents("", disableChangelog, tocItems).getContents(); // should not include ProjectContents or Guides assertEquals("Should be 3 items", tocContents.size(), 3); @@ -81,4 +83,21 @@ public void getContentsNoProjectName() { assertEquals("Item B should be second", tocContents.get(1), tocItemB); assertEquals("Item C should be third", tocContents.get(2), tocItemC); } + + @Test + public void getContentsWithDisabledChangelog() { + disableChangelog = true; + List tocContents = new TocContents(projectName, disableChangelog, tocItems).getContents(); + + ProjectContents contents = (ProjectContents) tocContents.get(0); + List items = contents.getItems(); + assertEquals("Should be 4 items", items.size(), 4); + + Guide overview = (Guide) items.get(0); + assertEquals("First guide should be Overview", overview.getName(), "Overview"); + assertNotEquals("Second item should not be Version History guide", items.get(1).getClass(), Guide.class); + assertEquals("Item A should be second", items.get(1), tocItemA); + assertEquals("Item B should be third", items.get(2), tocItemB); + assertEquals("Item C should be fourth", items.get(3), tocItemC); + } } \ No newline at end of file diff --git a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java index 1299b842..c1c174ff 100644 --- a/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java +++ b/third_party/docfx-doclet-143274/src/test/java/com/microsoft/model/TocFileTest.java @@ -24,7 +24,7 @@ public class TocFileTest { @Test public void sortsByUid() { - TocFile tocFile = new TocFile("outputPath", "google-cloud-project"); + TocFile tocFile = new TocFile("outputPath", "google-cloud-project", false); TocItem tocItemA = new TocItem("A.uid.package.class", "name"); TocItem tocItemB = new TocItem("B.uid.package.class", "name"); TocItem tocItemC = new TocItem("C.uid.package.class", "name");