Mercurial > hg
view contrib/fixpax.py @ 26661:2b955fec91e0
merge: abort on file/directory case folding collisions (issue4892)
File/directory case folding collisions cannot be represented on case folding
systems and have to fail.
To detect this and abort early, utilize that for file/directory collisions, a
sorted list of case folded manifest names will have the colliding directory
right after the file.
(This could perhaps be optimized, but this way of doing it also has
directory/directory case folding in mind ... which however not is handled yet.)
author | Mads Kiilerich <madski@unity3d.com> |
---|---|
date | Tue, 13 Oct 2015 00:16:25 +0200 |
parents | d0ef40776999 |
children | 58eb1c5bba58 |
line wrap: on
line source
# fixpax - fix ownership in bdist_mpkg output # # Copyright 2015 Matt Mackall <mpm@selenic.com> # # This software may be used and distributed according to the terms of the # MIT license (http://opensource.org/licenses/MIT) """Set file ownership to 0 in an Archive.pax.gz. Suitable for fixing files bdist_mpkg output: *.mpkg/Contents/Packages/*.pkg/Contents/Archive.pax.gz """ import sys, os, gzip def fixpax(iname, oname): i = gzip.GzipFile(iname) o = gzip.GzipFile(oname, "w") while True: magic = i.read(6) dev = i.read(6) ino = i.read(6) mode = i.read(6) i.read(6) # uid i.read(6) # gid nlink = i.read(6) rdev = i.read(6) mtime = i.read(11) namesize = i.read(6) filesize = i.read(11) name = i.read(int(namesize, 8)) data = i.read(int(filesize, 8)) o.write(magic) o.write(dev) o.write(ino) o.write(mode) o.write("000000") o.write("000000") o.write(nlink) o.write(rdev) o.write(mtime) o.write(namesize) o.write(filesize) o.write(name) o.write(data) if name.startswith("TRAILER!!!"): o.write(i.read()) break o.close() i.close() if __name__ == '__main__': for iname in sys.argv[1:]: print 'fixing file ownership in %s' % iname oname = sys.argv[1] + '.tmp' fixpax(iname, oname) os.rename(oname, iname)