objectif
Normaliser metadata pour des tar identiques à contenu égal.
code minimal
import tarfile, io, time
buf = io.BytesIO()
with tarfile.open(fileobj=buf, mode="w") as tar:
info = tarfile.TarInfo("a.txt")
info.size = 1
info.mtime = 0
info.uid = info.gid = 0
info.uname = info.gname = ""
tar.addfile(info, io.BytesIO(b"x"))
data1 = buf.getvalue()
data2 = buf.getvalue()
print(data1 == data2) # attendu: True
utilisation
import tarfile, io
buf = io.BytesIO()
with tarfile.open(fileobj=buf, mode="w") as tar:
ti = tarfile.TarInfo("b.txt"); ti.size = 1; ti.mtime = 0
tar.addfile(ti, io.BytesIO(b"y"))
print(len(buf.getvalue()) > 0)
variante(s) utile(s)
import tarfile
print(hasattr(tarfile, "TarInfo"))
notes
- Fixez mtime, uid/gid, uname/gname et l’ordre des entrées pour la reproductibilité.
- Évitez PAX headers variables (ajustez format si nécessaire).