Mercurial > hg
view tests/test-convert-cvs-synthetic @ 8810:ac92775b3b80
Add patch.eol to ignore EOLs when patching (issue1019)
The intent is to fix many issues involving patching when win32ext is enabled.
With win32ext, the working directory and repository files EOLs are not the same
which means that patches made on a non-win32ext host do not apply cleanly
because of EOLs discrepancies. A theorically correct approach would be
transform either the patched file or the patch content with the
encoding/decoding filters used by win32ext. This solution is tricky to
implement and invasive, instead we prefer to address the win32ext case, by
offering a way to ignore input EOLs when patching and rewriting them when
saving the patched result.
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Mon, 15 Jun 2009 00:03:26 +0200 |
parents | 1f0f01bc86a5 |
children | 56a5f80556f5 |
line wrap: on
line source
#!/bin/sh # This feature requires use of builtin cvsps! "$TESTDIR/hghave" cvs || exit 80 set -e echo "[extensions]" >> $HGRCPATH echo "convert = " >> $HGRCPATH echo "graphlog = " >> $HGRCPATH echo "[convert]" >> $HGRCPATH echo "cvsps=builtin" >> $HGRCPATH echo % create cvs repository with one project mkdir cvsrepo cd cvsrepo CVSROOT=`pwd` export CVSROOT CVS_OPTIONS=-f export CVS_OPTIONS cd .. filterpath() { eval "$@" | sed "s:$CVSROOT:*REPO*:g" } cvscall() { echo cvs -f "$@" cvs -f "$@" 2>&1 } # output of 'cvs ci' varies unpredictably, so just discard it cvsci() { echo cvs -f ci "$@" cvs -f ci "$@" >/dev/null 2>&1 } filterpath cvscall -d "$CVSROOT" init mkdir cvsrepo/proj cvscall -q co proj echo % create file1 on the trunk cd proj touch file1 cvscall -Q add file1 cvsci -m"add file1 on trunk" file1 echo % create two branches cvscall -q tag -b v1_0 cvscall -q tag -b v1_1 echo % create file2 on branch v1_0 cvscall -Q up -rv1_0 touch file2 cvscall -Q add file2 cvsci -m"add file2" file2 echo % create file3, file4 on branch v1_1 cvscall -Q up -rv1_1 touch file3 touch file4 cvscall -Q add file3 file4 cvsci -m"add file3, file4 on branch v1_1" file3 file4 echo % merge file2 from v1_0 to v1_1 cvscall -Q up -jv1_0 cvsci -m"MERGE from v1_0: add file2" # Step things up a notch: now we make the history really hairy, with # changes bouncing back and forth between trunk and v1_2 and merges # going both ways. (I.e., try to model the real world.) echo "% create branch v1_2" cvscall -Q up -A cvscall -q tag -b v1_2 echo "% create file5 on branch v1_2" cvscall -Q up -rv1_2 touch file5 cvs -Q add file5 cvsci -m"add file5 on v1_2" echo "% create file6 on trunk post-v1_2" cvscall -Q up -A touch file6 cvscall -Q add file6 cvsci -m"add file6 on trunk post-v1_2" echo "% merge file5 from v1_2 to trunk" cvscall -Q up -A cvscall -Q up -jv1_2 file5 cvsci -m"MERGE from v1_2: add file5" echo "% merge file6 from trunk to v1_2" cvscall -Q up -rv1_2 cvscall up -jHEAD file6 cvsci -m"MERGE from HEAD: add file6" echo % cvs rlog output filterpath cvscall -q rlog proj | egrep '^(RCS file|revision)' echo "% convert to hg (#1)" cd .. filterpath hg convert --datesort proj proj.hg echo "% hg glog output (#1)" hg -R proj.hg glog --template "{rev} {desc}\n" echo "% convert to hg (#2: with merge detection)" filterpath hg convert \ --config convert.cvsps.mergefrom="\"^MERGE from (\S+):\"" \ --datesort \ proj proj.hg2 echo "% hg glog output (#2)" hg -R proj.hg2 glog --template "{rev} {desc}\n"