From 9956cd7539d232ff711b14a623170f1a9629ff9a Mon Sep 17 00:00:00 2001 From: Ryan Williams Date: Mon, 23 Feb 2026 00:07:24 -0500 Subject: [PATCH] Fix `_filter_changed` to pass `protocol` to `Meta.from_info` `Meta.from_info(info)` without the `protocol` arg only checks lowercase `"etag"` key, but S3's `s3fs` returns ETags with uppercase `"ETag"`. This causes `meta.etag` to always be `None` for S3 sources, breaking `import-url --no-download` + `pull` (treeverse/dvc#10594). The fix matches the correct usage in `save.py:_meta_matches`, which already passes `fs.protocol`. Co-Authored-By: Claude Opus 4.6 --- src/dvc_data/index/fetch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dvc_data/index/fetch.py b/src/dvc_data/index/fetch.py index 041906b0..dc296f58 100644 --- a/src/dvc_data/index/fetch.py +++ b/src/dvc_data/index/fetch.py @@ -76,7 +76,7 @@ def _filter_changed(index): ret.add(entry) continue - meta = Meta.from_info(info) + meta = Meta.from_info(info, data_fs.protocol) old = getattr(entry.meta, data_fs.PARAM_CHECKSUM, None) if entry.meta else None new = getattr(meta, data_fs.PARAM_CHECKSUM, None)