<div dir="ltr">Was playing with the new cpio command and spotted a few oddities. Some of which I'm not sure are bugs or WAI?<div><br></div><div>1. cpio -i might not preserve mtime, due to later entries might modify previous entries' mtime.</div><div><br></div><div>$ mkdir a && touch a/b</div><div>$ touch -d @0 a a/b</div><div>$ ls -al a</div><div>total 8<br>drwxr-xr-x 2 yochiang primarygroup 4096 Jan  1  1970 .<br>drwxr-xr-x 4 yochiang primarygroup 4096 Apr 22 20:35 ..<br>-rw-r--r-- 1 yochiang primarygroup    0 Jan  1  1970 b<br></div><div><br></div><div>$ # both a/ and a/b have timestamp at epoch+0</div><div>$ find a | toybox cpio -H newc -o >a.cpio</div><div>$ mkdir stage && cd stage</div><div>$ toybox cpio -i <../a.cpio</div><div>$ ls -al a</div><div>total 8<br>drwxr-xr-x 2 yochiang primarygroup 4096 Apr 22 20:37 .<br>drwxr-xr-x 3 yochiang primarygroup 4096 Apr 22 20:37 ..<br>-rw-r--r-- 1 yochiang primarygroup    0 Jan  1  1970 b<br></div><div><br></div><div>The timestamp of a/b is correct, but a/ isn't. This is because a/ 's timestamp was updated when we create a/b.</div><div><br></div><div>Not sure if this is a design choice to simplify code?</div><div>Fixing this could mean we need a "fix-up" phase after all entries are extracted and fix up all the extracted file's st_mtime, which means we would memorize the list of all files we extract, which doesn't sound like a good idea in terms of memory consumption?</div><div><div><br></div><div>2. Archives created by cpio command are non-deterministic due to unstable inode numbers.</div><div><br></div><div>$ # using the same a.cpio from previous example</div><div>$ toybox cpio -idu <../a.cpio</div><div>$ find a | toybox cpio -H newc -o | sha1sum</div><div>d17aa2355dc17239b90cae724d74d6a56bef67c3  -<br></div><div>$ rm -rf ./*</div><div><div></div><div>$ toybox cpio -idu <../a.cpio</div><div>$ find a | toybox cpio -H newc -o | sha1sum</div></div><div>bf1428382bdb9240fedb38c46746a30d25ae4daa  -<br></div><div><br></div><div>Even though the source files are exactly the same, the produced archives have different contents. Upon close inspection the diff happens in the st_ino and st_mtime field.</div><div><br></div><div>How about we add an option, say "-s" for "stable" or "-P" for "Portability", that changes the output to have deterministic output by renumbering st_ino, st_mtime, st_dev and such?</div><div><br></div><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><table width="90%" border="0" cellspacing="0" cellpadding="0" style="margin:0px;padding:0px;font-family:"Times New Roman";max-width:348px"><tbody style="margin:0px;padding:0px"><tr style="margin:0px;padding:0px"><td style="padding:0px"><table border="0" cellspacing="0" cellpadding="0" style="margin:0px;padding:20px 0px 0px"><tbody style="margin:0px;padding:0px"><tr style="margin:0px;padding:0px"><td valign="top" style="padding:0px 20px 0px 0px;vertical-align:top;border-right:1px solid rgb(213,213,213)"><img src="https://i.imgur.com/eGpkLls.png" width="200" height="64"><br></td><td style="padding:0px 0px 0px 20px"><table border="0" cellspacing="0" cellpadding="0" style="margin:0px;padding:0px"><tbody style="margin:0px;padding:0px"><tr style="margin:0px;padding:0px"><td colspan="2" style="font-family:Arial,Helvetica,Verdana,sans-serif;padding:1px 0px 5px;font-size:13px;line-height:13px;color:rgb(56,58,53);font-weight:700">Yi-yo Chiang</td></tr><tr style="margin:0px;padding:0px"><td colspan="2" style="font-family:Arial,Helvetica,Verdana,sans-serif;padding:0px 0px 5px;font-size:11px;line-height:13px;color:rgb(56,58,53)">Software Engineer</td></tr><tr style="margin:0px;padding:0px"><td colspan="2" style="font-family:Arial,Helvetica,Verdana,sans-serif;padding:0px 0px 5px;font-size:11px;line-height:13px;color:rgb(56,58,53)"><a href="mailto:yochiang@google.com" target="_blank">yochiang@google.com</a></td></tr><tr style="margin:0px;padding:0px"><td colspan="2" style="font-family:Arial,Helvetica,Verdana,sans-serif;padding:0px 0px 3px;font-size:11px;line-height:13px;color:rgb(3,112,248)"></td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table></div></div></div></div>