##// END OF EJS Templates
dispatch: protect against malicious 'hg serve --stdio' invocations (sec)...
dispatch: protect against malicious 'hg serve --stdio' invocations (sec) Some shared-ssh installations assume that 'hg serve --stdio' is a safe command to run for minimally trusted users. Unfortunately, the messy implementation of argument parsing here meant that trying to access a repo named '--debugger' would give the user a pdb prompt, thereby sidestepping any hoped-for sandboxing. Serving repositories over HTTP(S) is unaffected. We're not currently hardening any subcommands other than 'serve'. If your service exposes other commands to users with arbitrary repository names, it is imperative that you defend against repository names of '--debugger' and anything starting with '--config'. The read-only mode of hg-ssh stopped working because it provided its hook configuration to "hg serve --stdio" via --config parameter. This is banned for security reasons now. This patch switches it to directly call ui.setconfig(). If your custom hosting infrastructure relies on passing --config to "hg serve --stdio", you'll need to find a different way to get that configuration into Mercurial, either by using ui.setconfig() as hg-ssh does in this patch, or by placing an hgrc file someplace where Mercurial will read it. mitrandir@fb.com provided some extra fixes for the dispatch code and for hg-ssh in places that I overlooked.

File last commit:

r31556:448acdee default
r32050:77eaf953 4.1.3 stable
Show More
test-mq-qimport.t
342 lines | 7.0 KiB | text/troff | Tads3Lexer
/ tests / test-mq-qimport.t
Matt Mackall
tests: replace exit 80 with #require
r22046 #require killdaemons
Matt Mackall
tests: unify test-mq-qimport
r12464
$ cat > writelines.py <<EOF
> import sys
> path = sys.argv[1]
> args = sys.argv[2:]
> assert (len(args) % 2) == 0
>
> f = file(path, 'wb')
> for i in xrange(len(args)/2):
> count, s = args[2*i:2*i+2]
> count = int(count)
> s = s.decode('string_escape')
> f.write(s*count)
> f.close()
>
> EOF
Yuya Nishihara
tests: write hgrc of more than two lines by using shell heredoc...
r23172 > cat <<EOF >> $HGRCPATH
> [extensions]
> mq =
> [diff]
> git = 1
> EOF
Matt Mackall
tests: unify test-mq-qimport
r12464 $ hg init repo
$ cd repo
Thomas Arendsen Hein
mq: abort if no files or revisions are specified for qimport
r16987 qimport without file or revision
$ hg qimport
abort: no files or revisions specified
[255]
Matt Mackall
tests: unify test-mq-qimport
r12464 qimport non-existing-file
$ hg qimport non-existing-file
abort: unable to read file non-existing-file
[255]
Patrick Mezard
context: make changectx.mutable() benefit from .phase() logic...
r16359 qimport null revision
$ hg qimport -r null
abort: revision -1 is not mutable
timeless
mq: use single quotes in use warning
r29968 (see 'hg help phases' for details)
Patrick Mezard
context: make changectx.mutable() benefit from .phase() logic...
r16359 [255]
$ hg qseries
Matt Mackall
tests: unify test-mq-qimport
r12464 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
Mads Kiilerich
tests: remove the last traces of $HGTMP...
r12642 $ hg diff > url.diff
Matt Mackall
tests: unify test-mq-qimport
r12464 $ hg revert --no-backup foo
$ rm foo
Under unix: file:///foobar/blah
Under windows: file:///c:/foobar/blah
Mads Kiilerich
tests: remove the last traces of $HGTMP...
r12642 $ patchurl=`pwd | tr '\\\\' /`/url.diff
Matt Mackall
tests: unify test-mq-qimport
r12464 $ expr "$patchurl" : "\/" > /dev/null || patchurl="/$patchurl"
$ hg qimport file://"$patchurl"
adding url.diff to series file
Mads Kiilerich
tests: remove the last traces of $HGTMP...
r12642 $ rm url.diff
Matt Mackall
tests: unify test-mq-qimport
r12464 $ 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
Patrick Mezard
mq: make qimport --push push all imported patches (issue3130)...
r16119 $ cat > appendfoo.diff <<EOF
> append foo
Mads Kiilerich
check-code: fix check for trailing whitespace on continued lines too...
r17347 >
Patrick Mezard
mq: make qimport --push push all imported patches (issue3130)...
r16119 > 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
Mads Kiilerich
check-code: fix check for trailing whitespace on continued lines too...
r17347 >
Patrick Mezard
mq: make qimport --push push all imported patches (issue3130)...
r16119 > 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
Matt Mackall
tests: unify test-mq-qimport
r12464 $ hg qfin -a
patch b.diff finalized without changeset message
Mads Kiilerich
mq: generate patch names from first line of description...
r26736 $ touch .hg/patches/append_foo
Matt Mackall
qimport: record imported revs incrementally (issue3874)...
r21965 $ hg qimport -r 'p1(.)::'
$ hg qapplied
Mads Kiilerich
mq: check for reserved patch name with qimport -r (issue5033)...
r27919 append_foo__1
Mads Kiilerich
mq: generate patch names from first line of description...
r26736 append_bar
Matt Mackall
qimport: record imported revs incrementally (issue3874)...
r21965 $ hg qfin -a
Mads Kiilerich
mq: generate patch names from first line of description...
r26736 $ rm .hg/patches/append_foo
Patrick Mezard
mq: make qimport --push push all imported patches (issue3130)...
r16119 $ hg qimport -r 'p1(.)::' -P
Matt Mackall
tests: unify test-mq-qimport
r12464 $ hg qpop -a
Mads Kiilerich
mq: generate patch names from first line of description...
r26736 popping append_bar
popping append_foo
Matt Mackall
tests: unify test-mq-qimport
r12464 patch queue now empty
Mads Kiilerich
mq: generate patch names from first line of description...
r26736 $ hg qdel append_foo
$ hg qdel -k append_bar
Matt Mackall
tests: unify test-mq-qimport
r12464
qimport -e
Mads Kiilerich
mq: generate patch names from first line of description...
r26736 $ hg qimport -e append_bar
adding append_bar to series file
$ hg qdel -k append_bar
Matt Mackall
tests: unify test-mq-qimport
r12464
qimport -e --name newname oldexisitingpatch
Mads Kiilerich
mq: generate patch names from first line of description...
r26736 $ hg qimport -e --name this-name-is-better append_bar
renaming append_bar to this-name-is-better
Matt Mackall
tests: unify test-mq-qimport
r12464 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
Idan Kamara
mq: check patch name is valid before reading imported file
r14395
qimport with bad name, should abort before reading file
timeless@mozdev.org
spelling: nonexistent
r17492 $ hg qimport non-existent-file --name .hg
Idan Kamara
mq: check patch name is valid before reading imported file
r14395 abort: patch name cannot begin with ".hg"
[255]
Idan Kamara
mq: strip all leading slashes from url when importing...
r14396
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
Pierre-Yves David
qimport: when mq.secret=True set qimported revision as secret
r16027
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
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913
$ cd ..
Patrick Mezard
tests: enable even more Windows server tests
r17565
Matt Mackall
tests: drop DAEMON_PIDS from killdaemons calls
r25474 $ killdaemons.py
FUJIWARA Katsunori
mq: use fallback patch name if no alpha-numeric in summary line (issue5025)...
r27513
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
Mads Kiilerich
mq: check for reserved patch name with qimport -r (issue5033)...
r27919
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
Pierre-Yves David
mq: restrict generated patch name to 75 characters (issue5117)...
r28388 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