Commit Graph

337 Commits

Author SHA1 Message Date
Kousik Kumar a907f283fc resolve merge conflicts of 233c1be0bd to rvc-dev am: 3c12576942
Original change: https://googleplex-android-review.googlesource.com/c/platform/build/soong/+/15473760

Change-Id: Ied3e486f490decd767d4ae3c7c63947bf41cdc64
2021-08-06 15:45:40 +00:00
Kousik Kumar 3c12576942 resolve merge conflicts of 233c1be0bd to rvc-dev
Bug: b/194679562

Change-Id: Icb42c43c1b4c8018b1402bd508271a0d4a052b14
Merged-In: I416e8da75f84aa2b53995f525cf50501488dc972
2021-08-05 20:16:26 +00:00
Kousik Kumar 233c1be0bd Merge "Load RBE related env vars from config files" am: b3a5d18470 am: 9f6fa868c5
Original change: https://googleplex-android-review.googlesource.com/c/platform/build/soong/+/15454953

Change-Id: Ie1e7b2bdb392c33a286d7f52e0fee4ccf560b1b7
2021-08-05 18:08:31 +00:00
Kousik Kumar 9f6fa868c5 Merge "Load RBE related env vars from config files" am: b3a5d18470
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1773209

Bug: b/194679562
Change-Id: Id84167a3ae6ab15c8b74b72b4cc2c179e0da5d0c
Merged-In: I416e8da75f84aa2b53995f525cf50501488dc972
(cherry picked from commit a7ab7c9394ccfc80e163b5e405792a3975eaf2f3)
2021-08-03 13:22:44 -04:00
Patrice Arruda 43743ee2ce [DO NOT MERGE] Capture the build command that executed the build system. am: 807a8f9142
Original change: https://googleplex-android-review.googlesource.com/c/platform/build/soong/+/12969335

Change-Id: Ib496613df81acb9e17f1ca4b717583fab39643cc
2020-11-02 20:44:03 +00:00
Patrice Arruda c5563628f0 [DO NOT MERGE] Capture the build command that executed the build system.
We need to capture the user build command to understand what additional
arguments is passed in to Soong. This data is useful to know which
targets are being executed and have statistics on top build targets
are specified.

Bug: b/169453712
Test: ran "m blueprint_tools", "m nothing", "lunch 1" and checked
      in soong_metrics proto.
Change-Id: I7ab94dcf037211f1abffe6afd012b03ffbf99756
Merged-In: I7ab94dcf037211f1abffe6afd012b03ffbf99756
Merged-In: If9a1443eff6b48cee865ea914370261f5e0cfee6
2020-11-02 12:16:56 -08:00
Patrice Arruda 807a8f9142 [DO NOT MERGE] Capture the build command that executed the build system.
We need to capture the user build command to understand what additional
arguments is passed in to Soong. This data is useful to know which
targets are being executed and have statistics on top build targets
are specified.

Bug: b/169453712
Test: ran "m blueprint_tools", "m nothing", "lunch 1" and checked
      in soong_metrics proto.
Change-Id: I7ab94dcf037211f1abffe6afd012b03ffbf99756
Merged-In: I7ab94dcf037211f1abffe6afd012b03ffbf99756
2020-11-02 09:50:47 -08:00
Patrice Arruda 68805280f0 resolve merge conflicts of 64d43056ac to rvc-dev
Test: I solemnly swear I tested this conflict resolution.
Bug: b/169423400
Change-Id: I9e4bf3784a1ba5ae49793dbf367347106b997461
Merged-In: I67b229fbf52e913b0c4f5e7932021132ddc0598f
2020-09-30 16:16:23 +00:00
Kousik Kumar 64d43056ac Deprecate USE_GOMA and replace with FORCE_USE_GOMA am: dbe59cdd81
Original change: https://googleplex-android-review.googlesource.com/c/platform/build/soong/+/12721330

Change-Id: I6ff581a4b66298a34453282c5709102fbc691d7d
2020-09-29 22:48:49 +00:00
Kousik Kumar dbe59cdd81 Deprecate USE_GOMA and replace with FORCE_USE_GOMA
Bug: b/163361527
Test: Ran builds with USE_GOMA / FORCE_USE_GOMA flags
Change-Id: I67b229fbf52e913b0c4f5e7932021132ddc0598f
Merged-In: I67b229fbf52e913b0c4f5e7932021132ddc0598f
2020-09-29 16:40:38 +00:00
Ramy Medhat db6b17e7ac [DO NOT MERGE] Add Goma deprecation PSA to soong. am: ee50d5b5b0
Original change: https://googleplex-android-review.googlesource.com/c/platform/build/soong/+/12614869

