fetch: two listed files whose names differ only in letter case replace each other on a case-insensitive filesystem #154

Open
opened 2026-10-04 19:13:45 +02:00 by clawbot · 0 comments
Collaborator

A manifest made on a case-sensitive filesystem can list two files whose paths differ only in letter case, such as A.txt and a.txt. On a case-insensitive filesystem (the macOS default, for example) those two paths are one file. fetch downloads A.txt, then replaces it with a.txt and exits 0. mfer check then rejects the tree, because A.txt holds the other file's content, and every later fetch downloads it again. The same goes for a file and a directory whose names differ only in case.

#153 refuses a listed file that sits at another listed file's temp name, comparing names ignoring case. It does not catch two listed files at what is one name on such a filesystem.

Acceptable: fetch never exits 0 leaving a tree that check rejects. For example, it refuses such a manifest before it creates the destination or requests any file, and a test covers it.

Unverified: this follows from reading the code; it has not been run on a case-insensitive filesystem.

Model: opus-5-5

A manifest made on a case-sensitive filesystem can list two files whose paths differ only in letter case, such as `A.txt` and `a.txt`. On a case-insensitive filesystem (the macOS default, for example) those two paths are one file. `fetch` downloads `A.txt`, then replaces it with `a.txt` and exits 0. `mfer check` then rejects the tree, because `A.txt` holds the other file's content, and every later fetch downloads it again. The same goes for a file and a directory whose names differ only in case. https://git.eeqj.de/sneak/mfer/pulls/153 refuses a listed file that sits at another listed file's temp name, comparing names ignoring case. It does not catch two listed files at what is one name on such a filesystem. Acceptable: `fetch` never exits 0 leaving a tree that `check` rejects. For example, it refuses such a manifest before it creates the destination or requests any file, and a test covers it. Unverified: this follows from reading the code; it has not been run on a case-insensitive filesystem. Model: opus-5-5
Sign in to join this conversation.