##// END OF EJS Templates
dockerlib: allow non-unique uid and gid of $DBUILDUSER (issue4657)...
dockerlib: allow non-unique uid and gid of $DBUILDUSER (issue4657) There are make targets for building mercurial packages for various distributions using docker. One of the preparation steps before building is to create inside the docker image a user with the same uid/gid as the current user on the host system, so that the resulting files have appropriate ownership/permissions. It's possible to run `make docker-<distro>` as a user with uid or gid that is already present in a vanilla docker container of that distibution. For example, issue4657 is about failing to build fedora packages as a user with uid=999 and gid=999 because these ids are already used in fedora, and groupadd fails. useradd would fail too, if the flow ever got to it (and there was a user with such uid already). A straightforward (maybe too much) way to fix this is to allow non-unique uid and gid for the new user and group that get created inside the image. I'm not sure of the implications of this, but marmoute encouraged me to try and send this patch for stable.

File last commit:

r26829:58f1645f stable
r26888:271a8020 stable
Show More
test-ssh-bundle1.t
541 lines | 16.0 KiB | text/troff | Tads3Lexer
/ tests / test-ssh-bundle1.t
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 This test is a duplicate of 'test-http.t' feel free to factor out
parts that are not bundle1/bundle2 specific.
$ cat << EOF >> $HGRCPATH
> [experimental]
> # This test is dedicated to interaction through old bundle
> bundle2-exp = False
> EOF
This test tries to exercise the ssh functionality with a dummy script
creating 'remote' repo
$ hg init remote
$ cd remote
$ echo this > foo
$ echo this > fooO
$ hg ci -A -m "init" foo fooO
insert a closed branch (issue4428)
$ hg up null
0 files updated, 0 files merged, 2 files removed, 0 files unresolved
$ hg branch closed
marked working directory as branch closed
(branches are permanent and global, did you want a bookmark?)
$ hg ci -mc0
$ hg ci --close-branch -mc1
$ hg up -q default
configure for serving
$ cat <<EOF > .hg/hgrc
> [server]
> uncompressed = True
>
> [hooks]
Matt Mackall
tests: simplify printenv calls...
r25478 > changegroup = printenv.py changegroup-in-remote 0 ../dummylog
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 > EOF
$ cd ..
repo not found error
Matt Harbison
tests: restore 'python' and '$TESTDIR/' for dummyssh invocation...
r25495 $ hg clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/nonexistent local
Yuya Nishihara
dispatch: error out on invalid -R path even if optionalrepo (issue4805) (BC)...
r26142 remote: abort: repository nonexistent not found!
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 abort: no suitable response from remote hg!
[255]
non-existent absolute path
Matt Harbison
tests: restore 'python' and '$TESTDIR/' for dummyssh invocation...
r25495 $ hg clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy//`pwd`/nonexistent local
Yuya Nishihara
dispatch: error out on invalid -R path even if optionalrepo (issue4805) (BC)...
r26142 remote: abort: repository /$TESTTMP/nonexistent not found!
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 abort: no suitable response from remote hg!
[255]
clone remote via stream
Matt Harbison
tests: restore 'python' and '$TESTDIR/' for dummyssh invocation...
r25495 $ hg clone -e "python \"$TESTDIR/dummyssh\"" --uncompressed ssh://user@dummy/remote local-stream
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 streaming all changes
4 files to transfer, 615 bytes of data
transferred 615 bytes in * seconds (*) (glob)
searching for changes
no changes found
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd local-stream
$ hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
2 files, 3 changesets, 2 total revisions
$ hg branches
default 0:1160648e36ce
$ cd ..
clone bookmarks via stream
$ hg -R local-stream book mybook
Matt Harbison
tests: restore 'python' and '$TESTDIR/' for dummyssh invocation...
r25495 $ hg clone -e "python \"$TESTDIR/dummyssh\"" --uncompressed ssh://user@dummy/local-stream stream2
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 streaming all changes
4 files to transfer, 615 bytes of data
transferred 615 bytes in * seconds (*) (glob)
searching for changes
no changes found
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd stream2
$ hg book
mybook 0:1160648e36ce
$ cd ..
$ rm -rf local-stream stream2
clone remote via pull
Matt Harbison
tests: restore 'python' and '$TESTDIR/' for dummyssh invocation...
r25495 $ hg clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote local
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 requesting all changes
adding changesets
adding manifests
adding file changes
added 3 changesets with 2 changes to 2 files
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
verify
$ cd local
$ hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
2 files, 3 changesets, 2 total revisions
$ echo '[hooks]' >> .hg/hgrc
Matt Mackall
tests: simplify printenv calls...
r25478 $ echo "changegroup = printenv.py changegroup-in-local 0 ../dummylog" >> .hg/hgrc
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375
empty default pull
$ hg paths
default = ssh://user@dummy/remote
Matt Harbison
tests: restore 'python' and '$TESTDIR/' for dummyssh invocation...
r25495 $ hg pull -e "python \"$TESTDIR/dummyssh\""
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 pulling from ssh://user@dummy/remote
searching for changes
no changes found
pull from wrong ssh URL
Matt Harbison
tests: restore 'python' and '$TESTDIR/' for dummyssh invocation...
r25495 $ hg pull -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/doesnotexist
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 pulling from ssh://user@dummy/doesnotexist
Yuya Nishihara
dispatch: error out on invalid -R path even if optionalrepo (issue4805) (BC)...
r26142 remote: abort: repository doesnotexist not found!
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 abort: no suitable response from remote hg!
[255]
local change
$ echo bleah > foo
$ hg ci -m "add"
updating rc
$ echo "default-push = ssh://user@dummy/remote" >> .hg/hgrc
$ echo "[ui]" >> .hg/hgrc
Matt Harbison
tests: restore 'python' and '$TESTDIR/' for dummyssh invocation...
r25495 $ echo "ssh = python \"$TESTDIR/dummyssh\"" >> .hg/hgrc
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375
find outgoing
$ hg out ssh://user@dummy/remote
comparing with ssh://user@dummy/remote
searching for changes
changeset: 3:a28a9d1a809c
tag: tip
parent: 0:1160648e36ce
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: add
find incoming on the remote side
Matt Harbison
tests: restore 'python' and '$TESTDIR/' for dummyssh invocation...
r25495 $ hg incoming -R ../remote -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/local
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 comparing with ssh://user@dummy/local
searching for changes
changeset: 3:a28a9d1a809c
tag: tip
parent: 0:1160648e36ce
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: add
find incoming on the remote side (using absolute path)
Matt Harbison
tests: restore 'python' and '$TESTDIR/' for dummyssh invocation...
r25495 $ hg incoming -R ../remote -e "python \"$TESTDIR/dummyssh\"" "ssh://user@dummy/`pwd`"
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 comparing with ssh://user@dummy/$TESTTMP/local
searching for changes
changeset: 3:a28a9d1a809c
tag: tip
parent: 0:1160648e36ce
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: add
push
$ hg push
pushing to ssh://user@dummy/remote
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
$ cd ../remote
check remote tip
$ hg tip
changeset: 3:a28a9d1a809c
tag: tip
parent: 0:1160648e36ce
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: add
$ hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
2 files, 4 changesets, 3 total revisions
$ hg cat -r tip foo
bleah
$ echo z > z
$ hg ci -A -m z z
created new head
test pushkeys and bookmarks
$ cd ../local
Matt Harbison
tests: restore 'python' and '$TESTDIR/' for dummyssh invocation...
r25495 $ hg debugpushkey --config ui.ssh="python \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote namespaces
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 bookmarks
namespaces
phases
$ hg book foo -r 0
$ hg out -B
comparing with ssh://user@dummy/remote
searching for changed bookmarks
foo 1160648e36ce
$ hg push -B foo
pushing to ssh://user@dummy/remote
searching for changes
no changes found
exporting bookmark foo
[1]
Matt Harbison
tests: restore 'python' and '$TESTDIR/' for dummyssh invocation...
r25495 $ hg debugpushkey --config ui.ssh="python \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote bookmarks
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 foo 1160648e36cec0054048a7edc4110c6f84fde594
$ hg book -f foo
$ hg push --traceback
pushing to ssh://user@dummy/remote
searching for changes
no changes found
updating bookmark foo
[1]
$ hg book -d foo
$ hg in -B
comparing with ssh://user@dummy/remote
searching for changed bookmarks
foo a28a9d1a809c
$ hg book -f -r 0 foo
$ hg pull -B foo
pulling from ssh://user@dummy/remote
no changes found
updating bookmark foo
$ hg book -d foo
$ hg push -B foo
pushing to ssh://user@dummy/remote
searching for changes
no changes found
deleting remote bookmark foo
[1]
a bad, evil hook that prints to stdout
$ cat <<EOF > $TESTTMP/badhook
> import sys
> sys.stdout.write("KABOOM\n")
> EOF
$ echo '[hooks]' >> ../remote/.hg/hgrc
$ echo "changegroup.stdout = python $TESTTMP/badhook" >> ../remote/.hg/hgrc
$ echo r > r
$ hg ci -A -m z r
push should succeed even though it has an unexpected response
$ hg push
pushing to ssh://user@dummy/remote
searching for changes
remote has heads on branch 'default' that are not known locally: 6c0482d977a3
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: KABOOM
$ hg -R ../remote heads
changeset: 5:1383141674ec
tag: tip
parent: 3:a28a9d1a809c
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: z
changeset: 4:6c0482d977a3
parent: 0:1160648e36ce
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: z
clone bookmarks
$ hg -R ../remote bookmark test
$ hg -R ../remote bookmarks
* test 4:6c0482d977a3
Matt Harbison
tests: restore 'python' and '$TESTDIR/' for dummyssh invocation...
r25495 $ hg clone -e "python \"$TESTDIR/dummyssh\"" ssh://user@dummy/remote local-bookmarks
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 requesting all changes
adding changesets
adding manifests
adding file changes
added 6 changesets with 5 changes to 4 files (+1 heads)
updating to branch default
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg -R local-bookmarks bookmarks
test 4:6c0482d977a3
passwords in ssh urls are not supported
(we use a glob here because different Python versions give different
results here)
$ hg push ssh://user:erroneouspwd@dummy/remote
pushing to ssh://user:*@dummy/remote (glob)
abort: password in URL not supported!
[255]
$ cd ..
hide outer repo
$ hg init
Test remote paths with spaces (issue2983):
Matt Harbison
tests: restore 'python' and '$TESTDIR/' for dummyssh invocation...
r25495 $ hg init --ssh "python \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo"
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 $ touch "$TESTTMP/a repo/test"
$ hg -R 'a repo' commit -A -m "test"
adding test
$ hg -R 'a repo' tag tag
Matt Harbison
tests: restore 'python' and '$TESTDIR/' for dummyssh invocation...
r25495 $ hg id --ssh "python \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo"
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 73649e48688a
Matt Harbison
tests: restore 'python' and '$TESTDIR/' for dummyssh invocation...
r25495 $ hg id --ssh "python \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo#noNoNO"
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 abort: unknown revision 'noNoNO'!
[255]
Test (non-)escaping of remote paths with spaces when cloning (issue3145):
Matt Harbison
tests: restore 'python' and '$TESTDIR/' for dummyssh invocation...
r25495 $ hg clone --ssh "python \"$TESTDIR/dummyssh\"" "ssh://user@dummy/a repo"
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 destination directory: a repo
abort: destination 'a repo' is not empty
[255]
Test hg-ssh using a helper script that will restore PYTHONPATH (which might
have been cleared by a hg.exe wrapper) and invoke hg-ssh with the right
parameters:
$ cat > ssh.sh << EOF
> userhost="\$1"
> SSH_ORIGINAL_COMMAND="\$2"
> export SSH_ORIGINAL_COMMAND
> PYTHONPATH="$PYTHONPATH"
> export PYTHONPATH
> python "$TESTDIR/../contrib/hg-ssh" "$TESTTMP/a repo"
> EOF
$ hg id --ssh "sh ssh.sh" "ssh://user@dummy/a repo"
73649e48688a
$ hg id --ssh "sh ssh.sh" "ssh://user@dummy/a'repo"
remote: Illegal repository "$TESTTMP/a'repo" (glob)
abort: no suitable response from remote hg!
[255]
$ hg id --ssh "sh ssh.sh" --remotecmd hacking "ssh://user@dummy/a'repo"
remote: Illegal command "hacking -R 'a'\''repo' serve --stdio"
abort: no suitable response from remote hg!
[255]
$ SSH_ORIGINAL_COMMAND="'hg' -R 'a'repo' serve --stdio" python "$TESTDIR/../contrib/hg-ssh"
Illegal command "'hg' -R 'a'repo' serve --stdio": No closing quotation
[255]
Test hg-ssh in read-only mode:
$ cat > ssh.sh << EOF
> userhost="\$1"
> SSH_ORIGINAL_COMMAND="\$2"
> export SSH_ORIGINAL_COMMAND
> PYTHONPATH="$PYTHONPATH"
> export PYTHONPATH
> python "$TESTDIR/../contrib/hg-ssh" --read-only "$TESTTMP/remote"
> EOF
$ hg clone --ssh "sh ssh.sh" "ssh://user@dummy/$TESTTMP/remote" read-only-local
requesting all changes
adding changesets
adding manifests
adding file changes
added 6 changesets with 5 changes to 4 files (+1 heads)
updating to branch default
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd read-only-local
$ echo "baz" > bar
$ hg ci -A -m "unpushable commit" bar
$ hg push --ssh "sh ../ssh.sh"
pushing to ssh://user@dummy/*/remote (glob)
searching for changes
remote: Permission denied
remote: abort: pretxnopen.hg-ssh hook failed
remote: Permission denied
remote: pushkey-abort: prepushkey.hg-ssh hook failed
updating 6c0482d977a3 to public failed!
[1]
$ cd ..
stderr from remote commands should be printed before stdout from local code (issue4336)
$ hg clone remote stderr-ordering
updating to branch default
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd stderr-ordering
$ cat >> localwrite.py << EOF
> from mercurial import exchange, extensions
>
> def wrappedpush(orig, repo, *args, **kwargs):
> res = orig(repo, *args, **kwargs)
> repo.ui.write('local stdout\n')
> return res
>
> def extsetup(ui):
> extensions.wrapfunction(exchange, 'push', wrappedpush)
> EOF
$ cat >> .hg/hgrc << EOF
> [paths]
> default-push = ssh://user@dummy/remote
> [ui]
Matt Harbison
tests: restore 'python' and '$TESTDIR/' for dummyssh invocation...
r25495 > ssh = python "$TESTDIR/dummyssh"
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 > [extensions]
> localwrite = localwrite.py
> EOF
$ echo localwrite > foo
$ hg commit -m 'testing localwrite'
$ hg push
pushing to ssh://user@dummy/remote
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
remote: KABOOM
local stdout
debug output
$ hg pull --debug ssh://user@dummy/remote
pulling from ssh://user@dummy/remote
Matt Harbison
tests: restore 'python' and '$TESTDIR/' for dummyssh invocation...
r25495 running python ".*/dummyssh" user@dummy ('|")hg -R remote serve --stdio('|") (re)
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 sending hello command
sending between command
Pierre-Yves David
bundle2: convey PushkeyFailed error over the wire...
r25493 remote: 345
remote: capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Aerror%3Dabort%2Cunsupportedcontent%2Cpushraced%2Cpushkey%0Ahgtagsfnodes%0Alistkeys%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
Pierre-Yves David
test: copy test-ssh.t to test-ssh-bundle1.t...
r25375 remote: 1
preparing listkeys for "bookmarks"
sending listkeys command
received listkey for "bookmarks": 45 bytes
query 1; heads
sending batch command
searching for changes
all remote heads known locally
no changes found
preparing listkeys for "phases"
sending listkeys command
received listkey for "phases": 15 bytes
checking for updated bookmarks
$ cd ..
$ cat dummylog
Got arguments 1:user@dummy 2:hg -R nonexistent serve --stdio
Got arguments 1:user@dummy 2:hg -R /$TESTTMP/nonexistent serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R local-stream serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R doesnotexist serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R local serve --stdio
Got arguments 1:user@dummy 2:hg -R $TESTTMP/local serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
changegroup-in-remote hook: HG_NODE=a28a9d1a809cab7d4e2fde4bee738a9ede948b60 HG_SOURCE=serve HG_TXNID=TXN:* HG_URL=remote:ssh:127.0.0.1 (glob)
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
changegroup-in-remote hook: HG_NODE=1383141674ec756a6056f6a9097618482fe0f4a6 HG_SOURCE=serve HG_TXNID=TXN:* HG_URL=remote:ssh:127.0.0.1 (glob)
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg init 'a repo'
Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
Got arguments 1:user@dummy 2:hg -R 'a repo' serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
changegroup-in-remote hook: HG_NODE=65c38f4125f9602c8db4af56530cc221d93b8ef8 HG_SOURCE=serve HG_TXNID=TXN:* HG_URL=remote:ssh:127.0.0.1 (glob)
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Gregory Szorc
tests: add tests for remote hook output (issue4788)...
r26828
remote hook failure is attributed to remote
$ cat > $TESTTMP/failhook << EOF
> def hook(ui, repo, **kwargs):
> ui.write('hook failure!\n')
> ui.flush()
> return 1
> EOF
$ echo "pretxnchangegroup.fail = python:$TESTTMP/failhook:hook" >> remote/.hg/hgrc
$ hg -q --config ui.ssh="python '$TESTDIR/dummyssh'" clone ssh://user@dummy/remote hookout
$ cd hookout
$ touch hookfailure
$ hg -q commit -A -m 'remote hook failure'
$ hg --config ui.ssh="python '$TESTDIR/dummyssh'" push
pushing to ssh://user@dummy/remote
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
Gregory Szorc
bundle2: attribute remote failures to remote (issue4788)...
r26829 remote: hook failure!
remote: transaction abort!
Gregory Szorc
tests: add tests for remote hook output (issue4788)...
r26828 remote: rollback completed
remote: abort: pretxnchangegroup.fail hook failed
[1]