Change-Id: I9503e5c8bbd0412973439f57ffe22f470201d092
2020-09-16 23:38:53 +00:00
Ramy Medhat ee50d5b5b0 [DO NOT MERGE] Add Goma deprecation PSA to soong.
Test: build with Goma
Bug: b/166273085
Change-Id: Ie7e146285afd40bc0a1dc17a0b898960f57a118b
Merged-In: Ie7e146285afd40bc0a1dc17a0b898960f57a118b
2020-09-16 17:53:46 +00:00
Patrice Arruda 13ea2a5da1 [DO NOT MERGE] Add RBE metrics dump in Soong UI. am: fbc4e3f9b6
Original change: https://googleplex-android-review.googlesource.com/c/platform/build/soong/+/12595314

Change-Id: I7086330bf6e2637cd3cc3ff494027aae7a30818e
2020-09-16 09:23:58 +00:00
Ramy Medhat ee17f8c02e Add Goma deprecation PSA to soong.
Test: build with Goma
Bug: b/166273085
Change-Id: Ie7e146285afd40bc0a1dc17a0b898960f57a118b
Merged-In: Ie7e146285afd40bc0a1dc17a0b898960f57a118b
2020-09-15 20:33:53 +00:00
Patrice Arruda fbc4e3f9b6 [DO NOT MERGE] Add RBE metrics dump in Soong UI.
From aosp/1329396, the RBE metrics protobuf file is part of the
metrics uploading process. The RBE metrics protobuf file is
generated by running the bootstrap shutdown command. A new function
named DumpRBEMetrics was written in order to generate the RBE metrics
protobuf file before sending to the uploading process.

Bug: b/140638454
Test: * Unit test cases
      * Ran RBE build on my local host and verified the
        metrics protobuf file is created.
      * Ran non-RBE build after RBE build and verified that
        the previous metrics protobuf file was deleted.

Change-Id: I4b8068905cb67c4b8c2d94793917b98974fed707
Merged-In: I4b8068905cb67c4b8c2d94793917b98974fed707
2020-09-15 13:05:11 +00:00
Patrice Arruda 30167deab4 Use the build start time from Soong main UI for metrics build timestamp. am: f53a655b75
Original change: https://googleplex-android-review.googlesource.com/c/platform/build/soong/+/12496737

Change-Id: Ic195ce58ba3420d46abbf6e34a734b47ae6bc1df
2020-09-14 18:00:44 +00:00
Patrice Arruda 4d2bc70197 Run the metrics uploader in the background. am: c3cec87275
Original change: https://googleplex-android-review.googlesource.com/c/platform/build/soong/+/12495840

Change-Id: I9dd469ef77fed59a9534ae9da952ce4396494126
2020-09-14 18:00:40 +00:00
Patrice Arruda a948f4befe Upload build metrics after a build is completed. am: d519a71f97
Original change: https://googleplex-android-review.googlesource.com/c/platform/build/soong/+/12495839

Change-Id: If5d428fd5054ffdea0d8ccc97aa8767edbe90bd0
2020-09-14 18:00:38 +00:00
Patrice Arruda f53a655b75 Use the build start time from Soong main UI for metrics build timestamp.
Currently, the build timestamp saved to the build_date_timestamp
field in the MetricsBase metrics protobuf usually comes from a text
file named build_date.txt. It may not be accurate for metrics purposes.
Instead, use the build start time from Soong main UI for a better
timestamp.

Bug: b/140638454
Test: Ran and checked the build_date_timestamp by running the printproto
      command.
Change-Id: I4d893fbbf9830ba21911e56ae13bc5272be47ae6
Merged-In: I4d893fbbf9830ba21911e56ae13bc5272be47ae6
2020-09-11 14:20:37 +00:00
Patrice Arruda c3cec87275 Run the metrics uploader in the background.
The metrics uploader was currently running on foreground where it
would copy the metrics files in a separate directory and then forked
into the background for the upload process. As a result, running the
lunch command would take a second longer to run since each metrics
uploader run had an average of half a second.

