test-import
435 lines
| 8.9 KiB
| text/plain
|
TextLexer
/ tests / test-import
|
r2513 | #!/bin/sh | ||
hg init a | ||||
|
r2773 | mkdir a/d1 | ||
mkdir a/d1/d2 | ||||
|
r2513 | echo line 1 > a/a | ||
|
r2773 | echo line 1 > a/d1/d2/a | ||
|
r8167 | hg --cwd a ci -Ama | ||
|
r2513 | |||
echo line 2 >> a/a | ||||
hg --cwd a ci -u someone -d '1 0' -m'second change' | ||||
echo % import exported patch | ||||
hg clone -r0 a b | ||||
hg --cwd a export tip > tip.patch | ||||
hg --cwd b import ../tip.patch | ||||
echo % message should be same | ||||
hg --cwd b tip | grep 'second change' | ||||
echo % committer should be same | ||||
hg --cwd b tip | grep someone | ||||
|
r3988 | rm -r b | ||
|
r2513 | |||
|
r7247 | echo % import exported patch with external patcher | ||
cat > dummypatch.py <<EOF | ||||
print 'patching file a' | ||||
file('a', 'wb').write('line2\n') | ||||
EOF | ||||
chmod +x dummypatch.py | ||||
hg clone -r0 a b | ||||
hg --cwd a export tip > tip.patch | ||||
hg --config ui.patch='python ../dummypatch.py' --cwd b import ../tip.patch | ||||
cat b/a | ||||
rm -r b | ||||
|
r2513 | echo % import of plain diff should fail without message | ||
hg clone -r0 a b | ||||
hg --cwd a diff -r0:1 > tip.patch | ||||
hg --cwd b import ../tip.patch | ||||
|
r3988 | rm -r b | ||
|
r2513 | |||
echo % import of plain diff should be ok with message | ||||
hg clone -r0 a b | ||||
hg --cwd a diff -r0:1 > tip.patch | ||||
hg --cwd b import -mpatch ../tip.patch | ||||
|
r3988 | rm -r b | ||
|
r2513 | |||
|
r5953 | echo % import of plain diff with specific date and user | ||
hg clone -r0 a b | ||||
hg --cwd a diff -r0:1 > tip.patch | ||||
hg --cwd b import -mpatch -d '1 0' -u 'user@nowhere.net' ../tip.patch | ||||
hg -R b tip -pv | ||||
rm -r b | ||||
|
r5937 | echo % import of plain diff should be ok with --no-commit | ||
hg clone -r0 a b | ||||
hg --cwd a diff -r0:1 > tip.patch | ||||
hg --cwd b import --no-commit ../tip.patch | ||||
hg --cwd b diff --nodates | ||||
rm -r b | ||||
|
r4230 | echo % hg -R repo import | ||
# put the clone in a subdir - having a directory named "a" | ||||
# used to hide a bug. | ||||
mkdir dir | ||||
hg clone -r0 a dir/b | ||||
hg --cwd a export tip > dir/tip.patch | ||||
cd dir | ||||
hg -R b import tip.patch | ||||
cd .. | ||||
rm -r dir | ||||
|
r2513 | echo % import from stdin | ||
hg clone -r0 a b | ||||
hg --cwd a export tip | hg --cwd b import - | ||||
|
r3988 | rm -r b | ||
|
r2513 | |||
|
r10384 | echo % import two patches in one stream | ||
hg init b | ||||
hg --cwd a export 0:tip | hg --cwd b import - | ||||
hg --cwd a id | ||||
hg --cwd b id | ||||
rm -r b | ||||
|
r2513 | echo % override commit message | ||
hg clone -r0 a b | ||||
hg --cwd a export tip | hg --cwd b import -m 'override' - | ||||
hg --cwd b tip | grep override | ||||
|
r3988 | rm -r b | ||
|
r2513 | |||
cat > mkmsg.py <<EOF | ||||
import email.Message, sys | ||||
msg = email.Message.Message() | ||||
|
r5530 | msg.set_payload('email commit message\n' + open('tip.patch', 'rb').read()) | ||
|
r2513 | msg['Subject'] = 'email patch' | ||
msg['From'] = 'email patcher' | ||||
sys.stdout.write(msg.as_string()) | ||||
EOF | ||||
echo % plain diff in email, subject, message body | ||||
hg clone -r0 a b | ||||
hg --cwd a diff -r0:1 > tip.patch | ||||
python mkmsg.py > msg.patch | ||||
hg --cwd b import ../msg.patch | ||||
hg --cwd b tip | grep email | ||||
|
r3988 | rm -r b | ||
|
r2513 | |||
echo % plain diff in email, no subject, message body | ||||
hg clone -r0 a b | ||||
grep -v '^Subject:' msg.patch | hg --cwd b import - | ||||
|
r3988 | rm -r b | ||
|
r2513 | |||
echo % plain diff in email, subject, no message body | ||||
hg clone -r0 a b | ||||
grep -v '^email ' msg.patch | hg --cwd b import - | ||||
|
r3988 | rm -r b | ||
|
r2513 | |||
echo % plain diff in email, no subject, no message body, should fail | ||||
hg clone -r0 a b | ||||
|
r2843 | egrep -v '^(Subject|email)' msg.patch | hg --cwd b import - | ||
|
r3988 | rm -r b | ||
|
r2513 | |||
echo % hg export in email, should use patch header | ||||
hg clone -r0 a b | ||||
hg --cwd a export tip > tip.patch | ||||
python mkmsg.py | hg --cwd b import - | ||||
hg --cwd b tip | grep second | ||||
|
r3988 | rm -r b | ||
|
r2513 | |||
|
r4779 | # subject: duplicate detection, removal of [PATCH] | ||
|
r5418 | # The '---' tests the gitsendmail handling without proper mail headers | ||
|
r4779 | cat > mkmsg2.py <<EOF | ||
import email.Message, sys | ||||
msg = email.Message.Message() | ||||
|
r5418 | msg.set_payload('email patch\n\nnext line\n---\n' + open('tip.patch').read()) | ||
|
r4779 | msg['Subject'] = '[PATCH] email patch' | ||
msg['From'] = 'email patcher' | ||||
sys.stdout.write(msg.as_string()) | ||||
EOF | ||||
echo '% plain diff in email, [PATCH] subject, message body with subject' | ||||
hg clone -r0 a b | ||||
hg --cwd a diff -r0:1 > tip.patch | ||||
python mkmsg2.py | hg --cwd b import - | ||||
hg --cwd b tip --template '{desc}\n' | ||||
rm -r b | ||||
|
r5986 | # We weren't backing up the correct dirstate file when importing many patches | ||
# (issue963) | ||||
echo '% import patch1 patch2; rollback' | ||||
echo line 3 >> a/a | ||||
hg --cwd a ci -m'third change' | ||||
hg --cwd a export -o '../patch%R' 1 2 | ||||
hg clone -qr0 a b | ||||
|
r8523 | hg --cwd b parents --template 'parent: {rev}\n' | ||
|
r5986 | hg --cwd b import ../patch1 ../patch2 | ||
hg --cwd b rollback | ||||
|
r8523 | hg --cwd b parents --template 'parent: {rev}\n' | ||
|
r5986 | rm -r b | ||
|
r4779 | |||
|
r2773 | # bug non regression test | ||
# importing a patch in a subdirectory failed at the commit stage | ||||
echo line 2 >> a/d1/d2/a | ||||
hg --cwd a ci -u someoneelse -d '1 0' -m'subdir change' | ||||
echo % hg import in a subdirectory | ||||
hg clone -r0 a b | ||||
hg --cwd a export tip | sed -e 's/d1\/d2\///' > tip.patch | ||||
|
r2843 | dir=`pwd` | ||
cd b/d1/d2 2>&1 > /dev/null | ||||
|
r2773 | hg import ../../../tip.patch | ||
|
r2843 | cd $dir | ||
|
r2773 | echo "% message should be 'subdir change'" | ||
hg --cwd b tip | grep 'subdir change' | ||||
echo "% committer should be 'someoneelse'" | ||||
hg --cwd b tip | grep someoneelse | ||||
echo "% should be empty" | ||||
hg --cwd b status | ||||
|
r5548 | |||
# Test fuzziness (ambiguous patch location, fuzz=2) | ||||
echo % test fuzziness | ||||
hg init fuzzy | ||||
cd fuzzy | ||||
echo line1 > a | ||||
echo line0 >> a | ||||
echo line3 >> a | ||||
hg ci -Am adda | ||||
echo line1 > a | ||||
echo line2 >> a | ||||
echo line0 >> a | ||||
echo line3 >> a | ||||
hg ci -m change a | ||||
hg export tip > tip.patch | ||||
hg up -C 0 | ||||
echo line1 > a | ||||
echo line0 >> a | ||||
echo line1 >> a | ||||
echo line0 >> a | ||||
hg ci -m brancha | ||||
|
r10524 | hg import --no-commit -v tip.patch | ||
hg revert -a | ||||
echo '% test fuzziness with eol=auto' | ||||
hg --config patch.eol=auto import --no-commit -v tip.patch | ||||
|
r5548 | cd .. | ||
|
r5852 | |||
# Test hunk touching empty files (issue906) | ||||
hg init empty | ||||
cd empty | ||||
touch a | ||||
touch b1 | ||||
touch c1 | ||||
echo d > d | ||||
hg ci -Am init | ||||
echo a > a | ||||
echo b > b1 | ||||
hg mv b1 b2 | ||||
echo c > c1 | ||||
hg copy c1 c2 | ||||
rm d | ||||
touch d | ||||
hg diff --git | ||||
hg ci -m empty | ||||
hg export --git tip > empty.diff | ||||
hg up -C 0 | ||||
hg import empty.diff | ||||
for name in a b1 b2 c1 c2 d; | ||||
do | ||||
echo % $name file | ||||
test -f $name && cat $name | ||||
done | ||||
cd .. | ||||
|
r6179 | # Test importing a patch ending with a binary file removal | ||
echo % test trailing binary removal | ||||
hg init binaryremoval | ||||
cd binaryremoval | ||||
echo a > a | ||||
python -c "file('b', 'wb').write('a\x00b')" | ||||
hg ci -Am addall | ||||
hg rm a | ||||
hg rm b | ||||
hg st | ||||
hg ci -m remove | ||||
hg export --git . > remove.diff | ||||
cat remove.diff | grep git | ||||
hg up -C 0 | ||||
hg import remove.diff | ||||
hg manifest | ||||
cd .. | ||||
|
r6295 | echo % 'test update+rename with common name (issue 927)' | ||
hg init t | ||||
cd t | ||||
touch a | ||||
hg ci -Am t | ||||
echo a > a | ||||
# Here, bfile.startswith(afile) | ||||
hg copy a a2 | ||||
hg ci -m copya | ||||
hg export --git tip > copy.diff | ||||
hg up -C 0 | ||||
hg import copy.diff | ||||
echo % view a | ||||
# a should contain an 'a' | ||||
cat a | ||||
echo % view a2 | ||||
# and a2 should have duplicated it | ||||
cat a2 | ||||
cd .. | ||||
|
r6520 | |||
echo % 'test -p0' | ||||
hg init p0 | ||||
cd p0 | ||||
echo a > a | ||||
hg ci -Am t | ||||
hg import -p0 - << EOF | ||||
foobar | ||||
--- a Sat Apr 12 22:43:58 2008 -0400 | ||||
+++ a Sat Apr 12 22:44:05 2008 -0400 | ||||
@@ -1,1 +1,1 @@ | ||||
-a | ||||
+bb | ||||
EOF | ||||
hg status | ||||
cat a | ||||
cd .. | ||||
|
r6758 | |||
echo % 'test paths outside repo root' | ||||
mkdir outside | ||||
touch outside/foo | ||||
hg init inside | ||||
cd inside | ||||
hg import - <<EOF | ||||
diff --git a/a b/b | ||||
rename from ../outside/foo | ||||
rename to bar | ||||
EOF | ||||
cd .. | ||||
|
r7402 | |||
echo '% test import with similarity (issue295)' | ||||
hg init sim | ||||
cd sim | ||||
echo 'this is a test' > a | ||||
hg ci -Ama | ||||
cat > ../rename.diff <<EOF | ||||
diff --git a/a b/a | ||||
deleted file mode 100644 | ||||
--- a/a | ||||
+++ /dev/null | ||||
@@ -1,1 +0,0 @@ | ||||
-this is a test | ||||
diff --git a/b b/b | ||||
new file mode 100644 | ||||
--- /dev/null | ||||
+++ b/b | ||||
@@ -0,0 +1,2 @@ | ||||
+this is a test | ||||
+foo | ||||
EOF | ||||
hg import --no-commit -v -s 1 ../rename.diff | ||||
hg st -C | ||||
hg revert -a | ||||
rm b | ||||
hg import --no-commit -v -s 100 ../rename.diff | ||||
hg st -C | ||||
cd .. | ||||
|
r7971 | |||
echo '% add empty file from the end of patch (issue 1495)' | ||||
hg init addemptyend | ||||
cd addemptyend | ||||
touch a | ||||
hg addremove | ||||
hg ci -m "commit" | ||||
cat > a.patch <<EOF | ||||
diff --git a/a b/a | ||||
--- a/a | ||||
+++ b/a | ||||
@@ -0,0 +1,1 @@ | ||||
+a | ||||
diff --git a/b b/b | ||||
new file mode 100644 | ||||
EOF | ||||
hg import --no-commit a.patch | ||||
cd .. | ||||
|
r9573 | |||
|
r9328 | echo '% create file when source is not /dev/null' | ||
cat > create.patch <<EOF | ||||
diff -Naur proj-orig/foo proj-new/foo | ||||
--- proj-orig/foo 1969-12-31 16:00:00.000000000 -0800 | ||||
+++ proj-new/foo 2009-07-17 16:50:45.801368000 -0700 | ||||
@@ -0,0 +1,1 @@ | ||||
+a | ||||
EOF | ||||
|
r10745 | # some people have patches like the following too | ||
cat > create2.patch <<EOF | ||||
diff -Naur proj-orig/foo proj-new/foo | ||||
--- proj-orig/foo.orig 1969-12-31 16:00:00.000000000 -0800 | ||||
+++ proj-new/foo 2009-07-17 16:50:45.801368000 -0700 | ||||
@@ -0,0 +1,1 @@ | ||||
+a | ||||
EOF | ||||
|
r9328 | hg init oddcreate | ||
cd oddcreate | ||||
hg import --no-commit ../create.patch | ||||
cat foo | ||||
|
r10745 | rm foo | ||
hg revert foo | ||||
hg import --no-commit ../create2.patch | ||||
cat foo | ||||
|
r9576 | |||
|
r9573 | echo % 'first line mistaken for email headers (issue 1859)' | ||
hg init emailconfusion | ||||
cd emailconfusion | ||||
cat > a.patch <<EOF | ||||
module: summary | ||||
description | ||||
diff -r 000000000000 -r 9b4c1e343b55 test.txt | ||||
--- /dev/null | ||||
+++ b/a | ||||
@@ -0,0 +1,1 @@ | ||||
+a | ||||
EOF | ||||
hg import -d '0 0' a.patch | ||||
hg parents -v | ||||
cd .. | ||||
|
r10729 | echo % '--- in commit message' | ||
hg init commitconfusion | ||||
cd commitconfusion | ||||
cat > a.patch <<EOF | ||||
module: summary | ||||
--- description | ||||
diff --git a/a b/a | ||||
new file mode 100644 | ||||
--- /dev/null | ||||
+++ b/a | ||||
@@ -0,0 +1,1 @@ | ||||
+a | ||||
EOF | ||||
hg import -d '0 0' a.patch | ||||
hg parents -v | ||||
cd .. | ||||
|
r10501 | echo '% tricky header splitting' | ||
cat > trickyheaders.patch <<EOF | ||||
From: User A <user@a> | ||||
Subject: [PATCH] from: tricky! | ||||
# HG changeset patch | ||||
# User User B | ||||
# Date 1266264441 18000 | ||||
# Branch stable | ||||
# Node ID f2be6a1170ac83bf31cb4ae0bad00d7678115bc0 | ||||
# Parent 0000000000000000000000000000000000000000 | ||||
from: tricky! | ||||
That is not a header. | ||||
diff -r 000000000000 -r f2be6a1170ac foo | ||||
--- /dev/null | ||||
+++ b/foo | ||||
@@ -0,0 +1,1 @@ | ||||
+foo | ||||
EOF | ||||
hg init trickyheaders | ||||
cd trickyheaders | ||||
hg import -d '0 0' ../trickyheaders.patch | ||||
hg export --git tip | ||||
cd .. | ||||