##// END OF EJS Templates
rhg: add resolve_file_args to path_utils.rs...
rhg: add resolve_file_args to path_utils.rs Extracted logic for resolving `FILE ...` arguments from cat.rs into a new function in path_utils.rs. I plan to use this for rhg annotate. I tried to reuse hg::utils::files::canonical_path instead, but that didn't work. For example it reports a InsideDotHg error for any path containing "..".

File last commit:

r50489:88a8de82 stable
r53438:f33f37ac tip default
Show More
test-removeemptydirs.t
305 lines | 7.2 KiB | text/troff | Tads3Lexer
/ tests / test-removeemptydirs.t
Kyle Lippincott
unlinkpath: make empty directory removal optional (issue5901) (issue5826)...
r38512 Tests for experimental.removeemptydirs
tests: make removeemptydirs more portable...
r48794 $ cat >> pwd.py << EOF
> import os
> try:
> print(os.getcwd())
> except OSError:
> print("<directory is no longer accessible>")
> EOF
Kyle Lippincott
unlinkpath: make empty directory removal optional (issue5901) (issue5826)...
r38512 $ NO_RM=--config=experimental.removeemptydirs=0
test-removeemptydirs: clarify the state of things in the `histedit` case...
r48379 $ DO_RM=--config=experimental.removeemptydirs=1
Kyle Lippincott
unlinkpath: make empty directory removal optional (issue5901) (issue5826)...
r38512 $ isdir() { if [ -d $1 ]; then echo yes; else echo no; fi }
$ isfile() { if [ -f $1 ]; then echo yes; else echo no; fi }
`hg rm` of the last file in a directory:
$ hg init hgrm
$ cd hgrm
$ mkdir somedir
$ echo hi > somedir/foo
$ hg ci -qAm foo
$ isdir somedir
yes
$ hg rm somedir/foo
$ isdir somedir
no
$ hg revert -qa
$ isdir somedir
yes
$ hg $NO_RM rm somedir/foo
$ isdir somedir
yes
$ ls somedir
$ cd $TESTTMP
`hg mv` of the last file in a directory:
$ hg init hgmv
$ cd hgmv
$ mkdir somedir
$ mkdir destdir
$ echo hi > somedir/foo
$ hg ci -qAm foo
$ isdir somedir
yes
$ hg mv somedir/foo destdir/foo
$ isdir somedir
no
$ hg revert -qa
(revert doesn't get rid of destdir/foo?)
$ rm destdir/foo
$ isdir somedir
yes
$ hg $NO_RM mv somedir/foo destdir/foo
$ isdir somedir
yes
$ ls somedir
$ cd $TESTTMP
Updating to a commit that doesn't have the directory:
$ hg init hgupdate
$ cd hgupdate
$ echo hi > r0
$ hg ci -qAm r0
$ mkdir somedir
$ echo hi > somedir/foo
$ hg ci -qAm r1
$ isdir somedir
yes
$ hg co -q -r ".^"
$ isdir somedir
no
$ hg co -q tip
$ isdir somedir
yes
$ hg $NO_RM co -q -r ".^"
$ isdir somedir
yes
$ ls somedir
$ cd $TESTTMP
Rebasing across a commit that doesn't have the directory, from inside the
directory:
$ hg init hgrebase
$ cd hgrebase
$ echo hi > r0
$ hg ci -qAm r0
$ mkdir somedir
$ echo hi > somedir/foo
$ hg ci -qAm first_rebase_source
$ hg $NO_RM co -q -r ".^"
$ echo hi > somedir/bar
$ hg ci -qAm first_rebase_dest
$ hg $NO_RM co -q -r ".^"
$ echo hi > somedir/baz
$ hg ci -qAm second_rebase_dest
$ hg co -qr 'desc(first_rebase_source)'
$ cd $TESTTMP/hgrebase/somedir
$ hg --config extensions.rebase= rebase -qr . -d 'desc(first_rebase_dest)'
Matt Harbison
tests: stabilize test-removeemptydirs.t on Windows
r39498 current directory was removed (rmcwd !)
(consider changing to repo root: $TESTTMP/hgrebase) (rmcwd !)
Kyle Lippincott
unlinkpath: make empty directory removal optional (issue5901) (issue5826)...
r38512 $ cd $TESTTMP/hgrebase/somedir
(The current node is the rebased first_rebase_source on top of
first_rebase_dest)
This should not output anything about current directory being removed:
$ hg $NO_RM --config extensions.rebase= rebase -qr . -d 'desc(second_rebase_dest)'
$ cd $TESTTMP
Histediting across a commit that doesn't have the directory, from inside the
directory (reordering nodes):
test-removeemptydirs: clarify the state of things in the `histedit` case...
r48379
A directory with the right pass exists at the end of the run, but it is a
different directory than the current one.
test-removeemptydirs: adjust to Windows behavior for the `histedit` case...
r48380 Windows is not affected
Kyle Lippincott
unlinkpath: make empty directory removal optional (issue5901) (issue5826)...
r38512 $ hg init hghistedit
$ cd hghistedit
$ echo hi > r0
$ hg ci -qAm r0
$ echo hi > r1
$ hg ci -qAm r1
$ echo hi > r2
$ hg ci -qAm r2
$ mkdir somedir
$ echo hi > somedir/foo
$ hg ci -qAm migrating_revision
$ cat > histedit_commands <<EOF
> pick 89079fab8aee 0 r0
> pick e6d271df3142 1 r1
> pick 89e25aa83f0f 3 migrating_revision
> pick b550aa12d873 2 r2
> EOF
$ cd $TESTTMP/hghistedit/somedir
test-removeemptydirs: clarify the state of things in the `histedit` case...
r48379 $ hg $DO_RM --config extensions.histedit= histedit -q --commands ../histedit_commands
test-removeemptydirs: adjust to Windows behavior for the `histedit` case...
r48380 current directory was removed (no-windows !)
(consider changing to repo root: $TESTTMP/hghistedit) (no-windows !)
av6
tests: use ls -A instead of ls -1 in test-removeemptydirs.t...
r50487 $ ls -A $TESTTMP/hghistedit/
.hg
test-removeemptydirs: clarify the state of things in the `histedit` case...
r48379 histedit_commands
r0
r1
r2
somedir
tests: make removeemptydirs more portable...
r48794 #if windows
$ "$PYTHON" "$TESTTMP/pwd.py"
test-removeemptydirs: clarify the state of things in the `histedit` case...
r48379 $TESTTMP/hghistedit/somedir
av6
tests: move some lines inside #if windows-#else block test-removeemptydirs.t...
r50488 $ ls -A $TESTTMP/hghistedit/somedir
foo
$ ls -A
foo
tests: make removeemptydirs more portable...
r48794 #else
$ echo ${PWD} # no-pwd-check
$TESTTMP/hghistedit/somedir
$ "$PYTHON" "$TESTTMP/pwd.py"
<directory is no longer accessible>
av6
tests: use ls -A instead of ls -1 in test-removeemptydirs.t...
r50487 $ ls -A $TESTTMP/hghistedit/somedir
test-removeemptydirs: clarify the state of things in the `histedit` case...
r48379 foo
av6
tests: make running ls in a no longer existing directory more portable...
r50489 $ ls -A || true
ls: .: $ENOENT$ (?)
av6
tests: move some lines inside #if windows-#else block test-removeemptydirs.t...
r50488 #endif
test-removeemptydirs: clarify the state of things in the `histedit` case...
r48379
Get out of the doomed directory
$ cd $TESTTMP/hghistedit
tests: make removeemptydirs more portable...
r48794 chdir: error retrieving current directory: getcwd: cannot access parent directories: $ENOENT$ (?)
test-removeemptydirs: clarify the state of things in the `histedit` case...
r48379 $ hg files --rev . | grep somedir/
somedir/foo
Kyle Lippincott
unlinkpath: make empty directory removal optional (issue5901) (issue5826)...
r38512
$ cat > histedit_commands <<EOF
> pick 89079fab8aee 0 r0
> pick 7c7a22c6009f 3 migrating_revision
> pick e6d271df3142 1 r1
> pick 40a53c2d4276 2 r2
> EOF
$ cd $TESTTMP/hghistedit/somedir
$ hg $NO_RM --config extensions.histedit= histedit -q --commands ../histedit_commands
Regardless of system, we should always get a 'yes' here.
$ isfile foo
yes
$ cd $TESTTMP
This is essentially the exact test from issue5826, just cleaned up a little:
$ hg init issue5826_withrm
$ cd issue5826_withrm
Kyle Lippincott
removeemptydirs: add test for `hg split` inside a disappearing directory...
r38684 Let's only turn this on for this repo so that we don't contaminate later tests.
$ cat >> .hg/hgrc <<EOF
Kyle Lippincott
unlinkpath: make empty directory removal optional (issue5901) (issue5826)...
r38512 > [extensions]
> histedit =
> EOF
Commit three revisions that each create a directory:
$ mkdir foo
$ touch foo/bar
$ hg commit -qAm "add foo"
$ mkdir bar
$ touch bar/bar
$ hg commit -qAm "add bar"
$ mkdir baz
$ touch baz/bar
$ hg commit -qAm "add baz"
Enter the first directory:
$ cd foo
Histedit doing 'pick, pick, fold':
Matt Harbison
tests: stabilize test-removeemptydirs.t on Windows
r39498 #if rmcwd
$ hg histedit --commands - <<EOF
Kyle Lippincott
unlinkpath: make empty directory removal optional (issue5901) (issue5826)...
r38512 > pick 6274c77c93c3 1 add bar
> pick ff70a87b588f 0 add foo
> fold 9992bb0ac0db 2 add baz
> EOF
Martin von Zweigbergk
histedit: don't swallow errors that happen when updating the working copy...
r48228 current directory was removed
(consider changing to repo root: $TESTTMP/issue5826_withrm)
Kyle Lippincott
unlinkpath: make empty directory removal optional (issue5901) (issue5826)...
r38512 abort: $ENOENT$
[255]
Go back to the repo root after losing it as part of that operation:
$ cd $TESTTMP/issue5826_withrm
Note the lack of a non-zero exit code from this function - it exits
successfully, but doesn't really do anything.
$ hg histedit --continue
9992bb0ac0db: cannot fold - working copy is not a descendant of previous commit 5c806432464a
saved backup bundle to $TESTTMP/issue5826_withrm/.hg/strip-backup/ff70a87b588f-e94f9789-histedit.hg
$ hg log -T '{rev}:{node|short} {desc}\n'
2:94e3f9fae1d6 fold-temp-revision 9992bb0ac0db
1:5c806432464a add foo
0:d17db4b0303a add bar
Matt Harbison
tests: stabilize test-removeemptydirs.t on Windows
r39498 #else
$ cd $TESTTMP/issue5826_withrm
$ hg histedit --commands - <<EOF
> pick 6274c77c93c3 1 add bar
> pick ff70a87b588f 0 add foo
> fold 9992bb0ac0db 2 add baz
> EOF
saved backup bundle to $TESTTMP/issue5826_withrm/.hg/strip-backup/5c806432464a-cd4c8d86-histedit.hg
$ hg log -T '{rev}:{node|short} {desc}\n'
1:b9eddaa97cbc add foo
***
add baz
0:d17db4b0303a add bar
#endif
Kyle Lippincott
unlinkpath: make empty directory removal optional (issue5901) (issue5826)...
r38512 Now test that again with experimental.removeemptydirs=false:
$ hg init issue5826_norm
$ cd issue5826_norm
Kyle Lippincott
removeemptydirs: add test for `hg split` inside a disappearing directory...
r38684 Let's only turn this on for this repo so that we don't contaminate later tests.
$ cat >> .hg/hgrc <<EOF
Kyle Lippincott
unlinkpath: make empty directory removal optional (issue5901) (issue5826)...
r38512 > [extensions]
> histedit =
> [experimental]
> removeemptydirs = false
> EOF
Commit three revisions that each create a directory:
$ mkdir foo
$ touch foo/bar
$ hg commit -qAm "add foo"
$ mkdir bar
$ touch bar/bar
$ hg commit -qAm "add bar"
$ mkdir baz
$ touch baz/bar
$ hg commit -qAm "add baz"
Enter the first directory:
$ cd foo
Histedit doing 'pick, pick, fold':
Matt Harbison
tests: stabilize test-removeemptydirs.t on Windows
r39498 $ hg histedit --commands - <<EOF
Kyle Lippincott
unlinkpath: make empty directory removal optional (issue5901) (issue5826)...
r38512 > pick 6274c77c93c3 1 add bar
> pick ff70a87b588f 0 add foo
> fold 9992bb0ac0db 2 add baz
> EOF
saved backup bundle to $TESTTMP/issue5826_withrm/issue5826_norm/.hg/strip-backup/5c806432464a-cd4c8d86-histedit.hg
Note the lack of a 'cd' being necessary here, and we don't need to 'histedit
--continue'
$ hg log -T '{rev}:{node|short} {desc}\n'
1:b9eddaa97cbc add foo
***
add baz
0:d17db4b0303a add bar
Kyle Lippincott
removeemptydirs: add test for `hg split` inside a disappearing directory...
r38684
$ cd $TESTTMP