sapling/eden/scm/tests/test-clone.t

770 lines
18 KiB
Perl
Raw Normal View History

#require py2
#chg-compatible
$ disable treemanifest
$ configure dummyssh
2010-08-10 15:21:28 +04:00
Prepare repo a:
$ hg init a
2010-08-10 15:21:28 +04:00
$ cd a
$ echo a > a
$ hg add a
$ hg commit -m test
$ echo first line > b
$ hg add b
Create a non-inlined filelog:
$ hg debugsh -c 'open("data1", "wb").write("".join("%s\n" % x for x in range(10000)).encode("utf-8"))'
2010-08-10 15:21:28 +04:00
$ for j in 0 1 2 3 4 5 6 7 8 9; do
> cat data1 >> b
> hg commit -m test
> done
List files in store/data (should show a 'b.d'):
$ for i in .hg/store/data/*; do
> echo $i
> done
.hg/store/data/a.i
.hg/store/data/b.i
Default operation:
$ hg clone . ../b
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd ../b
2010-08-10 15:21:28 +04:00
$ cat a
a
$ hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
2 files, 11 changesets, 11 total revisions
Invalid dest '' must abort:
$ hg clone . ''
abort: empty destination path is not valid
[255]
2010-08-10 15:21:28 +04:00
No update, with debug option:
#if hardlink
(XXX: zstore migration is done twice)
$ hg --debug clone -U . ../c --config progress.debug=true
progress: linking: 1
progress: linking: 2
progress: linking: 3
progress: linking: 4
progress: linking: 5
progress: linking: 6
progress: linking: 7
progress: linking: 8
progress: linking: 9
progress: linking: 10
progress: linking (end)
copied 10 files
#else
2015-05-21 22:30:22 +03:00
$ hg --debug clone -U . ../c --config progress.debug=true
linking: 1
copying: 2
copying: 3
copying: 4
copying: 5
copying: 6
copying: 7
copying: 8
copied 8 files
#endif
2010-08-10 15:21:28 +04:00
$ cd ../c
2010-08-10 15:21:28 +04:00
$ cat a 2>/dev/null || echo "a not present"
a not present
$ hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
2 files, 11 changesets, 11 total revisions
Default destination:
$ mkdir ../d
$ cd ../d
$ hg clone ../a
destination directory: a
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd a
$ hg cat a
a
$ cd ../..
Check that we drop the 'file:' from the path before writing the .hgrc:
$ hg clone file:a e
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ grep 'file:' e/.hg/hgrc
2010-09-17 02:51:32 +04:00
[1]
2010-08-10 15:21:28 +04:00
Check that path aliases are expanded:
$ hg clone -q -U --config 'paths.foobar=a#0' foobar f
$ hg -R f showconfig paths.default
$TESTTMP/a#0
2010-08-10 15:21:28 +04:00
Use --pull:
$ hg clone --pull a g
requesting all changes
adding changesets
adding manifests
adding file changes
added 11 changesets with 11 changes to 2 files
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg -R g verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
2 files, 11 changesets, 11 total revisions
Invalid dest '' with --pull must abort (issue2528):
$ hg clone --pull a ''
abort: empty destination path is not valid
[255]
2010-08-10 15:21:28 +04:00
Clone to '.':
$ mkdir h
$ cd h
$ hg clone ../a .
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd ..
*** Tests for option -u ***
Adding some more history to repo a:
$ cd a
$ echo the quick brown fox >a
$ hg ci -m "hacked default"
$ hg up '.^'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg bookmark stable
2010-08-10 15:21:28 +04:00
$ echo some text >a
$ hg ci -m "starting branch stable"
$ echo some more text >a
$ hg ci -m "another change for branch stable"
$ hg up '.^'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(leaving bookmark stable)
2010-08-10 15:21:28 +04:00
$ hg parents
commit: 7bc8ee83a26f
2010-08-10 15:21:28 +04:00
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: starting branch stable
Repo a has two heads:
$ hg heads
commit: 4f44d5743f52
bookmark: stable
2010-08-10 15:21:28 +04:00
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: another change for branch stable
commit: 3aa88e8a4d5f
2010-08-10 15:21:28 +04:00
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: hacked default
$ cd ..
Testing --noupdate with --updaterev (must abort):
$ hg clone --noupdate --updaterev 1 a ua
abort: cannot specify both --noupdate and --updaterev
2010-09-17 02:51:32 +04:00
[255]
2010-08-10 15:21:28 +04:00
Testing clone -u:
$ hg clone -u . a ua
updating to branch default
2010-08-10 15:21:28 +04:00
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
Repo ua has both heads:
$ hg -R ua heads
commit: 4f44d5743f52
bookmark: stable
2010-08-10 15:21:28 +04:00
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: another change for branch stable
commit: 3aa88e8a4d5f
2010-08-10 15:21:28 +04:00
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: hacked default
Same revision checked out in repo a and ua:
$ hg -R a parents --template "{node|short}\n"
7bc8ee83a26f
2010-08-10 15:21:28 +04:00
$ hg -R ua parents --template "{node|short}\n"
7bc8ee83a26f
2010-08-10 15:21:28 +04:00
$ rm -r ua
Testing clone --pull -u:
$ hg clone --pull -u . a ua
requesting all changes
adding changesets
adding manifests
adding file changes
added 14 changesets with 14 changes to 2 files
updating to branch default
2010-08-10 15:21:28 +04:00
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
Repo ua has both heads:
$ hg -R ua heads
commit: 4f44d5743f52
bookmark: stable
2010-08-10 15:21:28 +04:00
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: another change for branch stable
commit: 3aa88e8a4d5f
2010-08-10 15:21:28 +04:00
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: hacked default
Same revision checked out in repo a and ua:
$ hg -R a parents --template "{node|short}\n"
7bc8ee83a26f
2010-08-10 15:21:28 +04:00
$ hg -R ua parents --template "{node|short}\n"
7bc8ee83a26f
2010-08-10 15:21:28 +04:00
$ rm -r ua
Testing clone -u <branch>:
$ hg clone -u stable a ua
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
2010-08-10 15:21:28 +04:00
Repo ua has both heads:
$ hg -R ua heads
commit: 4f44d5743f52
bookmark: stable
2010-08-10 15:21:28 +04:00
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: another change for branch stable
commit: 3aa88e8a4d5f
2010-08-10 15:21:28 +04:00
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: hacked default
Branch 'stable' is checked out:
$ hg -R ua parents
commit: 4f44d5743f52
bookmark: stable
2010-08-10 15:21:28 +04:00
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: another change for branch stable
$ rm -r ua
Testing default checkout:
$ hg clone a ua
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
2010-08-10 15:21:28 +04:00
Repo ua has both heads:
$ hg -R ua heads
commit: 4f44d5743f52
bookmark: stable
2010-08-10 15:21:28 +04:00
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: another change for branch stable
commit: 3aa88e8a4d5f
2010-08-10 15:21:28 +04:00
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: hacked default
$ rm -r ua
2010-08-10 15:21:28 +04:00
Testing #<bookmark> (no longer works):
2010-08-10 15:21:28 +04:00
$ hg clone -u . a#stable ua
updating to branch default
2010-08-10 15:21:28 +04:00
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
Repo ua has branch 'stable' and 'default' (was changed in fd511e9eeea6):
$ hg -R ua heads
commit: 4f44d5743f52
bookmark: stable
2010-08-10 15:21:28 +04:00
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: another change for branch stable
commit: 3aa88e8a4d5f
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: hacked default
2010-08-10 15:21:28 +04:00
Same revision checked out in repo a and ua:
$ hg -R a parents --template "{node|short}\n"
7bc8ee83a26f
2010-08-10 15:21:28 +04:00
$ hg -R ua parents --template "{node|short}\n"
7bc8ee83a26f
2010-08-10 15:21:28 +04:00
$ rm -r ua
Testing -u -r <branch>:
$ hg clone -u . -r stable a ua
adding changesets
adding manifests
adding file changes
added 13 changesets with 13 changes to 2 files
updating to branch default
2010-08-10 15:21:28 +04:00
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
Repo ua has branch 'stable' and 'default' (was changed in fd511e9eeea6):
$ hg -R ua heads
commit: 4f44d5743f52
bookmark: stable
2010-08-10 15:21:28 +04:00
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: another change for branch stable
Same revision checked out in repo a and ua:
$ hg -R a parents --template "{node|short}\n"
7bc8ee83a26f
2010-08-10 15:21:28 +04:00
$ hg -R ua parents --template "{node|short}\n"
7bc8ee83a26f
2010-08-10 15:21:28 +04:00
$ rm -r ua
Testing -r <branch>:
$ hg clone -r stable a ua
adding changesets
adding manifests
adding file changes
added 13 changesets with 13 changes to 2 files
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
2010-08-10 15:21:28 +04:00
Repo ua has branch 'stable' and 'default' (was changed in fd511e9eeea6):
$ hg -R ua heads
commit: 4f44d5743f52
bookmark: stable
2010-08-10 15:21:28 +04:00
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: another change for branch stable
Branch 'stable' is checked out:
$ hg -R ua parents
commit: 4f44d5743f52
bookmark: stable
2010-08-10 15:21:28 +04:00
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: another change for branch stable
$ rm -r ua
Test clone with special '@' bookmark:
$ cd a
$ hg bookmark -r a7949464abda @ # branch point of stable from default
$ hg clone . ../i
updating to bookmark @
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg id -i ../i
a7949464abda
$ rm -r ../i
$ hg bookmark -f -r stable @
$ hg bookmarks
@ 13:4f44d5743f52
stable 13:4f44d5743f52
$ hg clone . ../i
updating to bookmark @
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg id -i ../i
4f44d5743f52
$ cd "$TESTTMP"
Testing failures:
$ mkdir fail
$ cd fail
No local source
$ hg clone a b
abort: repository a not found!
[255]
No remote source
#if windows
$ hg clone http://$LOCALIP:3121/a b
abort: error: * (glob)
[255]
#else
$ hg clone http://$LOCALIP:3121/a b
abort: error: *refused* (glob)
[255]
#endif
$ rm -rf b # work around bug with http clone
#if unix-permissions no-root
Inaccessible source
$ mkdir a
$ chmod 000 a
$ hg clone a b
abort: repository a not found!
[255]
Inaccessible destination
$ hg init b
$ cd b
$ hg clone . ../a
abort: Permission denied: ../a
[255]
$ cd ..
$ chmod 700 a
$ rm -r a b
#endif
#if fifo
Source of wrong type
$ mkfifo a
$ hg clone a b
abort: repository a not found!
[255]
$ rm a
#endif
Default destination, same directory
$ hg init q
$ hg clone q
destination directory: q
abort: destination 'q' is not empty
[255]
destination directory not empty
$ mkdir a
$ echo stuff > a/a
$ hg clone q a
abort: destination 'a' is not empty
[255]
#if unix-permissions no-root
leave existing directory in place after clone failure
$ hg init c
$ cd c
$ echo c > c
$ hg commit -A -m test
adding c
$ chmod -rx .hg/store/data
$ cd ..
$ mkdir d
$ hg clone c d 2> err
[255]
$ test -d d
$ test -d d/.hg
[1]
2012-08-16 00:38:42 +04:00
re-enable perm to allow deletion
$ chmod +rx c/.hg/store/data
#endif
$ cd ..
Test clone from the repository in (emulated) revlog format 0 (issue4203):
$ mkdir issue4203
$ mkdir -p src/.hg
$ echo foo > src/foo
$ hg -R src add src/foo
abort: legacy dirstate implementations are no longer supported!
[255]
$ hg -R src commit -m '#0'
abort: legacy dirstate implementations are no longer supported!
[255]
$ hg -R src log -q
abort: legacy dirstate implementations are no longer supported!
[255]
$ hg clone -U -q src dst
abort: legacy dirstate implementations are no longer supported!
[255]
$ hg -R dst log -q
abort: repository dst not found!
[255]
hg: support for auto sharing stores when cloning Many 3rd party consumers of Mercurial have created wrappers to essentially perform clone+share as a single operation. This is especially popular in automated processes like continuous integration systems. The Jenkins CI software and Mozilla's Firefox release automation infrastructure have both implemented custom code that effectively perform clone+share. The common use case here is that clients want to obtain N>1 checkouts while minimizing disk space and network requirements. Furthermore, they often don't care that a clone is an exact mirror of a remote: they are simply looking to obtain checkouts of specific revisions. When multiple third parties implement a similar feature, it's a good sign that the feature is worth adding to the core product. This patch adds support for an easy-to-use clone+share feature. The internal "clone" function now accepts options to control auto sharing during clone. When the auto share mode is active, a store will be created/updated under the base directory specified and a new repository pointing to the shared store will be created at the path specified by the user. The share extension has grown the ability to pass these options into the clone command/function. No command line options for this feature are added because we don't feel the feature will be popular enough to warrant their existence. There are two modes for auto share mode. In the default mode, the shared repo is derived from the first changeset (rev 0) in the remote repository. This enables related repositories existing at different URLs to automatically use the same storage. In environments that operate several repositories (separate repo for branch/head/bookmark or separate repo per user), this has the potential to drastically reduce storage and network requirements. In the other mode, the name is derived from the remote's path/URL.
2015-07-09 02:19:09 +03:00
Create repositories to test auto sharing functionality
$ cat >> $HGRCPATH << EOF
> [extensions]
> share=
> EOF
$ hg init empty
$ hg init source1a
$ cd source1a
$ echo initial1 > foo
$ hg -q commit -A -m initial
$ echo second > foo
$ hg commit -m second
$ cd ..
$ hg init filteredrev0
$ cd filteredrev0
$ cat >> .hg/hgrc << EOF
> [experimental]
> evolution.createmarkers=True
hg: support for auto sharing stores when cloning Many 3rd party consumers of Mercurial have created wrappers to essentially perform clone+share as a single operation. This is especially popular in automated processes like continuous integration systems. The Jenkins CI software and Mozilla's Firefox release automation infrastructure have both implemented custom code that effectively perform clone+share. The common use case here is that clients want to obtain N>1 checkouts while minimizing disk space and network requirements. Furthermore, they often don't care that a clone is an exact mirror of a remote: they are simply looking to obtain checkouts of specific revisions. When multiple third parties implement a similar feature, it's a good sign that the feature is worth adding to the core product. This patch adds support for an easy-to-use clone+share feature. The internal "clone" function now accepts options to control auto sharing during clone. When the auto share mode is active, a store will be created/updated under the base directory specified and a new repository pointing to the shared store will be created at the path specified by the user. The share extension has grown the ability to pass these options into the clone command/function. No command line options for this feature are added because we don't feel the feature will be popular enough to warrant their existence. There are two modes for auto share mode. In the default mode, the shared repo is derived from the first changeset (rev 0) in the remote repository. This enables related repositories existing at different URLs to automatically use the same storage. In environments that operate several repositories (separate repo for branch/head/bookmark or separate repo per user), this has the potential to drastically reduce storage and network requirements. In the other mode, the name is derived from the remote's path/URL.
2015-07-09 02:19:09 +03:00
> EOF
$ echo initial1 > foo
$ hg -q commit -A -m initial0
$ hg -q up -r null
$ echo initial2 > foo
$ hg -q commit -A -m initial1
$ hg debugobsolete c05d5c47a5cf81401869999f3d05f7d699d2b29a e082c1832e09a7d1e78b7fd49a592d372de854c8
$ cd ..
$ hg -q clone --pull source1a source1b
$ cd source1a
$ hg bookmark bookA
$ echo 1a > foo
$ hg commit -m 1a
$ cd ../source1b
$ hg -q up -r 0
$ echo head1 > foo
$ hg commit -m head1
$ hg bookmark head1
$ hg -q up -r 0
$ echo head2 > foo
$ hg commit -m head2
$ hg bookmark head2
$ hg -q up -r 0
$ hg bookmark branch1
hg: support for auto sharing stores when cloning Many 3rd party consumers of Mercurial have created wrappers to essentially perform clone+share as a single operation. This is especially popular in automated processes like continuous integration systems. The Jenkins CI software and Mozilla's Firefox release automation infrastructure have both implemented custom code that effectively perform clone+share. The common use case here is that clients want to obtain N>1 checkouts while minimizing disk space and network requirements. Furthermore, they often don't care that a clone is an exact mirror of a remote: they are simply looking to obtain checkouts of specific revisions. When multiple third parties implement a similar feature, it's a good sign that the feature is worth adding to the core product. This patch adds support for an easy-to-use clone+share feature. The internal "clone" function now accepts options to control auto sharing during clone. When the auto share mode is active, a store will be created/updated under the base directory specified and a new repository pointing to the shared store will be created at the path specified by the user. The share extension has grown the ability to pass these options into the clone command/function. No command line options for this feature are added because we don't feel the feature will be popular enough to warrant their existence. There are two modes for auto share mode. In the default mode, the shared repo is derived from the first changeset (rev 0) in the remote repository. This enables related repositories existing at different URLs to automatically use the same storage. In environments that operate several repositories (separate repo for branch/head/bookmark or separate repo per user), this has the potential to drastically reduce storage and network requirements. In the other mode, the name is derived from the remote's path/URL.
2015-07-09 02:19:09 +03:00
$ echo branch1 > foo
$ hg commit -m branch1
$ hg -q up -r 0
$ hg bookmark branch2
hg: support for auto sharing stores when cloning Many 3rd party consumers of Mercurial have created wrappers to essentially perform clone+share as a single operation. This is especially popular in automated processes like continuous integration systems. The Jenkins CI software and Mozilla's Firefox release automation infrastructure have both implemented custom code that effectively perform clone+share. The common use case here is that clients want to obtain N>1 checkouts while minimizing disk space and network requirements. Furthermore, they often don't care that a clone is an exact mirror of a remote: they are simply looking to obtain checkouts of specific revisions. When multiple third parties implement a similar feature, it's a good sign that the feature is worth adding to the core product. This patch adds support for an easy-to-use clone+share feature. The internal "clone" function now accepts options to control auto sharing during clone. When the auto share mode is active, a store will be created/updated under the base directory specified and a new repository pointing to the shared store will be created at the path specified by the user. The share extension has grown the ability to pass these options into the clone command/function. No command line options for this feature are added because we don't feel the feature will be popular enough to warrant their existence. There are two modes for auto share mode. In the default mode, the shared repo is derived from the first changeset (rev 0) in the remote repository. This enables related repositories existing at different URLs to automatically use the same storage. In environments that operate several repositories (separate repo for branch/head/bookmark or separate repo per user), this has the potential to drastically reduce storage and network requirements. In the other mode, the name is derived from the remote's path/URL.
2015-07-09 02:19:09 +03:00
$ echo branch2 > foo
$ hg commit -m branch2
$ cd ..
$ hg init source2
$ cd source2
$ echo initial2 > foo
$ hg -q commit -A -m initial2
$ echo second > foo
$ hg commit -m second
$ cd ..
hg: support for auto sharing stores when cloning Many 3rd party consumers of Mercurial have created wrappers to essentially perform clone+share as a single operation. This is especially popular in automated processes like continuous integration systems. The Jenkins CI software and Mozilla's Firefox release automation infrastructure have both implemented custom code that effectively perform clone+share. The common use case here is that clients want to obtain N>1 checkouts while minimizing disk space and network requirements. Furthermore, they often don't care that a clone is an exact mirror of a remote: they are simply looking to obtain checkouts of specific revisions. When multiple third parties implement a similar feature, it's a good sign that the feature is worth adding to the core product. This patch adds support for an easy-to-use clone+share feature. The internal "clone" function now accepts options to control auto sharing during clone. When the auto share mode is active, a store will be created/updated under the base directory specified and a new repository pointing to the shared store will be created at the path specified by the user. The share extension has grown the ability to pass these options into the clone command/function. No command line options for this feature are added because we don't feel the feature will be popular enough to warrant their existence. There are two modes for auto share mode. In the default mode, the shared repo is derived from the first changeset (rev 0) in the remote repository. This enables related repositories existing at different URLs to automatically use the same storage. In environments that operate several repositories (separate repo for branch/head/bookmark or separate repo per user), this has the potential to drastically reduce storage and network requirements. In the other mode, the name is derived from the remote's path/URL.
2015-07-09 02:19:09 +03:00
SEC: check for unsafe ssh url
$ cat >> $HGRCPATH << EOF
> [ui]
> ssh = sh -c "read l; read l; read l"
> EOF
$ hg clone 'ssh://-oProxyCommand=touch${IFS}owned/path'
abort: potentially unsafe url: 'ssh://-oProxyCommand=touch${IFS}owned/path'
[255]
$ hg clone 'ssh://%2DoProxyCommand=touch${IFS}owned/path'
abort: potentially unsafe url: 'ssh://-oProxyCommand=touch${IFS}owned/path'
[255]
$ hg clone 'ssh://fakehost|touch%20owned/path'
abort: no suitable response from remote hg!
[255]
$ hg clone 'ssh://fakehost%7Ctouch%20owned/path'
abort: no suitable response from remote hg!
[255]
$ hg clone 'ssh://-oProxyCommand=touch owned%20foo@example.com/nonexistent/path'
abort: potentially unsafe url: 'ssh://-oProxyCommand=touch owned foo@example.com/nonexistent/path'
[255]
#if windows
$ hg clone "ssh://%26touch%20owned%20/" --debug
running sh -c "read l; read l; read l" "&touch owned " "hg -R . serve --stdio"
sending hello command
sending between command
abort: no suitable response from remote hg!
[255]
$ hg clone "ssh://example.com:%26touch%20owned%20/" --debug
running sh -c "read l; read l; read l" -p "&touch owned " example.com "hg -R . serve --stdio"
sending hello command
sending between command
abort: no suitable response from remote hg!
[255]
#else
$ hg clone "ssh://%3btouch%20owned%20/" --debug
running sh -c "read l; read l; read l" ';touch owned ' 'hg -R . serve --stdio'
sending hello command
sending between command
abort: no suitable response from remote hg!
[255]
$ hg clone "ssh://example.com:%3btouch%20owned%20/" --debug
running sh -c "read l; read l; read l" -p ';touch owned ' example.com 'hg -R . serve --stdio'
sending hello command
sending between command
abort: no suitable response from remote hg!
[255]
#endif
$ hg clone "ssh://v-alid.example.com/" --debug
running sh -c "read l; read l; read l" v-alid\.example\.com ['"]hg -R \. serve --stdio['"] (re)
sending hello command
sending between command
abort: no suitable response from remote hg!
[255]
We should not have created a file named owned - if it exists, the
attack succeeded.
$ if test -f owned; then echo 'you got owned'; fi
Cloning without fsmonitor enabled does not print a warning for small repos
$ hg clone a fsmonitor-default
updating to bookmark @
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
Lower the warning threshold to simulate a large repo
$ cat >> $HGRCPATH << EOF
> [fsmonitor]
> warn_update_file_count = 2
> EOF
We should see a warning about no fsmonitor on supported platforms
#if linuxormacos no-fsmonitor
$ hg clone a nofsmonitor
updating to bookmark @
(warning: large working directory being used without fsmonitor enabled; enable fsmonitor to improve performance; see "hg help -e fsmonitor")
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
#else
$ hg clone a nofsmonitor
updating to bookmark @
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
#endif
We should not see warning about fsmonitor when it is enabled
#if fsmonitor
$ hg clone a fsmonitor-enabled
updating to bookmark @
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
#endif
We can disable the fsmonitor warning
$ hg --config fsmonitor.warn_when_unused=false clone a fsmonitor-disable-warning
updating to bookmark @
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
Loaded fsmonitor but disabled in config should still print warning
#if linuxormacos fsmonitor
$ hg --config fsmonitor.mode=off clone a fsmonitor-mode-off
updating to bookmark @
(warning: large working directory being used without fsmonitor enabled; enable fsmonitor to improve performance; see "hg help -e fsmonitor") (fsmonitor !)
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
#endif
Warning not printed if working directory isn't empty
$ hg -q clone a fsmonitor-update
(warning: large working directory being used without fsmonitor enabled; enable fsmonitor to improve performance; see "hg help -e fsmonitor") (?)
$ cd fsmonitor-update
$ hg up acb14030fe0a
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
(leaving bookmark @)
$ hg up cf0fe1914066
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
`hg update` from null revision also prints
$ hg up null
0 files updated, 0 files merged, 2 files removed, 0 files unresolved
#if linuxormacos no-fsmonitor
$ hg up cf0fe1914066
(warning: large working directory being used without fsmonitor enabled; enable fsmonitor to improve performance; see "hg help -e fsmonitor")
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
#else
$ hg up cf0fe1914066
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
#endif
$ cd ..