##// 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:

r26420:2fc86d92 default
r32050:77eaf953 4.1.3 stable
Show More
test-convert-cvs-branch.t
196 lines | 3.3 KiB | text/troff | Tads3Lexer
/ tests / test-convert-cvs-branch.t
#require cvs
This is https://bz.mercurial-scm.org/1148
and https://bz.mercurial-scm.org/1447
$ cvscall()
> {
> cvs -f "$@" > /dev/null
> }
$ cat <<EOF >> $HGRCPATH
> [extensions]
> convert =
> [convert]
> cvsps.cache = 0
> EOF
create cvs repository
$ mkdir cvsrepo
$ cd cvsrepo
$ CVSROOT=`pwd`
$ export CVSROOT
$ CVS_OPTIONS=-f
$ export CVS_OPTIONS
$ cd ..
$ rmdir cvsrepo
$ cvscall -q -d "$CVSROOT" init
Create a new project
$ mkdir src
$ cd src
$ echo "1" > a
$ echo "1" > b
$ cvscall import -m "init" src v0 r0 | sort
$ cd ..
$ cvscall co src
cvs checkout: Updating src
$ cd src
Branch the project
$ cvscall tag -b BRANCH
cvs tag: Tagging .
$ cvscall up -r BRANCH > /dev/null
cvs update: Updating .
Modify file a, then b, then a
$ sleep 1
$ echo "2" > a
$ cvscall ci -m "mod a"
cvs commit: Examining .
$ echo "2" > b
$ cvscall ci -m "mod b"
cvs commit: Examining .
$ sleep 1
$ echo "3" > a
$ cvscall ci -m "mod a again"
cvs commit: Examining .
Convert
$ cd ..
$ hg convert src
assuming destination src-hg
initializing destination src-hg repository
connecting to $TESTTMP/cvsrepo
scanning source...
collecting CVS rlog
7 log entries
creating changesets
5 changeset entries
sorting...
converting...
4 Initial revision
3 init
2 mod a
1 mod b
0 mod a again
updating tags
Check the result
$ hg -R src-hg log -G --template '{rev} ({branches}) {desc} files: {files}\n'
o 5 () update tags files: .hgtags
|
| o 4 (BRANCH) mod a again files: a
| |
| o 3 (BRANCH) mod b files: b
| |
| o 2 (BRANCH) mod a files: a
| |
| o 1 (v0) init files:
|/
o 0 () Initial revision files: a b
issue 1447
$ cvscall()
> {
> cvs -f "$@" > /dev/null
> sleep 1
> }
$ cvsci()
> {
> cvs -f ci "$@" >/dev/null
> sleep 1
> }
$ cvscall -Q -d `pwd`/cvsmaster2 init
$ cd cvsmaster2
$ CVSROOT=`pwd`
$ export CVSROOT
$ mkdir foo
$ cd ..
$ cvscall -Q co -d cvswork2 foo
$ cd cvswork2
$ echo foo > a.txt
$ echo bar > b.txt
$ cvscall -Q add a.txt b.txt
$ cvsci -m "Initial commit"
cvs commit: Examining .
$ echo foo > b.txt
$ cvsci -m "Fix b on HEAD"
cvs commit: Examining .
$ echo bar > a.txt
$ cvsci -m "Small fix in a on HEAD"
cvs commit: Examining .
$ cvscall -Q tag -b BRANCH
$ cvscall -Q up -P -rBRANCH
$ echo baz > b.txt
$ cvsci -m "Change on BRANCH in b"
cvs commit: Examining .
$ hg debugcvsps -x --parents foo
collecting CVS rlog
5 log entries
creating changesets
4 changeset entries
---------------------
PatchSet 1
Date: * (glob)
Author: * (glob)
Branch: HEAD
Tag: (none)
Log:
Initial commit
Members:
a.txt:INITIAL->1.1
b.txt:INITIAL->1.1
---------------------
PatchSet 2
Date: * (glob)
Author: * (glob)
Branch: HEAD
Tag: (none)
Branchpoints: BRANCH
Parent: 1
Log:
Fix b on HEAD
Members:
b.txt:1.1->1.2
---------------------
PatchSet 3
Date: * (glob)
Author: * (glob)
Branch: HEAD
Tag: (none)
Branchpoints: BRANCH
Parent: 2
Log:
Small fix in a on HEAD
Members:
a.txt:1.1->1.2
---------------------
PatchSet 4
Date: * (glob)
Author: * (glob)
Branch: BRANCH
Tag: (none)
Parent: 3
Log:
Change on BRANCH in b
Members:
b.txt:1.2->1.2.2.1
$ cd ..