Content-Length may not necessarily be defined in the HTTP response headers for the Bazel binary blob. For example, this may be the case for mirrors or proxies that transmit the body using chunked transfer encoding. In such cases, the "total" is not meaningful, which breaks the percentage text in the new download progress indicator.
This patch updates the progress message text to handle such cases.
Extends: #511
Symptom
$ bazelisk --help
2024/01/28 06:35:59 Downloading https://artifacts.internal.example.com/bazel/6.5.0/bazel-6.5.0-linux-x86_64...
Downloading: 8 MB out of 0 MB (-881459200%)
Verification
Downloading from a proprietary mirror that elides Content-Length:
$ bazelisk-linux_amd64 --help
2024/01/28 06:27:19 Downloading https://artifacts.internal.example.com/bazel/6.5.0/bazel-6.5.0-linux-x86_64...
Downloading: 52 MB
Starting local Bazel server and connecting to it...
[bazel release 6.5.0]
Usage: bazel <command> <options> ...
Available commands:
analyze-profile Analyzes build profile data.
aquery Analyzes the given targets and queries the action graph.
build Builds the specified targets.
canonicalize-flags Canonicalizes a list of bazel options.
clean Removes output files and optionally stops the server.
coverage Generates code coverage report for specified test targets.
cquery Loads, analyzes, and queries the specified targets w/ configurations.
dump Dumps the internal state of the bazel server process.
fetch Fetches external repositories that are prerequisites to the targets.
help Prints help for commands, or the index.
info Displays runtime info about the bazel server.
license Prints the license of this software.
mobile-install Installs targets to mobile devices.
mod Queries the Bzlmod external dependency graph
print_action Prints the command line args for compiling a file.
query Executes a dependency graph query.
run Runs the specified target.
shutdown Stops the bazel server.
sync Syncs all repositories specified in the workspace file
test Builds and runs the specified test targets.
version Prints version information for bazel.
Getting more help:
bazel help <command>
Prints help and options for <command>.
bazel help startup_options
Options for the JVM hosting bazel.
bazel help target-syntax
Explains the syntax for specifying targets.
bazel help info-keys
Displays a list of keys used by the info command.
Downloading from the public repository:
$ bazelisk-linux_amd64 --help
2024/01/28 06:30:07 Downloading https://releases.bazel.build/6.5.0/release/bazel-6.5.0-linux-x86_64...
Downloading: 52 MB out of 52 MB (100%)
[bazel release 6.5.0]
Usage: bazel <command> <options> ...
Available commands:
analyze-profile Analyzes build profile data.
aquery Analyzes the given targets and queries the action graph.
build Builds the specified targets.
canonicalize-flags Canonicalizes a list of bazel options.
clean Removes output files and optionally stops the server.
coverage Generates code coverage report for specified test targets.
cquery Loads, analyzes, and queries the specified targets w/ configurations.
dump Dumps the internal state of the bazel server process.
fetch Fetches external repositories that are prerequisites to the targets.
help Prints help for commands, or the index.
info Displays runtime info about the bazel server.
license Prints the license of this software.
mobile-install Installs targets to mobile devices.
mod Queries the Bzlmod external dependency graph
print_action Prints the command line args for compiling a file.
query Executes a dependency graph query.
run Runs the specified target.
shutdown Stops the bazel server.
sync Syncs all repositories specified in the workspace file
test Builds and runs the specified test targets.
version Prints version information for bazel.
Getting more help:
bazel help <command>
Prints help and options for <command>.
bazel help startup_options
Options for the JVM hosting bazel.
bazel help target-syntax
Explains the syntax for specifying targets.
bazel help info-keys
Displays a list of keys used by the info command.
Summary
Content-Length
may not necessarily be defined in the HTTP response headers for the Bazel binary blob. For example, this may be the case for mirrors or proxies that transmit the body using chunked transfer encoding. In such cases, the "total" is not meaningful, which breaks the percentage text in the new download progress indicator.This patch updates the progress message text to handle such cases.
Extends: #511
Symptom
Verification
Downloading from a proprietary mirror that elides
Content-Length
:Downloading from the public repository: