Download files in parallel during recursive get - #384
Open
neon-ninja wants to merge 5 commits into
Open
neon-ninja wants to merge 5 commits into
neon-ninja wants to merge 5 commits into
Conversation
Recursive downloads now fetch several files at once instead of one after another. By default the number of concurrent downloads is tuned automatically: a hill-climbing controller starts at four workers and raises the count step by step while each step improves the measured aggregate throughput by at least 10%, then settles on the last level that paid off, which is where the available bandwidth is saturated. The new --workers/-w flag pins a fixed number instead; -w 1 restores the previous sequential behaviour with per-file progress bars. Concurrent mode prints one line per file and, when stderr is a terminal, a single live status line with aggregate progress and the current worker count. Results and errors are reported in listing order regardless of completion order, so JSON output stays stable. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AwSTGMWogdVigTYWL9fwgN
The release build job already compiles every target on each push and pull request but discarded the result. Upload the Linux binaries and the packaged release archives so a build of any branch can be downloaded from its workflow run. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AwSTGMWogdVigTYWL9fwgN
Installing govulncheck@latest now resolves to x/vuln v1.8.0, which requires Go 1.26, so every job that runs it fails under the pinned Go 1.25.13 toolchain before any test or build step runs. v1.7.0 is the newest release that supports Go 1.25 and reports no vulnerabilities for this module under 1.25.13. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AwSTGMWogdVigTYWL9fwgN
Download progress lines for get and share-link download now follow the tqdm layout: a percentage, an ASCII bar, bytes done over total, elapsed time, estimated time remaining, and the current throughput in MiB/s measured over a five-second sliding window. Redraws are throttled to ten per second so fast transfers no longer flood stderr. The parallel download status line gains the same fields plus the current worker count, and every parallel run ends with a summary line giving the total bytes, elapsed time, and average throughput. The aggregate status line and summary no longer run in single-worker mode, where they would have collided with the per-file bar. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AwSTGMWogdVigTYWL9fwgN
CONTRIBUTING.md asks for changelog entries alongside changes, and past releases keep infrastructure work in its own section. Add the artifact upload and the govulncheck pin under Infrastructure, and move the progress-output entry from Added to Changed since it alters existing output rather than adding a command. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AwSTGMWogdVigTYWL9fwgN
|
|
AndreyVMarkelov
self-requested a review
September 23, 2026 01:43
AndreyVMarkelov
approved these changes
Sep 23, 2026
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Try it: compiled Linux binaries
Built by the CI run for the current head (
7be0ec9). Artifacts are zip files; unzip andchmod +x.dbxcli-linux-amd64,dbxcli-linux-arm64,dbxcli-linux-arm(about 9.9 MB, expires in 30 days).tar.gz/.ziparchives for every release target plusSHA256SUMSEvery push to this PR re-uploads fresh artifacts; the latest are always on the newest CI run in the Checks tab.
What changed
dbxcli get --recursivenow downloads several files at once instead of one after another.--workers/-wflag pins a fixed number of concurrent downloads.0(the default) selects automatic tuning;-w 1restores the previous sequential behaviour. Negative values are rejected as invalid arguments.getandshare-link downloadnow reads:Downloading src -> dstline per file plus the summary).workersflag is registered in the JSON help manifest, and the generated command docs, README, and changelog are updated.CI changes
govulncheck@latestis pinned tov1.7.0:latestnow resolves to x/vuln v1.8.0, which requires Go 1.26, so every job that installs it was failing under the pinned Go 1.25.13 toolchain before running any tests. This is the same failure currently red onmaster. v1.7.0 is the newest release supporting Go 1.25 and reports no vulnerabilities for this module.Why
Single-stream downloads from Dropbox rarely saturate a fast link. Downloading multiple files concurrently uses the available bandwidth, and tuning the worker count from measured throughput avoids both under-using fast links and hammering the API on slow ones.
Validation
go build ./...,go vet ./...,go test -race ./...,golangci-lint run ./..., andgovulncheck ./...under Go 1.25.13 all pass;gen-docsandgen-json-schemasproduce no further diff.-w Nbounds,-w 1sequential progress, listing-order JSON results and errors, export-only files).Notes
share-link download --recursivestill downloads files sequentially; it got the new progress format but has its own loop and was left out of the parallel change.🤖 Generated with Claude Code
https://claude.ai/code/session_01AwSTGMWogdVigTYWL9fwgN