Bug: 140638454
Test: * Wrote and updated unit test cases.
      * Set ANDROID_ENABLE_METRICS_UPLOAD to point to the latest
        metrics_uploader bash script. Executed the "lunch 1" command
	and measured the running time. Executed "m nothing" command
	and checked that the metrics were uploaded.
      * Ran "lunch 1" and "m nothing" with
        ANDROID_ENABLE_METRICS_UPLOAD=""
      * Removed oauth from metrics_uploader and ran "m nothing" and
        "lunch 1". The oauth Message appeared only to "m nothing"

Change-Id: I13c61e666c8f44613dee291a704cef6a27335188
Merged-In: I13c61e666c8f44613dee291a704cef6a27335188
2020-09-11 14:20:36 +00:00
Patrice Arruda d519a71f97 Upload build metrics after a build is completed.
Soong now supports the ability to upload metrics to another location
by setting the ANDROID_ENABLE_METRICS_UPLOAD to an uploader that
accepts the upload.proto proto buffer message. When the environment
variable is set, a set of build metrics files (soong_metrics,
rbe_metrics.pb and build_error) is uploaded.

Bug: 140638454
Test: * Wrote unit test cases
      * Setup the uploader, built a succcessful and failed aosp_arm-eng
        target and monitor the uploading of the metrics.
Change-Id: I76a65739c557dc90345e098ca03119a950ece2d2
Merged-In: I76a65739c557dc90345e098ca03119a950ece2d2
2020-09-11 14:20:28 +00:00
Patrice Arruda dd3020f351 Use the build start time from Soong main UI for metrics build timestamp.
Currently, the build timestamp saved to the build_date_timestamp
field in the MetricsBase metrics protobuf usually comes from a text
file named build_date.txt. It may not be accurate for metrics purposes.
Instead, use the build start time from Soong main UI for a better
timestamp.

Bug: b/140638454
Test: Ran and checked the build_date_timestamp by running the printproto
      command.
Change-Id: I4d893fbbf9830ba21911e56ae13bc5272be47ae6
Merged-In: I4d893fbbf9830ba21911e56ae13bc5272be47ae6
2020-08-31 20:53:16 +00:00
Patrice Arruda e7836594ec Add RBE metrics dump in Soong UI.
From aosp/1329396, the RBE metrics protobuf file is part of the
metrics uploading process. The RBE metrics protobuf file is
generated by running the bootstrap shutdown command. A new function
named DumpRBEMetrics was written in order to generate the RBE metrics
protobuf file before sending to the uploading process.

Bug: b/140638454
Test: * Unit test cases
      * Ran RBE build on my local host and verified the
        metrics protobuf file is created.
      * Ran non-RBE build after RBE build and verified that
        the previous metrics protobuf file was deleted.

Change-Id: I4b8068905cb67c4b8c2d94793917b98974fed707
Merged-In: I4b8068905cb67c4b8c2d94793917b98974fed707
2020-08-31 20:50:13 +00:00
Patrice Arruda de44afac93 Run the metrics uploader in the background.
The metrics uploader was currently running on foreground where it
would copy the metrics files in a separate directory and then forked
into the background for the upload process. As a result, running the
lunch command would take a second longer to run since each metrics
uploader run had an average of half a second.

Bug: 140638454
Test: * Wrote and updated unit test cases.
      * Set ANDROID_ENABLE_METRICS_UPLOAD to point to the latest
        metrics_uploader bash script. Executed the "lunch 1" command
	and measured the running time. Executed "m nothing" command
	and checked that the metrics were uploaded.
      * Ran "lunch 1" and "m nothing" with
        ANDROID_ENABLE_METRICS_UPLOAD=""
      * Removed oauth from metrics_uploader and ran "m nothing" and
        "lunch 1". The oauth Message appeared only to "m nothing"

Change-Id: I13c61e666c8f44613dee291a704cef6a27335188
Merged-In: I13c61e666c8f44613dee291a704cef6a27335188
2020-08-31 20:49:37 +00:00
Patrice Arruda 4f7f60b54b Upload build metrics after a build is completed.
Soong now supports the ability to upload metrics to another location
by setting the ANDROID_ENABLE_METRICS_UPLOAD to an uploader that
accepts the upload.proto proto buffer message. When the environment
variable is set, a set of build metrics files (soong_metrics,
rbe_metrics.pb and build_error) is uploaded.

Bug: 140638454
Test: * Wrote unit test cases
      * Setup the uploader, built a succcessful and failed aosp_arm-eng
        target and monitor the uploading of the metrics.
Change-Id: I76a65739c557dc90345e098ca03119a950ece2d2
Merged-In: I76a65739c557dc90345e098ca03119a950ece2d2
2020-08-31 20:49:05 +00:00
Jaewoong Jung 33973da223 Output apkcerts file for android_app_set. am: 9cd4216c56
Original change: https://googleplex-android-review.googlesource.com/c/platform/build/soong/+/12276714

Change-Id: Id5052af44d8d62d18c39aa0588bddcda28d72f06
2020-08-12 04:23:32 +00:00
Jaewoong Jung 9cd4216c56 Output apkcerts file for android_app_set.
Soong and Make have no ways to figure out what splits will be outputted
from a given android_app_set, so it's impossible for them to provide
full PACKAGES.$(LOCAL_MODULE).CERTIFICATE entries, which are required to
build a final apkcerts.txt. This change makes extract_apks produce
apkcerts.txt files for each input modules instead. The Make-side
counterpart of this change merges all local apkcerts.txt into a final
one.

Bug: 160119159
Bug: 162464887
Test: main_test.go
Test: m apkcerts-list
Merged-In: I321e80fd636a955213761f56a3ac64bfe7f7f7c0
Change-Id: I321e80fd636a955213761f56a3ac64bfe7f7f7c0
2020-08-11 17:08:53 -07:00
Sasha Smundak 912835844a Handle universal APK case in extract_apks am: 591e59e511
Original change: https://googleplex-android-review.googlesource.com/c/platform/build/soong/+/12276687

Change-Id: I6904c9da79badb4964834ac7b476e2712bddc6f0
2020-08-03 19:32:35 +00:00
Sasha Smundak 591e59e511 Handle universal APK case in extract_apks
Cherrypick of ag/11553550

Bug: 157081961
Bug: 162464887
Test: manual and builtin

Merged-In: I5ac64c845328a54024171da41c369050243462b0
Merged-In: I3ebc4a84501623774b78c9c19628994c1d71dc64
Change-Id: I5ac64c845328a54024171da41c369050243462b0
2020-07-30 21:50:43 -07:00
Jaewoong Jung 8bec026e3a Output apkcerts file for android_app_set.
Soong and Make have no ways to figure out what splits will be outputted
from a given android_app_set, so it's impossible for them to provide
full PACKAGES.$(LOCAL_MODULE).CERTIFICATE entries, which are required to
build a final apkcerts.txt. This change makes extract_apks produce
apkcerts.txt files for each input modules instead. The Make-side
counterpart of this change merges all local apkcerts.txt into a final
one.

Fixes: 160119159
Test: main_test.go
Test: m apkcerts-list
Change-Id: I321e80fd636a955213761f56a3ac64bfe7f7f7c0
2020-06-30 10:00:22 -07:00
Jaewoong Jung 60ff397cc8 Add apex_set module. am: 9c49b285f2
Original change: https://googleplex-android-review.googlesource.com/c/platform/build/soong/+/11721758

Change-Id: I9f4f988b0e654067aaa413a3734c0ec656e34170
2020-06-05 17:38:29 +00:00
Sasha Smundak f5eec5c80c Implement extract_apks am: 97d511a16d
Original change: https://googleplex-android-review.googlesource.com/c/platform/build/soong/+/11720096

Change-Id: I347822a7e70aea5121135779a9f5cbb8a6de592f
2020-06-05 17:38:07 +00:00
Jaewoong Jung 9c49b285f2 Add apex_set module.
apex_set takes an .apks file that contains a set of prebuilt apexes with
different configurations. It uses extract_apks to select and install the
best matching one for the current target.

Bug: 153456259
Test: apex_test.go
Test: com.android.media.apks
Change-Id: I1da8bbcf1611b7c580a0cb225856cbd7029cc0a7
Merged-In: I1da8bbcf1611b7c580a0cb225856cbd7029cc0a7
2020-06-03 11:29:06 -07:00
Sasha Smundak 97d511a16d Implement extract_apks
Bug: 152319766
Test: manual and builtin
Change-Id: Ia15d66e86c7bcfd52f5b776173ca1665b68ff438
Merged-In: Ia15d66e86c7bcfd52f5b776173ca1665b68ff438
2020-06-03 09:49:38 -07:00
Jooyung Han 519705371a pom2bp: add apex_available/min_sdk_version
apex_available/min_sdk_version are required to be available for mainline
modules(APK/APEX).

