On Thu, 2025-12-18 at 11:57 -0500, David A. Wheeler wrote: > > > > On Dec 18, 2025, at 2:31 AM, Luca Di Maio <[email protected]> > > wrote: > > > > Hi all, > > > > I would like to introduce a new tool I have developed that may be > > of > > interest to this community: stampdalf. > > > > Repository: https://github.com/89luca89/stampdalf > > > > stampdalf is a simple command-line utility written in Go that wraps > > arbitrary commands and ensures filesystem timestamp > > reproducibility. > > > > The tool addresses a common challenge in reproducible builds: > > commands > > that modify files often update their access and modification times > > as a > > side effect, even when the actual content remains unchanged or is > > modified in a reproducible way (for example idempotent commands). > > This > > can lead to non-reproducible build artifacts. > > > > How it works: > > > > - Before executing the wrapped command, stampdalf scans the target > > directory tree and records all file timestamps (atime/mtime) > > - The specified command is then executed normally. > > - After command completion, stampdalf restores the original > > timestamps > > for all pre-existing files. Any newly created files are set to Unix > > epoch by default, or to SOURCE_DATE_EPOCH if the environment > > variable > > is set. > > Does it (1) *unilaterally* reset all original timestamps, or (2) only > reset timestamps > of pre-existing files that have the *same* contents (e.g., same > length & cryptographic hash)? > It's the option #2 that I want. > > Thanks! > > --- David A. Wheeler
It resets timestamps of files and directories that are changed, for example: echo hello > rootfs/etc/hosts-new this is idempotent and reproducible, but will result in a new file, that is set to SDE (or 0 if unspecified). mkdir -p rootfs/etc/foo is also idempotent and reproducible and will also change the timestamps of rootfs/etc, so rootfs/etc/foo is set to SDE (or 0 if unspecified) while rootfs/etc resets to the original timestamp recorded at the beginning. sed -i 's/foo/bar/g' /etc/hosts will change the timestamp of that file, and it will be reset to the original value recorded before the command execution. *new* files directories and timestamps are set to 0 or SDE *existing* ones are reset to the original value. In case of (2) you would want a modified file to act like a new one? L.
