feat(download): implement resume support with .pget metadata state #142

Merged
fuzzy merged 2 commits from feat/resume-support into main 2026-07-13 18:18:50 +00:00
Owner

What

Implement full resume support: save completed chunk state to .pget metadata file alongside the output, restore state on restart, verify file integrity on resume.

Why

Enables interrupted downloads to resume without re-downloading completed chunks.

Testing

  • go vet ./... passes
  • go build ./... passes
  • golangci-lint run ./... passes
  • Pre-commit hooks pass

Breaking Changes

None — Download() signature unchanged.

Notes

  • ResumeState — tracks completed chunks in a thread-safe map with JSON persistence
  • resume.goSaveResumeState, LoadResumeState, MarkDone, IsDone, CleanupResumeState, VerifyFileSize
  • Metadata file: .<filename>.pget alongside output (e.g., .output.pget)
  • On restart with -c: reads .pget state, verifies total size + chunk count match, skips done chunks
  • File integrity: VerifyFileSize compares actual vs expected size; mismatch triggers fresh start
  • State saved after each chunk completion; cleaned up on successful finish
  • On failure with -c, state preserved for future resume

Closes #0052
Closes #0053
Closes #0054
Closes #0055

## What Implement full resume support: save completed chunk state to `.pget` metadata file alongside the output, restore state on restart, verify file integrity on resume. ## Why Enables interrupted downloads to resume without re-downloading completed chunks. ## Testing - [x] `go vet ./...` passes - [x] `go build ./...` passes - [x] `golangci-lint run ./...` passes - [x] Pre-commit hooks pass ## Breaking Changes None — `Download()` signature unchanged. ## Notes - `ResumeState` — tracks completed chunks in a thread-safe map with JSON persistence - `resume.go` — `SaveResumeState`, `LoadResumeState`, `MarkDone`, `IsDone`, `CleanupResumeState`, `VerifyFileSize` - Metadata file: `.<filename>.pget` alongside output (e.g., `.output.pget`) - On restart with `-c`: reads `.pget` state, verifies total size + chunk count match, skips done chunks - File integrity: `VerifyFileSize` compares actual vs expected size; mismatch triggers fresh start - State saved after each chunk completion; cleaned up on successful finish - On failure with `-c`, state preserved for future resume Closes #0052 Closes #0053 Closes #0054 Closes #0055
Closes #0052 Closes #0053 Closes #0054 Closes #0055
docs(roadmap): mark resume support complete
All checks were successful
Test and Release / test (pull_request) Successful in 2m16s
Test and Release / lint (pull_request) Successful in 3m25s
98ab9cd0ac
fuzzy scheduled this pull request to auto merge when all checks succeed 2026-07-13 18:15:31 +00:00
the.auditor left a comment

Review: APPROVED

Verification

  • go vet ./... passes
  • go build ./... passes
  • golangci-lint v2 run ./... 0 issues

Changes

  • internal/downloader/resume.go (new, 112 lines) — ResumeState, JSON persistence, thread-safe chunk tracking, file verification, metadata cleanup
  • internal/downloader/download.goResult.Idx for chunk tracking, workers skip done chunks, state saved after each chunk, restored on resume, cleaned up on success
  • ROADMAP.md — Marks Phase 2 resume items as [x]

Suggestions (non-blocking)

  • #143SaveResumeState errors silently discarded during download
  • #144 — Missing tests for resume state management

Closes #0052, #0053, #0054, #0055 on merge.

## Review: APPROVED ### Verification - `go vet ./...` — ✅ passes - `go build ./...` — ✅ passes - `golangci-lint v2 run ./...` — ✅ 0 issues ### Changes - `internal/downloader/resume.go` (new, 112 lines) — ResumeState, JSON persistence, thread-safe chunk tracking, file verification, metadata cleanup - `internal/downloader/download.go` — `Result.Idx` for chunk tracking, workers skip done chunks, state saved after each chunk, restored on resume, cleaned up on success - `ROADMAP.md` — Marks Phase 2 resume items as [x] ### Suggestions (non-blocking) - #143 — `SaveResumeState` errors silently discarded during download - #144 — Missing tests for resume state management Closes #0052, #0053, #0054, #0055 on merge.
fuzzy merged commit 98ab9cd0ac into main 2026-07-13 18:18:50 +00:00
fuzzy deleted branch feat/resume-support 2026-07-13 18:18:50 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
thwap/pget!142
No description provided.