diff options
author | jingwen <jingwen@google.com> | 2018-05-31 08:27:29 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-05-31 08:28:44 -0700 |
commit | de1340abaf0bce215c70e0ffedfaf9f2ce8db077 (patch) | |
tree | 6de4474bb117aaf80c308ac184c970e52c7c6c30 /src/tools/android/java/com | |
parent | e7c1e9d5da5fa0cac4f69e27184054f6d68a00b7 (diff) |
Improve DependencyAndroidData VALID_REGEX's robustness.
This prevents an invalid flag like `resources:assets:AndroidManifest.xml:::local.bin` to match, as with the case in https://github.com/bazelbuild/bazel/issues/5214
where the R.txt file is missing (shouldn't happen, but let's be defensive)
Error message:
```
.. invalid DependencyAndroidData: bazel-out/android-armeabi-v7a-fastbuild/bin/external/androidsdk/com.android.support/_aar/unzipped/resources/support-compat-25.0.0/res:bazel-out/android-armeabi-v7a-fastbuild/bin/external/androidsdk/com.android.support/_aar/unzipped/assets/support-compat-25.0.0/assets:bazel-out/android-armeabi-v7a-fastbuild/bin/external/androidsdk/com.android.support/support-compat-25.0.0_processed_manifest/AndroidManifest.xml:::bazel-out/android-armeabi-v7a-fastbuild/bin/external/androidsdk/com.android.support/support-compat-25.0.0_symbols/local.bin is not in the format 'resources[#resources]:assets[#assets]:manifest:r.txt(:symbols.zip?):symbols.bin'
```
RELNOTES: None.
PiperOrigin-RevId: 198724816
Diffstat (limited to 'src/tools/android/java/com')
-rw-r--r-- | src/tools/android/java/com/google/devtools/build/android/DependencyAndroidData.java | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/DependencyAndroidData.java b/src/tools/android/java/com/google/devtools/build/android/DependencyAndroidData.java index b4d4b99b3f..6eb9aa80d8 100644 --- a/src/tools/android/java/com/google/devtools/build/android/DependencyAndroidData.java +++ b/src/tools/android/java/com/google/devtools/build/android/DependencyAndroidData.java @@ -35,7 +35,15 @@ import java.util.regex.Pattern; * assets. */ class DependencyAndroidData extends SerializedAndroidData { - private static final Pattern VALID_REGEX = Pattern.compile(".*:.*:.+:.+(:.*){0,2}"); + + // From the start of the line, + // 1) match any number of characters that isn't ":" until a ":" (twice for resources and assets) + // 2) match at least one character that isn't ":" until a ":" (manifest) + // 3) match at least one character that isn't ":" until a ":" or end of line (r.txt) + // 4) if not end of line, optionally match anything that isn't ":" until a ":" (symbols.zip) + // 5) match anything that isn't ":" until end of line (symbols.bin) + private static final Pattern VALID_REGEX = + Pattern.compile("^([^:]*:){2}[^:]+:[^:]+(:|$)([^:]*:)?([^:]*)$"); public static final String EXPECTED_FORMAT = "resources[#resources]:assets[#assets]:manifest:r.txt(:symbols.zip?):symbols.bin"; |