* [PATCH 4/5] Add test for sanitized work-tree behaviour
@ 2007-07-26 6:32 Johannes Schindelin
2007-07-26 7:15 ` Junio C Hamano
0 siblings, 1 reply; 3+ messages in thread
From: Johannes Schindelin @ 2007-07-26 6:32 UTC (permalink / raw)
To: git, gitster
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
This test was also something that I almost got eye cancer from.
I am very willing to extend this script with many more test
cases. Just give me a recipe what you would like to have tested.
t/t1501-worktree.sh | 157 ++++++++++++++++++++++++++++----------------------
1 files changed, 88 insertions(+), 69 deletions(-)
diff --git a/t/t1501-worktree.sh b/t/t1501-worktree.sh
index aadeeab..145c28e 100755
--- a/t/t1501-worktree.sh
+++ b/t/t1501-worktree.sh
@@ -3,90 +3,109 @@
test_description='test separate work tree'
. ./test-lib.sh
+i=1
+
test_rev_parse() {
- name=$1
- shift
-
- test_expect_success "$name: is-bare-repository" \
- "test '$1' = \"\$(git rev-parse --is-bare-repository)\""
- shift
- [ $# -eq 0 ] && return
-
- test_expect_success "$name: is-inside-git-dir" \
- "test '$1' = \"\$(git rev-parse --is-inside-git-dir)\""
- shift
- [ $# -eq 0 ] && return
-
- test_expect_success "$name: is-inside-work-tree" \
- "test '$1' = \"\$(git rev-parse --is-inside-work-tree)\""
- shift
- [ $# -eq 0 ] && return
-
- test_expect_success "$name: prefix" \
- "test '$1' = \"\$(git rev-parse --show-prefix)\""
- shift
- [ $# -eq 0 ] && return
+ name="$1"
+ for option in --is-bare-repository --is-inside-git-dir \
+ --is-inside-work-tree --show-prefix
+ do
+ shift
+ test_expect_success "$name: $option" \
+ "test '$1' = \"\$(git rev-parse $option)\""
+i=$(($i+1))
+test $i = $STOPI && gdb --args git rev-parse $option
+ test $# -eq 1 && return
+ done
+}
+
+# usage: set_repo <working directory> [<git dir> [<work tree> [env]]]
+set_repo () {
+ cd "$1"
+ say "switching to $(pwd) with GIT_DIR $2"
+
+ test -z "$2" || {
+ GIT_DIR="$2"
+ GIT_CONFIG="$2"/config
+ export GIT_DIR GIT_CONFIG
+ }
+
+ test -z "$3" ||
+ case "$4" in
+ env)
+ GIT_WORK_TREE="$3"
+ export GIT_WORK_TREE
+ git config core.workTree non-existent
+ ;;
+ *)
+ git config core.workTree "$3"
+ esac
}
-mkdir -p work/sub/dir || exit 1
-mv .git repo.git || exit 1
+test_expect_success 'setup' '
+ mkdir -p work/sub/dir &&
+ mv .git repo.git
+'
say "core.worktree = relative path"
-export GIT_DIR=repo.git
-export GIT_CONFIG=$GIT_DIR/config
-unset GIT_WORK_TREE
-git config core.worktree ../work
-test_rev_parse 'outside' false false false
-cd work || exit 1
-export GIT_DIR=../repo.git
-export GIT_CONFIG=$GIT_DIR/config
-test_rev_parse 'inside' false false true ''
-cd sub/dir || exit 1
-export GIT_DIR=../../../repo.git
-export GIT_CONFIG=$GIT_DIR/config
+
+set_repo . repo.git ../work
+test_rev_parse 'outside git dir' false false false
+
+set_repo work ../repo.git
+test_rev_parse 'inside git dir' false false true ''
+
+set_repo sub/dir ../../../repo.git
test_rev_parse 'subdirectory' false false true sub/dir/
-cd ../../.. || exit 1
+cd ../../..
say "core.worktree = absolute path"
-export GIT_DIR=$(pwd)/repo.git
-export GIT_CONFIG=$GIT_DIR/config
-git config core.worktree "$(pwd)/work"
-test_rev_parse 'outside' false false false
-cd work || exit 1
-test_rev_parse 'inside' false false true ''
-cd sub/dir || exit 1
+set_repo . $(pwd)/repo.git $(pwd)/work
+test_rev_parse 'outside git dir' false false false
+
+set_repo work
+test_rev_parse 'inside git dir' false false true ''
+
+set_repo sub/dir
test_rev_parse 'subdirectory' false false true sub/dir/
-cd ../../.. || exit 1
+cd ../../..
say "GIT_WORK_TREE=relative path (override core.worktree)"
-export GIT_DIR=$(pwd)/repo.git
-export GIT_CONFIG=$GIT_DIR/config
-git config core.worktree non-existent
-export GIT_WORK_TREE=work
-test_rev_parse 'outside' false false false
-cd work || exit 1
-export GIT_WORK_TREE=.
-test_rev_parse 'inside' false false true ''
-cd sub/dir || exit 1
-export GIT_WORK_TREE=../..
+
+set_repo . $(pwd)/repo.git work env
+test_rev_parse 'outside git dir' false false false
+
+set_repo work "" . env
+test_rev_parse 'inside git dir' false false true ''
+
+set_repo sub/dir "" ../../ env
test_rev_parse 'subdirectory' false false true sub/dir/
cd ../../.. || exit 1
+say "GIT_WORK_TREE=absolute path, work tree below git dir"
+
mv work repo.git/work
-say "GIT_WORK_TREE=absolute path, work tree below git dir"
-export GIT_DIR=$(pwd)/repo.git
-export GIT_CONFIG=$GIT_DIR/config
-export GIT_WORK_TREE=$(pwd)/repo.git/work
-test_rev_parse 'outside' false false false
-cd repo.git || exit 1
-test_rev_parse 'in repo.git' false true false
-cd objects || exit 1
-test_rev_parse 'in repo.git/objects' false true false
-cd ../work || exit 1
-test_rev_parse 'in repo.git/work' false false true ''
-cd sub/dir || exit 1
-test_rev_parse 'in repo.git/sub/dir' false false true sub/dir/
-cd ../../../.. || exit 1
+set_repo . $(pwd)/repo.git $(pwd)/repo.git/work env
+test_rev_parse 'outside git dir' false false false
+
+set_repo repo.git
+test_rev_parse 'in repo.git' false true false
+
+set_repo objects
+test_rev_parse 'in repo.git/objects' false true false
+
+set_repo ../work
+test_rev_parse 'in repo.git/work' false true true ''
+
+set_repo sub/dir
+test_rev_parse 'in repo.git/sub/dir' false true true sub/dir/
+cd ../../../..
+
+test_expect_success 'repo finds its work tree' '
+ (cd repo.git &&
+ : > work/sub/dir/untracked &&
+ test sub/dir/untracked = "$(git ls-files --others)")
+'
test_done
--
1.5.3.rc2.42.gda8d-dirty
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 4/5] Add test for sanitized work-tree behaviour
2007-07-26 6:32 [PATCH 4/5] Add test for sanitized work-tree behaviour Johannes Schindelin
@ 2007-07-26 7:15 ` Junio C Hamano
2007-07-26 14:05 ` Johannes Schindelin
0 siblings, 1 reply; 3+ messages in thread
From: Junio C Hamano @ 2007-07-26 7:15 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: git, gitster
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> ---
> ...
> @@ -3,90 +3,109 @@
> test_description='test separate work tree'
> . ./test-lib.sh
>
> +i=1
> +
> test_rev_parse() {
> - ...
> + name="$1"
> + for option in --is-bare-repository --is-inside-git-dir \
> + --is-inside-work-tree --show-prefix
> + do
> + shift
> + test_expect_success "$name: $option" \
> + "test '$1' = \"\$(git rev-parse $option)\""
> +i=$(($i+1))
> +test $i = $STOPI && gdb --args git rev-parse $option
Eh?
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 4/5] Add test for sanitized work-tree behaviour
2007-07-26 7:15 ` Junio C Hamano
@ 2007-07-26 14:05 ` Johannes Schindelin
0 siblings, 0 replies; 3+ messages in thread
From: Johannes Schindelin @ 2007-07-26 14:05 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
Hi,
On Thu, 26 Jul 2007, Junio C Hamano wrote:
> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
>
> > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> > ---
> > ...
> > @@ -3,90 +3,109 @@
> > test_description='test separate work tree'
> > . ./test-lib.sh
> >
> > +i=1
> > +
> > test_rev_parse() {
> > - ...
> > + name="$1"
> > + for option in --is-bare-repository --is-inside-git-dir \
> > + --is-inside-work-tree --show-prefix
> > + do
> > + shift
> > + test_expect_success "$name: $option" \
> > + "test '$1' = \"\$(git rev-parse $option)\""
>
> > +i=$(($i+1))
> > +test $i = $STOPI && gdb --args git rev-parse $option
>
> Eh?
Yes, got me there. It was a real PITA to debug that thing, given that the
tests were written in the spirit of Malbolge. So the easiest method to
debug it was for me to "-i -v" the test, run it again with "STOPI=$n ..
-v", and work out what was the intended behaviour, and whether to fix the
test or the logic.
Will clean up.
Ciao,
Dscho
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2007-07-26 14:05 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-26 6:32 [PATCH 4/5] Add test for sanitized work-tree behaviour Johannes Schindelin
2007-07-26 7:15 ` Junio C Hamano
2007-07-26 14:05 ` Johannes Schindelin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).