|
|
$ cat > writelines.py <<EOF
|
|
|
> import sys
|
|
|
> if sys.version_info[0] >= 3:
|
|
|
> encode = lambda x: x.encode('utf-8').decode('unicode_escape').encode('utf-8')
|
|
|
> else:
|
|
|
> encode = lambda x: x.decode('string_escape')
|
|
|
> path = sys.argv[1]
|
|
|
> args = sys.argv[2:]
|
|
|
> assert (len(args) % 2) == 0
|
|
|
>
|
|
|
> f = open(path, 'wb')
|
|
|
> for i in range(len(args)//2):
|
|
|
> count, s = args[2*i:2*i+2]
|
|
|
> count = int(count)
|
|
|
> s = encode(s)
|
|
|
> f.write(s*count)
|
|
|
> f.close()
|
|
|
>
|
|
|
> EOF
|
|
|
> cat <<EOF >> $HGRCPATH
|
|
|
> [extensions]
|
|
|
> mq =
|
|
|
> [diff]
|
|
|
> git = 1
|
|
|
> EOF
|
|
|
$ hg init repo
|
|
|
$ cd repo
|
|
|
|
|
|
qimport without file or revision
|
|
|
|
|
|
$ hg qimport
|
|
|
abort: no files or revisions specified
|
|
|
[255]
|
|
|
|
|
|
qimport non-existing-file
|
|
|
|
|
|
$ hg qimport non-existing-file
|
|
|
abort: unable to read file non-existing-file
|
|
|
[255]
|
|
|
|
|
|
qimport null revision
|
|
|
|
|
|
$ hg qimport -r null
|
|
|
abort: revision -1 is not mutable
|
|
|
(see 'hg help phases' for details)
|
|
|
[255]
|
|
|
$ hg qseries
|
|
|
|
|
|
import email
|
|
|
|
|
|
$ hg qimport --push -n email - <<EOF
|
|
|
> From: Username in email <test@example.net>
|
|
|
> Subject: [PATCH] Message in email
|
|
|
> Date: Fri, 02 Jan 1970 00:00:00 +0000
|
|
|
>
|
|
|
> Text before patch.
|
|
|
>
|
|
|
> # HG changeset patch
|
|
|
> # User Username in patch <test@example.net>
|
|
|
> # Date 0 0
|
|
|
> # Node ID 1a706973a7d84cb549823634a821d9bdf21c6220
|
|
|
> # Parent 0000000000000000000000000000000000000000
|
|
|
> First line of commit message.
|
|
|
>
|
|
|
> More text in commit message.
|
|
|
> --- confuse the diff detection
|
|
|
>
|
|
|
> diff --git a/x b/x
|
|
|
> new file mode 100644
|
|
|
> --- /dev/null
|
|
|
> +++ b/x
|
|
|
> @@ -0,0 +1,1 @@
|
|
|
> +new file
|
|
|
> Text after patch.
|
|
|
>
|
|
|
> EOF
|
|
|
adding email to series file
|
|
|
applying email
|
|
|
now at: email
|
|
|
|
|
|
hg tip -v
|
|
|
|
|
|
$ hg tip -v
|
|
|
changeset: 0:1a706973a7d8
|
|
|
tag: email
|
|
|
tag: qbase
|
|
|
tag: qtip
|
|
|
tag: tip
|
|
|
user: Username in patch <test@example.net>
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
files: x
|
|
|
description:
|
|
|
First line of commit message.
|
|
|
|
|
|
More text in commit message.
|
|
|
|
|
|
|
|
|
$ hg qpop
|
|
|
popping email
|
|
|
patch queue now empty
|
|
|
$ hg qdelete email
|
|
|
|
|
|
import URL
|
|
|
|
|
|
$ echo foo >> foo
|
|
|
$ hg add foo
|
|
|
$ hg diff > url.diff
|
|
|
$ hg revert --no-backup foo
|
|
|
$ rm foo
|
|
|
|
|
|
Under unix: file:///foobar/blah
|
|
|
Under windows: file:///c:/foobar/blah
|
|
|
|
|
|
$ patchurl=`pwd | tr '\\\\' /`/url.diff
|
|
|
$ expr "$patchurl" : "\/" > /dev/null || patchurl="/$patchurl"
|
|
|
$ hg qimport file://"$patchurl"
|
|
|
adding url.diff to series file
|
|
|
$ rm url.diff
|
|
|
$ hg qun
|
|
|
url.diff
|
|
|
|
|
|
import patch that already exists
|
|
|
|
|
|
$ echo foo2 >> foo
|
|
|
$ hg add foo
|
|
|
$ hg diff > ../url.diff
|
|
|
$ hg revert --no-backup foo
|
|
|
$ rm foo
|
|
|
$ hg qimport ../url.diff
|
|
|
abort: patch "url.diff" already exists
|
|
|
[255]
|
|
|
$ hg qpush
|
|
|
applying url.diff
|
|
|
now at: url.diff
|
|
|
$ cat foo
|
|
|
foo
|
|
|
$ hg qpop
|
|
|
popping url.diff
|
|
|
patch queue now empty
|
|
|
|
|
|
qimport -f
|
|
|
|
|
|
$ hg qimport -f ../url.diff
|
|
|
adding url.diff to series file
|
|
|
$ hg qpush
|
|
|
applying url.diff
|
|
|
now at: url.diff
|
|
|
$ cat foo
|
|
|
foo2
|
|
|
$ hg qpop
|
|
|
popping url.diff
|
|
|
patch queue now empty
|
|
|
|
|
|
build diff with CRLF
|
|
|
|
|
|
$ "$PYTHON" ../writelines.py b 5 'a\n' 5 'a\r\n'
|
|
|
$ hg ci -Am addb
|
|
|
adding b
|
|
|
$ "$PYTHON" ../writelines.py b 2 'a\n' 10 'b\n' 2 'a\r\n'
|
|
|
$ hg diff > b.diff
|
|
|
$ hg up -C
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
|
|
qimport CRLF diff
|
|
|
|
|
|
$ hg qimport b.diff
|
|
|
adding b.diff to series file
|
|
|
$ hg qpush
|
|
|
applying b.diff
|
|
|
now at: b.diff
|
|
|
|
|
|
try to import --push
|
|
|
|
|
|
$ cat > appendfoo.diff <<EOF
|
|
|
> append foo
|
|
|
>
|
|
|
> diff -r 07f494440405 -r 261500830e46 baz
|
|
|
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
|
|
|
> +++ b/baz Thu Jan 01 00:00:00 1970 +0000
|
|
|
> @@ -0,0 +1,1 @@
|
|
|
> +foo
|
|
|
> EOF
|
|
|
|
|
|
$ cat > appendbar.diff <<EOF
|
|
|
> append bar
|
|
|
>
|
|
|
> diff -r 07f494440405 -r 261500830e46 baz
|
|
|
> --- a/baz Thu Jan 01 00:00:00 1970 +0000
|
|
|
> +++ b/baz Thu Jan 01 00:00:00 1970 +0000
|
|
|
> @@ -1,1 +1,2 @@
|
|
|
> foo
|
|
|
> +bar
|
|
|
> EOF
|
|
|
|
|
|
$ hg qimport --push appendfoo.diff appendbar.diff
|
|
|
adding appendfoo.diff to series file
|
|
|
adding appendbar.diff to series file
|
|
|
applying appendfoo.diff
|
|
|
applying appendbar.diff
|
|
|
now at: appendbar.diff
|
|
|
$ hg qfin -a
|
|
|
patch b.diff finalized without changeset message
|
|
|
$ touch .hg/patches/append_foo
|
|
|
$ hg qimport -r 'p1(.)::'
|
|
|
$ hg qapplied
|
|
|
append_foo__1
|
|
|
append_bar
|
|
|
$ hg qfin -a
|
|
|
$ rm .hg/patches/append_foo
|
|
|
$ hg qimport -r 'p1(.)::' -P
|
|
|
$ hg qpop -a
|
|
|
popping append_bar
|
|
|
popping append_foo
|
|
|
patch queue now empty
|
|
|
$ hg qdel append_foo
|
|
|
$ hg qdel -k append_bar
|
|
|
|
|
|
qimport -e
|
|
|
|
|
|
$ hg qimport -e append_bar
|
|
|
adding append_bar to series file
|
|
|
$ hg qdel -k append_bar
|
|
|
|
|
|
qimport -e --name newname oldexisitingpatch
|
|
|
|
|
|
$ hg qimport -e --name this-name-is-better append_bar
|
|
|
renaming append_bar to this-name-is-better
|
|
|
adding this-name-is-better to series file
|
|
|
$ hg qser
|
|
|
this-name-is-better
|
|
|
url.diff
|
|
|
|
|
|
qimport -e --name without --force
|
|
|
|
|
|
$ cp .hg/patches/this-name-is-better .hg/patches/3.diff
|
|
|
$ hg qimport -e --name this-name-is-better 3.diff
|
|
|
abort: patch "this-name-is-better" already exists
|
|
|
[255]
|
|
|
$ hg qser
|
|
|
this-name-is-better
|
|
|
url.diff
|
|
|
|
|
|
qimport -e --name with --force
|
|
|
|
|
|
$ hg qimport --force -e --name this-name-is-better 3.diff
|
|
|
renaming 3.diff to this-name-is-better
|
|
|
adding this-name-is-better to series file
|
|
|
$ hg qser
|
|
|
this-name-is-better
|
|
|
url.diff
|
|
|
|
|
|
import patch of bad filename
|
|
|
|
|
|
$ touch '../ bad.diff'
|
|
|
$ hg qimport '../ bad.diff'
|
|
|
abort: patch name cannot begin or end with whitespace
|
|
|
[255]
|
|
|
$ touch '.hg/patches/ bad.diff'
|
|
|
$ hg qimport -e ' bad.diff'
|
|
|
abort: patch name cannot begin or end with whitespace
|
|
|
[255]
|
|
|
|
|
|
qimport with bad name, should abort before reading file
|
|
|
|
|
|
$ hg qimport non-existent-file --name .hg
|
|
|
abort: patch name cannot begin with ".hg"
|
|
|
[255]
|
|
|
$ hg qimport non-existent-file --name ' foo'
|
|
|
abort: patch name cannot begin or end with whitespace
|
|
|
[255]
|
|
|
$ hg qimport non-existent-file --name 'foo '
|
|
|
abort: patch name cannot begin or end with whitespace
|
|
|
[255]
|
|
|
|
|
|
qimport http:// patch with leading slashes in url
|
|
|
|
|
|
set up hgweb
|
|
|
|
|
|
$ cd ..
|
|
|
$ hg init served
|
|
|
$ cd served
|
|
|
$ echo a > a
|
|
|
$ hg ci -Am patch
|
|
|
adding a
|
|
|
$ hg serve -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
|
|
|
$ cat hg.pid >> $DAEMON_PIDS
|
|
|
|
|
|
$ cd ../repo
|
|
|
$ hg qimport http://localhost:$HGPORT/raw-rev/0///
|
|
|
adding 0 to series file
|
|
|
|
|
|
check qimport phase:
|
|
|
|
|
|
$ hg -q qpush
|
|
|
now at: 0
|
|
|
$ hg phase qparent
|
|
|
1: draft
|
|
|
$ hg qimport -r qparent
|
|
|
$ hg phase qbase
|
|
|
1: draft
|
|
|
$ hg qfinish qbase
|
|
|
$ echo '[mq]' >> $HGRCPATH
|
|
|
$ echo 'secret=true' >> $HGRCPATH
|
|
|
$ hg qimport -r qparent
|
|
|
$ hg phase qbase
|
|
|
1: secret
|
|
|
|
|
|
$ cd ..
|
|
|
|
|
|
$ killdaemons.py
|
|
|
|
|
|
check patch name generation for non-alpha-numeric summary line
|
|
|
|
|
|
$ cd repo
|
|
|
|
|
|
$ hg qpop -a -q
|
|
|
patch queue now empty
|
|
|
$ hg qseries -v
|
|
|
0 U imported_patch_b_diff
|
|
|
1 U 0
|
|
|
2 U this-name-is-better
|
|
|
3 U url.diff
|
|
|
|
|
|
$ echo bb >> b
|
|
|
$ hg commit -m '==++--=='
|
|
|
|
|
|
$ hg qimport -r tip
|
|
|
$ hg qseries -v
|
|
|
0 A 1.diff
|
|
|
1 U imported_patch_b_diff
|
|
|
2 U 0
|
|
|
3 U this-name-is-better
|
|
|
4 U url.diff
|
|
|
|
|
|
check reserved patch names
|
|
|
|
|
|
$ hg qpop -qa
|
|
|
patch queue now empty
|
|
|
$ echo >> b
|
|
|
$ hg commit -m 'status'
|
|
|
$ echo >> b
|
|
|
$ hg commit -m '.'
|
|
|
$ echo >> b
|
|
|
$ hg commit -m 'taken'
|
|
|
$ mkdir .hg/patches/taken
|
|
|
$ touch .hg/patches/taken__1
|
|
|
$ hg qimport -r -3::
|
|
|
$ hg qap
|
|
|
1.diff__1
|
|
|
2.diff
|
|
|
taken__2
|
|
|
|
|
|
check very long patch name
|
|
|
|
|
|
$ hg qpop -qa
|
|
|
patch queue now empty
|
|
|
$ echo >> b
|
|
|
$ hg commit -m 'abcdefghi pqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi pqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi pqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi pqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi pqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi pqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
|
|
$ hg qimport -r .
|
|
|
$ hg qap
|
|
|
abcdefghi_pqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghi_pqrstuvwxyzabcdefg
|
|
|
|