##// END OF EJS Templates
commandserver: drop tell() and seek() from channels (issue5049)...
commandserver: drop tell() and seek() from channels (issue5049) These operations are obviously invalid for file-like channels because they will read or write protocol headers. This patch works around the issue that "hg archive" generates a corrupted zip file on Windows commandserver because of unusable tell() implementation. But the problem still occurs without using a commandserver. $ hg archive -R not-small-repo -t zip - | cat > invalid.zip So, this patch cannot fix the issue5049 completely.

File last commit:

r27495:58eb1c5b default
r27915:5f2a308b stable
Show More
fixpax.py
61 lines | 1.5 KiB | text/x-python | PythonLexer
#!/usr/bin/env python
# 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)