checkout --tar: mtime=0 is problematic for some software
Summary
Creating tar archives with bst artifact checkout --tar ...
results in an
archive where all the mtime
s are set to zero.
There is more than one example where files with an mtime of zero are treated as non-existant by other software. e.g.
- This issue on ninja, "Files with zero mtime are treated as nonexistent"
- This code in Template Toolkit.
Steps to reproduce
# Make our archive and get any file out of it:
bst artifact checkout --integrate --deps build --tar sysroot.tar target.bst
tar xf sysroot.tar ./any_file.txt
stat ./any_file.txt | grep Modify
# Modify: 1970-01-01 00:00:00.000000000 +0000
stat --format '%n mtime: %Y' ./any_file.txt
# ./some_file.txt mtime: 0
What is the current bug behavior?
All the mtimes are zero.
What is the expected correct behavior?
If all the mtimes are set to a specific value, it is non-zero.
Possible fixes
Change the default arguments of export_to_tar
from mtime=0
to mtime=1
.
Other relevant information
The OSTree project project seems to have an intention to move to an mtime of '1':
For this reason, OSTree acts as though all timestamps are set to time_t 0, so that comparisons will be considered up-to-date. Note that for a few releases, OSTree used 1 to fix warnings such as GNU Tar emitting "implausibly old time stamp" with 0; however, until we have a mechanism to transition cleanly to 1, for compatibilty OSTree is reverted to use zero again.
- BuildStream version affected: /milestone %BuildStream_v1.2