From daa778ddf6e7cecc74cf1cad4b4013328aa5eb25 Mon Sep 17 00:00:00 2001 From: Tor Norbye <tnorbye@google.com> Date: Wed, 23 Jan 2019 09:23:06 -0800 Subject: [PATCH] Add flag to allow baseline files to be empty Normally baselines are deleted if they are empty. This CL adds a flag to let you leave baselines in place even if they are empty. --delete-empty-baselines Whether to delete baseline files if they are updated and there is nothing to include. Also tweak baselines to not end with two blank lines. Test: make update-api Change-Id: I7c24d6ac531ad32dfd0e45e2ebd3f2d4c7591338 --- src/main/java/com/android/tools/metalava/Baseline.kt | 7 ++++++- src/main/java/com/android/tools/metalava/Options.kt | 7 +++++++ src/test/java/com/android/tools/metalava/OptionsTest.kt | 2 ++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/android/tools/metalava/Baseline.kt b/src/main/java/com/android/tools/metalava/Baseline.kt index f4ea6ee..02c4f4c 100644 --- a/src/main/java/com/android/tools/metalava/Baseline.kt +++ b/src/main/java/com/android/tools/metalava/Baseline.kt @@ -219,7 +219,7 @@ class Baseline( private fun write() { val updateFile = this.updateFile ?: return - if (!map.isEmpty()) { + if (!map.isEmpty() || !options.deleteEmptyBaselines) { val sb = StringBuilder() sb.append(format.header()) sb.append(headerComment) @@ -235,6 +235,11 @@ class Baseline( } sb.append("\n\n") } + + if (sb.endsWith("\n\n")) { + sb.setLength(sb.length - 2) + } + updateFile.parentFile?.mkdirs() updateFile.writeText(sb.toString(), UTF_8) } else { diff --git a/src/main/java/com/android/tools/metalava/Options.kt b/src/main/java/com/android/tools/metalava/Options.kt index a0e301f..91a6adb 100644 --- a/src/main/java/com/android/tools/metalava/Options.kt +++ b/src/main/java/com/android/tools/metalava/Options.kt @@ -145,6 +145,7 @@ const val ARG_UPDATE_BASELINE = "--update-baseline" const val ARG_MERGE_BASELINE = "--merge-baseline" const val ARG_STUB_PACKAGES = "--stub-packages" const val ARG_STUB_IMPORT_PACKAGES = "--stub-import-packages" +const val ARG_DELETE_EMPTY_BASELINES = "--delete-empty-baselines" class Options( args: Array<String>, @@ -507,6 +508,9 @@ class Options( /** If updating baselines, don't fail the build */ var passBaselineUpdates = false + /** If updating baselines and the baseline is empty, delete the file */ + var deleteEmptyBaselines = false + /** Whether the baseline should only contain errors */ var baselineErrorsOnly = false @@ -756,6 +760,7 @@ class Options( } } ARG_PASS_BASELINE_UPDATES -> passBaselineUpdates = true + ARG_DELETE_EMPTY_BASELINES -> deleteEmptyBaselines = true ARG_PUBLIC, "-public" -> docLevel = DocLevel.PUBLIC ARG_PROTECTED, "-protected" -> docLevel = DocLevel.PROTECTED @@ -1901,6 +1906,8 @@ class Options( ARG_PASS_BASELINE_UPDATES, "Normally, encountering error will fail the build, even when updating " + "baselines. This flag allows you to tell $PROGRAM_NAME to continue without errors, such that " + "all the baselines in the source tree can be updated in one go.", + ARG_DELETE_EMPTY_BASELINES, "Whether to delete baseline files if they are updated and there is nothing " + + "to include.", "", "\nJDiff:", "$ARG_XML_API <file>", "Like $ARG_API, but emits the API in the JDiff XML format instead", diff --git a/src/test/java/com/android/tools/metalava/OptionsTest.kt b/src/test/java/com/android/tools/metalava/OptionsTest.kt index 83726e2..36d02bf 100644 --- a/src/test/java/com/android/tools/metalava/OptionsTest.kt +++ b/src/test/java/com/android/tools/metalava/OptionsTest.kt @@ -246,6 +246,8 @@ Diffs and Checks: allows you to tell metalava to continue without errors, such that all the baselines in the source tree can be updated in one go. +--delete-empty-baselines Whether to delete baseline files if they are + updated and there is nothing to include. JDiff: --api-xml <file> Like --api, but emits the API in the JDiff XML -- GitLab