tests/test-convert-darcs
author Ry4an Brase <ry4an-hg@ry4an.org>
Mon, 20 Sep 2010 14:56:08 -0500
branchstable
changeset 12570 a72c5ff1260c
parent 12393 84ceedcfeb6a
child 12407 5bfab61c2fee
child 12717 89df79b3c011
permissions -rwxr-xr-x
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

"$TESTDIR/hghave" darcs || exit 80

echo "[extensions]" >> $HGRCPATH
echo "convert=" >> $HGRCPATH
echo 'graphlog =' >> $HGRCPATH

DARCS_EMAIL='test@example.org'; export DARCS_EMAIL
HOME=`pwd`/do_not_use_HOME_darcs; export HOME

# skip if we can't import elementtree
mkdir dummy
mkdir dummy/_darcs
if hg convert dummy 2>&1 | grep ElementTree > /dev/null; then
    echo 'skipped: missing feature: elementtree module'
    exit 80
fi

echo '% try converting darcs1 repository'
hg convert -s darcs "$TESTDIR/darcs/darcs1" 2>&1 | grep darcs-1.0

echo % initialize darcs repo
mkdir darcs-repo
cd darcs-repo
darcs init
echo a > a
darcs record -a -l -m p0
cd ..

echo % branch and update
darcs get darcs-repo darcs-clone >/dev/null
cd darcs-clone
echo c >> a
echo c > c
darcs record -a -l -m p1.1
cd ..

echo % update source
cd darcs-repo
echo b >> a
echo b > b
darcs record -a -l -m p1.2

echo % merge branch
darcs pull -a ../darcs-clone
sleep 1
echo e > a
echo f > f
mkdir dir
echo d > dir/d
echo d > dir/d2
darcs record -a -l -m p2

echo % test file and directory move
darcs mv f ff
# Test remove + move
darcs remove dir/d2
rm dir/d2
darcs mv dir dir2
darcs record -a -l -m p3

echo % test utf-8 commit message and author
echo g > g
# darcs is encoding agnostic, so it takes whatever bytes it's given
darcs record -a -l -m 'p4: desc ñ' -A 'author ñ'

glog()
{
    HGENCODING=utf-8 hg glog --template '{rev} "{desc|firstline}" ({author}) files: {files}\n' "$@"
}

cd ..
hg convert darcs-repo darcs-repo-hg
# The converter does not currently handle patch conflicts very well.
# When they occur, it reverts *all* changes and moves forward,
# letting the conflict resolving patch fix collisions.
# Unfortunately, non-conflicting changes, like the addition of the
# "c" file in p1.1 patch are reverted too.
# Just to say that manifest not listing "c" here is a bug.
glog -R darcs-repo-hg
hg up -q -R darcs-repo-hg
hg -R darcs-repo-hg manifest --debug