httputil: Avoid displaying percentage in download progress when response Content-Length is not defined
#539
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Content-Lengthmay 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:
$ 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.