- java_import/java_library_static
- android_library/android_library_import

Bug: 156996905
Test: prebuilts/sdk/update_prebuilts.sh
Merged-In: I201ebabaa533c5ee19e394ab30ca2fa0e3d7ce0e
Change-Id: I201ebabaa533c5ee19e394ab30ca2fa0e3d7ce0e
(cherry picked from commit 43d3025cd5)
2020-05-28 18:22:16 +09:00
Sasha Smundak 06fcac6f24 Handle universal APK case in extract_apks
Bug: 157081961
Test: manual and builtin
Change-Id: I5ac64c845328a54024171da41c369050243462b0
2020-05-20 00:38:02 -07:00
Jaewoong Jung 8cf307e754 Add apex_set module.
apex_set takes an .apks file that contains a set of prebuilt apexes with
different configurations. It uses extract_apks to select and install the
best matching one for the current target.

Bug: 153456259
Test: apex_test.go
Test: com.android.media.apks
Change-Id: I1da8bbcf1611b7c580a0cb225856cbd7029cc0a7
Merged-In: I1da8bbcf1611b7c580a0cb225856cbd7029cc0a7
2020-05-16 00:37:36 +00:00
Sasha Smundak bbf0579ac7 Implement extract_apks
Bug: 152319766
Test: manual and builtin
Change-Id: Ia15d66e86c7bcfd52f5b776173ca1665b68ff438
Merged-In: Ia15d66e86c7bcfd52f5b776173ca1665b68ff438
2020-05-15 10:49:45 -07:00
Jaewoong Jung 4f5edfc43c Use 0777 instead of FileInfo() for dirs.
Golang's FileInfo() implementation recognizes FAT filesystem directories
correctly, but doesn't actually add executable bits, which essentially
makes them inaccessible. Use 0777 when we know we're dealing with
directories.

Fixes: 153207404
Test: manually tested with an aar file with FAT permission bits.
Change-Id: Ie9f5320bc44d24b2f9d54d4036bb1747456655bb
2020-04-03 19:00:53 -07:00
Bill Peckham c087be1e8b Automate dependency on inputs of genrule module type.
This change automates one of the best practices for
custom tools. The best practice says "Prefer to list
input files on the command line, otherwise we may not
know to re-run your command when a new input file is
added." [1]

Normally you'd reference these inputs with $(in) or
one of the forms of the $(location*) substituions on
the command line for the custom tool. However, if the
custom tool does not accept the list of inputs on the
command line, the build system could fail to re-run
the custom tool if the list changes.

This change adds a hash of the list of input names to
the sbox command that wraps the custom tool. If the
list of inputs change, the hash will change, and
therefore the sbox command will change, causing ninja
to re-run the custom tool. The hash is visible to
(but ignored by) the sbox command, and hidden from
your custom tool.

[1] https://android.googlesource.com/platform/build/soong/+/refs/heads/master/docs/best_practices.md#custom-build-tools

Test: TestGenruleHashInputs
Bug: 149397658
Change-Id: I18b547ea3c4296ee15bd6150a4778a8f376d80b7
2020-02-19 12:47:35 -08:00
Treehugger Robot 7c78b3c98e Merge "If input zip file cannot opened, print its name." 2020-01-28 01:48:32 +00:00
Colin Cross 8b8bec3b3a Create a highmem pool and put metalava into it
Create a highmem pool based on the total RAM and the number of CPUs,
with an override via the NINJA_HIGHMEM_NUM_JOBS variable.  Put
metalava into the highmem pool.

Ninja does not support nested pools, and when goma or RBE is enabled
the maximum ninja parallelism is set very high with local jobs in a
local pool.  When both the local pool and highmem pool are enabled,
the total number of local jobs will be as high as the sum of the sizes
of the two pools.  Keep the highmem pool limited to 1/16th of the
local pool when remote builds are enabled to try to minimize the
effect while still limiting highmem jobs.

Fixes: 142644983
Test: m nothing, examine pools
Test: m USE_GOMA=true nothing, examine pools
Change-Id: Id79f11f44948992960ac34ecf831dacbe21bd332
2020-01-24 11:44:23 -08:00
Sasha Smundak 6172491b91 If input zip file cannot opened, print its name.
Test: touch empty.zip; merge_zips out.zip empty.zip
(output should contain `empty.zip: zip: not a valid zip file`)

Change-Id: If707876af2301d7ad7d065c004cffb0c2491c7df
2020-01-22 10:21:43 -08:00
Dan Willemsen 1bdbdec5a0 Take into account RAM usage for multiproduct_kati
Apparently we have some instances of Soong taking 16GB of RAM. While
that's a problem to solve on it's own, make multiproduct_kati's
auto-parallelism detection smarter by taking into account the total RAM
on the machine instead of just the number of CPUs.

Bug: 146925549
Test: check soong.log for autodetected parallelism values
Change-Id: Ice34c2cf73ea4f8f235521cbefc8654a79a04eef
2019-12-27 09:54:11 -08:00
Dan Willemsen 9609ad9c21 Add sharding support to multiproduct_kati
This is so that we can split the build_test build on large branches into
multiple builds, each testing a subset of the products.

Test: m blueprint_tools  (runs the go unit tests)
Test: build/soong/build_test.bash --only-config
      vs
Test: build/soong/build_test.bash --only-config --shard-count=2
Test: build/soong/build_test.bash --only-config --shard-count=2 --shard=2

Change-Id: I40ccc1aa477bc0ffa74ff564d155068509be18f0
2019-12-05 19:54:40 -08:00
Dan Willemsen db14db3a06 Rewrite depfile from sbox to stay reproducible
sbox will generate a random directory for the output root, and most
tools will encode that directory name in the output target of the
depfile.

So embed the library from dep_fixer into sbox so that it can rewrite the
output filename to a static (reproducible) value. Ninja doesn't care
what that value is, so it's just "outputfile".

Also fix up rule_builder to actually tell sbox about the depfile.

Bug: 144948629
Test: mmma system/iorap; check the contents of:
out/soong/.intermediates/system/iorap/libiorap-binder/android_arm_armv7-a-neon_core_static/gen/aidl/system/iorap/binder/com/google/android/startop/iorap/IIorap.cpp.d

Change-Id: I3640a2e8b0c034f143a35e398a8418a6d621b265
Merged-In: I3640a2e8b0c034f143a35e398a8418a6d621b265
(cherry picked from commit c89b6f1981)
2019-11-21 14:47:59 -08:00
Dan Willemsen 0ce5d05f76 Support RuleBuilder.Sbox to wrap commands in sbox
This essentially allows you to declare that everything in a directory
will be created by the rule, and we'll ensure that your command actually
writes out all of the claimed outputs, and remove any other files that
previously existed in that directory.

Bug: 144948629
Test: built-in tests
Change-Id: I990dce2b3a0d89ebd2736ac1a0cadfb5864c6e73
Merged-In: I990dce2b3a0d89ebd2736ac1a0cadfb5864c6e73
(cherry picked from commit 633c502295)
2019-11-21 14:47:46 -08:00
Colin Cross e94272d0b3 Silence trailing "1 warning" message from javac when warning is silenced
soong_javac_wrapper is silencing a useless warning:
warning: [options] bootstrap class path not set in conjunction with -source 1.9
but recent versions of javac have started also printing:
1 warning

Read the warning count, subtract the number of silenced warnings, and
reprint it if the non-silenced warning count is nonzero.

Fixes: 144118634
Test: javac_wrapper_test.go
Change-Id: Ie1d0a978188ab7b1c41027f718a1274608628123
2019-11-11 21:48:33 +00:00
Colin Cross c0b9f6b9d2 Force dumpvars into dumb terminal mode and move log files
Force soong_ui in dumpvars mode to use a dumb terminal so that it
doesn't print an empty status table.  Also move the logs to files
that are prefixed with "dumpvars-" so that they don't rotate the
real build logs.

Fixes: 139307849
Test: lunch
Change-Id: If92421af07731fedc9ca42670f309e95922a2224
2019-09-23 14:24:57 -07:00
Colin Cross b5f6dc47ee Fix lint error in format string
Test: go test
Change-Id: I8b7df9222db1fc88938cdfa43a6505f2da854876
2019-09-11 17:06:02 +00:00