Correct Content-Type header values for archive downloads.
The content type for both .tar.gz and .tar.bz2 downloads was
application/x-tar, which is correct for .tar files when no
Content-Encoding is present, but is not correct for .tar.gz and .tar.bz2
files unless Content-Encoding is set to gzip or x-bzip2, respectively.
However, setting Content-Encoding causes browsers to undo that encoding
during download, when a .gz or .bz2 file is usually the desired
artifact. Omitting the Content-Encoding header is preferred to avoid
having browsers uncompress non-render-able files.
Additionally, the Content-Disposition line indicates a final desired
filename with .tar.gz or .tar.bz2 extension which makes providing a
Content-Encoding header inappropriate.
With the current configuration browsers (Chrome and Firefox thus far)
are registering the application/x-tar Content-Type and not .tar
extension and appending that extension, yielding filename.tar.gz.tar as
a final on-disk artifact. This was originally reported here:
http://stackoverflow.com/questions/3753659
I've changed the .tar.gz and .tar.bz2 Content-Type values to
application/x-gzip and application/x-bzip2, respectively. Which yields
correctly named download artifacts on Firefox, Chrome, and IE.
#!/bin/sh
cat > loop.py <<EOF
from mercurial import commands
def loop(ui, loops, **opts):
loops = int(loops)
total = None
if loops >= 0:
total = loops
if opts.get('total', None):
total = int(opts.get('total'))
loops = abs(loops)
for i in range(loops):
ui.progress('loop', i, 'loop.%d' % i, 'loopnum', total)
ui.progress('loop', None, 'loop.done', 'loopnum', total)
commands.norepo += " loop"
cmdtable = {
"loop": (loop, [('', 'total', '', 'override for total')],
'hg loop LOOPS'),
}
EOF
cat > filtercr.py <<EOF
import sys, re
for line in sys.stdin:
line = re.sub(r'\r+[^\n]', lambda m: '\n' + m.group()[-1:], line)
sys.stdout.write(line)
EOF
echo "[extensions]" >> $HGRCPATH
echo "progress=" >> $HGRCPATH
echo "loop=`pwd`/loop.py" >> $HGRCPATH
echo "[progress]" >> $HGRCPATH
echo "assume-tty=1" >> $HGRCPATH
echo '% test default params, display nothing because of delay'
hg -y loop 3 2>&1 | python filtercr.py
echo "delay=0" >> $HGRCPATH
echo "refresh=0" >> $HGRCPATH
echo '% test with delay=0, refresh=0'
hg -y loop 3 2>&1 | python filtercr.py
echo '% test refresh is taken in account'
hg -y --config progress.refresh=100 loop 3 2>&1 | python filtercr.py
echo '% test format options 1'
hg -y --config 'progress.format=number topic item+2' loop 2 2>&1 | python filtercr.py
echo '% test format options 2'
hg -y --config 'progress.format=number item-3 bar' loop 2 2>&1 | python filtercr.py
echo '% test format options and indeterminate progress'
hg -y --config 'progress.format=number item bar' loop -- -2 2>&1 | python filtercr.py
echo "% make sure things don't fall over if count > total"
hg -y loop --total 4 6 2>&1 | python filtercr.py
echo '% test immediate progress completion'
hg -y loop 0 2>&1 | python filtercr.py