← Back to issue list

fix(sources): detect local file source changes

View original Github issue

Metadata

Project
craft-parts
Number
#1599
Type
pull request
State
open
Author
gcomneno
Labels
—
Created
Updated
Closed
—

Current evaluation

⚠️ This summary may be outdated — the issue content or evaluation prompts have changed since this evaluation was made.

Adds mtime-based change detection for local file sources in FileSourceHandler (file:// counted as local), exposing outdated files and re-pulling on update. Fixes #1364. Approved by 2 reviewers; 1 open comment, OSV-scanner failing, slow test jobs still pending.

Suggested action: needs review

Reason: Approved by 2 reviewers against a clean, small additive diff (+117/-0 in craft_parts/sources/base.py plus tests/unit/sources/test_base.py) that implements existing source-handler hooks rather than changing interfaces, and the author states they 'addressed the review feedback in the latest commit' (2026-05-27) covering file:// handling, resetting stale outdated-file sets, and get_outdated_files() docs. It is held back only by the failing 'Security scan / OSV-scanner' check (unrelated to a no-dependency-change diff) and 18 still-pending slow-test matrix jobs, plus1 unresolved comment. Confidence is reduced because I could not read the diff or source (repo tools returned 'No pinned SHA available for craft-parts'), so correctness of the mtime-vs-state-file comparison and pull-path re-run is unverified.

Evaluated by: mr-cal-bot

Impact: 55 Quick Win: 29 Complexity: 28 Confidence: 66 Actionability: 74

Issue body

## Summary Fixes #1364. This adds change detection support for local file sources handled by `FileSourceHandler`. When a local file source is newer than the pull state file, the source handler now reports it as outdated, exposes the changed file through `get_outdated_files()`, and updates the pulled source by re-running the file source pull path. Remote URL-based file sources are left unchanged and are not treated as locally outdated. `file://` sources are treated as local files for change detection. ## Validation - `uv run pytest -q tests/unit/sources/test_base.py -rs` - `uv run pytest -q tests/unit/sources/test_base.py tests/unit/sources/test_file_source.py tests/unit/sources/test_tar_source.py tests/unit/sources/test_zip_source.py tests/unit/sources/test_deb_source.py tests/unit/sources/test_rpm_source.py tests/unit/sources/test_snap_source.py tests/unit/sources/test_sevenzip_source.py -rs` - `uv run ruff check craft_parts/sources/base.py tests/unit/sources/test_base.py` - `uv run ruff format --check craft_parts/sources/base.py tests/unit/sources/test_base.py` - `git diff --check`

Evaluation history

Date Model Scores Action Summary
stealth/space-bunny-alpha
Impact: 55
Quick Win: 29
Complexity: 28
Confidence: 66
Actionability: 74
needs review Adds mtime-based change detection for local file sources in FileSourceHandler (file:// counted as local), exposing outdated files and re-pulling on update. Fixes #1364. Approved by 2 reviewers; 1 open comment, OSV-scanner failing, slow test jobs still pending.
qwen/qwen3.8-27b
Impact: 50
Quick Win: 21
Complexity: 30
Confidence: 80
Actionability: 60
needs review Adds change detection to FileSourceHandler for local file sources (mtime vs state file, file:// treated as local), exposing outdated files and re-pulling on update. Fixes craft-parts#1364. Approved by 2 reviewers; 1 unresolved comment; OSV-scanner failing, most test jobs pending.
stealth/space-bunny-alpha
Impact: 45
Quick Win: 22
Complexity: 31
Confidence: 93
Actionability: 72
needs review Adds mtime-based change detection and outdated-file tracking for local and file:// sources; approved with one unresolved comment and CI suites still pending.
qwen/qwen3.6-35b-a3b
Impact: 55
Quick Win: 36
Staleness: 5
Complexity: 35
Confidence: 75
needs review Adds change detection for local file sources in FileSourceHandler, fixing issue #1364 where file modifications weren't detected. PR has passing CI, addressed review feedback, and awaits maintainer review.
qwen/qwen3.6-35b-a3b
Impact: 50
Quick Win: 35
Staleness: 0
Complexity: 30
Confidence: 70
needs review Adds change detection for local file sources in FileSourceHandler. Fixes #1364. 116 additions, 0 deletions. Has 1 unresolved review comment and many failing CI checks.
qwen/qwen3.6-35b-a3b
Impact: 55
Quick Win: 30
Staleness: 10
Complexity: 45
Confidence: 75
needs review Adds change detection for local file sources in FileSourceHandler, fixing issue #1364. Author addressed review feedback; 1 unresolved comment remains. Some CI checks failing.
qwen3.6-35b-a3b-mtp-q6
Impact: 55
Quick Win: 36
Staleness: 75
Complexity: 35
Confidence: 65
needs review Adds change detection for local file sources in FileSourceHandler, fixing issue #1364. Has 2 unresolved review comments and some failing CI checks.
qwen/qwen3.6-35b-a3b
Staleness: 65
Complexity: 35
Confidence: 80
needs review Adds change detection for local file sources in FileSourceHandler, treating file:// as local. Currently pending maintainer review with unresolved comments and mixed CI results.
qwen3.6-35b-a3b-mtp-q6
Staleness: 65
Complexity: 25
Confidence: 85
needs review Adds change detection for local file sources in FileSourceHandler. Treats file:// as local, leaves remote URLs unchanged. Addresses review feedback, tests pass, awaiting maintainer review.

Update history

Date Change
updated
updated
updated
updated
updated
updated

Related work

  • Related To: canonical/craft-parts#1364 (confidence 97%)

    Open, triaged bug this PR claims to fix: 'File source handler ignores changes to the file', affecting dump and Python plugin cases.

  • Related To: snapcraft#2167 (confidence 80%)

    Merged downstream snapcraft PR 'many: detect local source changes' (LP: #1583718) that consumes source outdated-change detection; this PR supplies the craft-parts file-source half of that flow.

Related issues

Issue Project State Summary Similarity
#2167 many: detect local source changes snapcraft merged Merged #2167, adding timestamp-based detection of local source changes so pull and subsequent steps refresh when local sources are newer; resolves LP #1583718.
73%