Mercurial > hg
view contrib/fixpax.py @ 25328:2cfb0bbf83a1
hooks: replace if-try-finally with a "with" statement
This seems like a textbook case for the new demandimport.deactivated
context manager: check if something must be done, do it, and cleanup
at the end regardless of exceptions.
The diff isn't as bad as it seems. It's just all the whitespace
changes due to needing an extra level of indentation. It looks cleaner
with `hg diff -w`.
author | Jordi Gutiérrez Hermoso <jordigh@octave.org> |
---|---|
date | Thu, 28 May 2015 16:42:04 -0400 |
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)