[PATCH 21/24] t7063: tests for untracked cache

2015-03-08 Thread Nguyễn Thái Ngọc Duy
Signed-off-by: Nguyễn Thái Ngọc Duy pclo...@gmail.com
Signed-off-by: Junio C Hamano gits...@pobox.com
---
 .gitignore |   1 +
 Makefile   |   1 +
 t/t7063-status-untracked-cache.sh (new +x) | 353 +
 test-dump-untracked-cache.c (new)  |  61 +
 4 files changed, 416 insertions(+)
 create mode 100755 t/t7063-status-untracked-cache.sh
 create mode 100644 test-dump-untracked-cache.c

diff --git a/.gitignore b/.gitignore
index 81e12c0..e2bb375 100644
--- a/.gitignore
+++ b/.gitignore
@@ -182,6 +182,7 @@
 /test-delta
 /test-dump-cache-tree
 /test-dump-split-index
+/test-dump-untracked-cache
 /test-scrap-cache-tree
 /test-genrandom
 /test-hashmap
diff --git a/Makefile b/Makefile
index 9f984a9..fa58a53 100644
--- a/Makefile
+++ b/Makefile
@@ -555,6 +555,7 @@ TEST_PROGRAMS_NEED_X += test-date
 TEST_PROGRAMS_NEED_X += test-delta
 TEST_PROGRAMS_NEED_X += test-dump-cache-tree
 TEST_PROGRAMS_NEED_X += test-dump-split-index
+TEST_PROGRAMS_NEED_X += test-dump-untracked-cache
 TEST_PROGRAMS_NEED_X += test-genrandom
 TEST_PROGRAMS_NEED_X += test-hashmap
 TEST_PROGRAMS_NEED_X += test-index-version
diff --git a/t/t7063-status-untracked-cache.sh 
b/t/t7063-status-untracked-cache.sh
new file mode 100755
index 000..2b2ffd7
--- /dev/null
+++ b/t/t7063-status-untracked-cache.sh
@@ -0,0 +1,353 @@
+#!/bin/sh
+
+test_description='test untracked cache'
+
+. ./test-lib.sh
+
+avoid_racy() {
+   sleep 1
+}
+
+git update-index --untracked-cache
+# It's fine if git update-index returns an error code other than one,
+# it'll be caught in the first test.
+if test $? -eq 1; then
+   skip_all='This system does not support untracked cache'
+   test_done
+fi
+
+test_expect_success 'setup' '
+   git init worktree 
+   cd worktree 
+   mkdir done dtwo dthree 
+   touch one two three done/one dtwo/two dthree/three 
+   git add one two done/one 
+   : .git/info/exclude 
+   git update-index --untracked-cache
+'
+
+test_expect_success 'untracked cache is empty' '
+   test-dump-untracked-cache ../actual 
+   cat ../expect EOF 
+info/exclude 
+core.excludesfile 
+exclude_per_dir .gitignore
+flags 0006
+EOF
+   test_cmp ../expect ../actual
+'
+
+cat ../status.expect EOF 
+A  done/one
+A  one
+A  two
+?? dthree/
+?? dtwo/
+?? three
+EOF
+
+cat ../dump.expect EOF 
+info/exclude e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
+core.excludesfile 
+exclude_per_dir .gitignore
+flags 0006
+/  recurse valid
+dthree/
+dtwo/
+three
+/done/  recurse valid
+/dthree/  recurse check_only valid
+three
+/dtwo/  recurse check_only valid
+two
+EOF
+
+test_expect_success 'status first time (empty cache)' '
+   avoid_racy 
+   : ../trace 
+   GIT_TRACE_UNTRACKED_STATS=$TRASH_DIRECTORY/trace \
+   git status --porcelain ../actual 
+   test_cmp ../status.expect ../actual 
+   cat ../trace.expect EOF 
+node creation: 3
+gitignore invalidation: 1
+directory invalidation: 0
+opendir: 4
+EOF
+   test_cmp ../trace.expect ../trace
+'
+
+test_expect_success 'untracked cache after first status' '
+   test-dump-untracked-cache ../actual 
+   test_cmp ../dump.expect ../actual
+'
+
+test_expect_success 'status second time (fully populated cache)' '
+   avoid_racy 
+   : ../trace 
+   GIT_TRACE_UNTRACKED_STATS=$TRASH_DIRECTORY/trace \
+   git status --porcelain ../actual 
+   test_cmp ../status.expect ../actual 
+   cat ../trace.expect EOF 
+node creation: 0
+gitignore invalidation: 0
+directory invalidation: 0
+opendir: 0
+EOF
+   test_cmp ../trace.expect ../trace
+'
+
+test_expect_success 'untracked cache after second status' '
+   test-dump-untracked-cache ../actual 
+   test_cmp ../dump.expect ../actual
+'
+
+test_expect_success 'modify in root directory, one dir invalidation' '
+   avoid_racy 
+   : four 
+   : ../trace 
+   GIT_TRACE_UNTRACKED_STATS=$TRASH_DIRECTORY/trace \
+   git status --porcelain ../actual 
+   cat ../status.expect EOF 
+A  done/one
+A  one
+A  two
+?? dthree/
+?? dtwo/
+?? four
+?? three
+EOF
+   test_cmp ../status.expect ../actual 
+   cat ../trace.expect EOF 
+node creation: 0
+gitignore invalidation: 0
+directory invalidation: 1
+opendir: 1
+EOF
+   test_cmp ../trace.expect ../trace
+
+'
+
+test_expect_success 'verify untracked cache dump' '
+   test-dump-untracked-cache ../actual 
+   cat ../expect EOF 
+info/exclude e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
+core.excludesfile 
+exclude_per_dir .gitignore
+flags 0006
+/  

[PATCH 21/24] t7063: tests for untracked cache

2015-02-08 Thread Nguyễn Thái Ngọc Duy
Signed-off-by: Nguyễn Thái Ngọc Duy pclo...@gmail.com
Signed-off-by: Junio C Hamano gits...@pobox.com
---
 .gitignore |   1 +
 Makefile   |   1 +
 t/t7063-status-untracked-cache.sh (new +x) | 353 +
 test-dump-untracked-cache.c (new)  |  61 +
 4 files changed, 416 insertions(+)
 create mode 100755 t/t7063-status-untracked-cache.sh
 create mode 100644 test-dump-untracked-cache.c

diff --git a/.gitignore b/.gitignore
index 81e12c0..e2bb375 100644
--- a/.gitignore
+++ b/.gitignore
@@ -182,6 +182,7 @@
 /test-delta
 /test-dump-cache-tree
 /test-dump-split-index
+/test-dump-untracked-cache
 /test-scrap-cache-tree
 /test-genrandom
 /test-hashmap
diff --git a/Makefile b/Makefile
index 9f984a9..fa58a53 100644
--- a/Makefile
+++ b/Makefile
@@ -555,6 +555,7 @@ TEST_PROGRAMS_NEED_X += test-date
 TEST_PROGRAMS_NEED_X += test-delta
 TEST_PROGRAMS_NEED_X += test-dump-cache-tree
 TEST_PROGRAMS_NEED_X += test-dump-split-index
+TEST_PROGRAMS_NEED_X += test-dump-untracked-cache
 TEST_PROGRAMS_NEED_X += test-genrandom
 TEST_PROGRAMS_NEED_X += test-hashmap
 TEST_PROGRAMS_NEED_X += test-index-version
diff --git a/t/t7063-status-untracked-cache.sh 
b/t/t7063-status-untracked-cache.sh
new file mode 100755
index 000..2b2ffd7
--- /dev/null
+++ b/t/t7063-status-untracked-cache.sh
@@ -0,0 +1,353 @@
+#!/bin/sh
+
+test_description='test untracked cache'
+
+. ./test-lib.sh
+
+avoid_racy() {
+   sleep 1
+}
+
+git update-index --untracked-cache
+# It's fine if git update-index returns an error code other than one,
+# it'll be caught in the first test.
+if test $? -eq 1; then
+   skip_all='This system does not support untracked cache'
+   test_done
+fi
+
+test_expect_success 'setup' '
+   git init worktree 
+   cd worktree 
+   mkdir done dtwo dthree 
+   touch one two three done/one dtwo/two dthree/three 
+   git add one two done/one 
+   : .git/info/exclude 
+   git update-index --untracked-cache
+'
+
+test_expect_success 'untracked cache is empty' '
+   test-dump-untracked-cache ../actual 
+   cat ../expect EOF 
+info/exclude 
+core.excludesfile 
+exclude_per_dir .gitignore
+flags 0006
+EOF
+   test_cmp ../expect ../actual
+'
+
+cat ../status.expect EOF 
+A  done/one
+A  one
+A  two
+?? dthree/
+?? dtwo/
+?? three
+EOF
+
+cat ../dump.expect EOF 
+info/exclude e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
+core.excludesfile 
+exclude_per_dir .gitignore
+flags 0006
+/  recurse valid
+dthree/
+dtwo/
+three
+/done/  recurse valid
+/dthree/  recurse check_only valid
+three
+/dtwo/  recurse check_only valid
+two
+EOF
+
+test_expect_success 'status first time (empty cache)' '
+   avoid_racy 
+   : ../trace 
+   GIT_TRACE_UNTRACKED_STATS=$TRASH_DIRECTORY/trace \
+   git status --porcelain ../actual 
+   test_cmp ../status.expect ../actual 
+   cat ../trace.expect EOF 
+node creation: 3
+gitignore invalidation: 1
+directory invalidation: 0
+opendir: 4
+EOF
+   test_cmp ../trace.expect ../trace
+'
+
+test_expect_success 'untracked cache after first status' '
+   test-dump-untracked-cache ../actual 
+   test_cmp ../dump.expect ../actual
+'
+
+test_expect_success 'status second time (fully populated cache)' '
+   avoid_racy 
+   : ../trace 
+   GIT_TRACE_UNTRACKED_STATS=$TRASH_DIRECTORY/trace \
+   git status --porcelain ../actual 
+   test_cmp ../status.expect ../actual 
+   cat ../trace.expect EOF 
+node creation: 0
+gitignore invalidation: 0
+directory invalidation: 0
+opendir: 0
+EOF
+   test_cmp ../trace.expect ../trace
+'
+
+test_expect_success 'untracked cache after second status' '
+   test-dump-untracked-cache ../actual 
+   test_cmp ../dump.expect ../actual
+'
+
+test_expect_success 'modify in root directory, one dir invalidation' '
+   avoid_racy 
+   : four 
+   : ../trace 
+   GIT_TRACE_UNTRACKED_STATS=$TRASH_DIRECTORY/trace \
+   git status --porcelain ../actual 
+   cat ../status.expect EOF 
+A  done/one
+A  one
+A  two
+?? dthree/
+?? dtwo/
+?? four
+?? three
+EOF
+   test_cmp ../status.expect ../actual 
+   cat ../trace.expect EOF 
+node creation: 0
+gitignore invalidation: 0
+directory invalidation: 1
+opendir: 1
+EOF
+   test_cmp ../trace.expect ../trace
+
+'
+
+test_expect_success 'verify untracked cache dump' '
+   test-dump-untracked-cache ../actual 
+   cat ../expect EOF 
+info/exclude e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
+core.excludesfile 
+exclude_per_dir .gitignore
+flags 0006
+/  

[PATCH 21/24] t7063: tests for untracked cache

2015-01-20 Thread Nguyễn Thái Ngọc Duy
Signed-off-by: Nguyễn Thái Ngọc Duy pclo...@gmail.com
Signed-off-by: Junio C Hamano gits...@pobox.com
---
 .gitignore |   1 +
 Makefile   |   1 +
 t/t7063-status-untracked-cache.sh (new +x) | 353 +
 test-dump-untracked-cache.c (new)  |  61 +
 4 files changed, 416 insertions(+)
 create mode 100755 t/t7063-status-untracked-cache.sh
 create mode 100644 test-dump-untracked-cache.c

diff --git a/.gitignore b/.gitignore
index 81e12c0..e2bb375 100644
--- a/.gitignore
+++ b/.gitignore
@@ -182,6 +182,7 @@
 /test-delta
 /test-dump-cache-tree
 /test-dump-split-index
+/test-dump-untracked-cache
 /test-scrap-cache-tree
 /test-genrandom
 /test-hashmap
diff --git a/Makefile b/Makefile
index 9f984a9..fa58a53 100644
--- a/Makefile
+++ b/Makefile
@@ -555,6 +555,7 @@ TEST_PROGRAMS_NEED_X += test-date
 TEST_PROGRAMS_NEED_X += test-delta
 TEST_PROGRAMS_NEED_X += test-dump-cache-tree
 TEST_PROGRAMS_NEED_X += test-dump-split-index
+TEST_PROGRAMS_NEED_X += test-dump-untracked-cache
 TEST_PROGRAMS_NEED_X += test-genrandom
 TEST_PROGRAMS_NEED_X += test-hashmap
 TEST_PROGRAMS_NEED_X += test-index-version
diff --git a/t/t7063-status-untracked-cache.sh 
b/t/t7063-status-untracked-cache.sh
new file mode 100755
index 000..2b2ffd7
--- /dev/null
+++ b/t/t7063-status-untracked-cache.sh
@@ -0,0 +1,353 @@
+#!/bin/sh
+
+test_description='test untracked cache'
+
+. ./test-lib.sh
+
+avoid_racy() {
+   sleep 1
+}
+
+git update-index --untracked-cache
+# It's fine if git update-index returns an error code other than one,
+# it'll be caught in the first test.
+if test $? -eq 1; then
+   skip_all='This system does not support untracked cache'
+   test_done
+fi
+
+test_expect_success 'setup' '
+   git init worktree 
+   cd worktree 
+   mkdir done dtwo dthree 
+   touch one two three done/one dtwo/two dthree/three 
+   git add one two done/one 
+   : .git/info/exclude 
+   git update-index --untracked-cache
+'
+
+test_expect_success 'untracked cache is empty' '
+   test-dump-untracked-cache ../actual 
+   cat ../expect EOF 
+info/exclude 
+core.excludesfile 
+exclude_per_dir .gitignore
+flags 0006
+EOF
+   test_cmp ../expect ../actual
+'
+
+cat ../status.expect EOF 
+A  done/one
+A  one
+A  two
+?? dthree/
+?? dtwo/
+?? three
+EOF
+
+cat ../dump.expect EOF 
+info/exclude e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
+core.excludesfile 
+exclude_per_dir .gitignore
+flags 0006
+/  recurse valid
+dthree/
+dtwo/
+three
+/done/  recurse valid
+/dthree/  recurse check_only valid
+three
+/dtwo/  recurse check_only valid
+two
+EOF
+
+test_expect_success 'status first time (empty cache)' '
+   avoid_racy 
+   : ../trace 
+   GIT_TRACE_UNTRACKED_STATS=$TRASH_DIRECTORY/trace \
+   git status --porcelain ../actual 
+   test_cmp ../status.expect ../actual 
+   cat ../trace.expect EOF 
+node creation: 3
+gitignore invalidation: 1
+directory invalidation: 0
+opendir: 4
+EOF
+   test_cmp ../trace.expect ../trace
+'
+
+test_expect_success 'untracked cache after first status' '
+   test-dump-untracked-cache ../actual 
+   test_cmp ../dump.expect ../actual
+'
+
+test_expect_success 'status second time (fully populated cache)' '
+   avoid_racy 
+   : ../trace 
+   GIT_TRACE_UNTRACKED_STATS=$TRASH_DIRECTORY/trace \
+   git status --porcelain ../actual 
+   test_cmp ../status.expect ../actual 
+   cat ../trace.expect EOF 
+node creation: 0
+gitignore invalidation: 0
+directory invalidation: 0
+opendir: 0
+EOF
+   test_cmp ../trace.expect ../trace
+'
+
+test_expect_success 'untracked cache after second status' '
+   test-dump-untracked-cache ../actual 
+   test_cmp ../dump.expect ../actual
+'
+
+test_expect_success 'modify in root directory, one dir invalidation' '
+   avoid_racy 
+   : four 
+   : ../trace 
+   GIT_TRACE_UNTRACKED_STATS=$TRASH_DIRECTORY/trace \
+   git status --porcelain ../actual 
+   cat ../status.expect EOF 
+A  done/one
+A  one
+A  two
+?? dthree/
+?? dtwo/
+?? four
+?? three
+EOF
+   test_cmp ../status.expect ../actual 
+   cat ../trace.expect EOF 
+node creation: 0
+gitignore invalidation: 0
+directory invalidation: 1
+opendir: 1
+EOF
+   test_cmp ../trace.expect ../trace
+
+'
+
+test_expect_success 'verify untracked cache dump' '
+   test-dump-untracked-cache ../actual 
+   cat ../expect EOF 
+info/exclude e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
+core.excludesfile 
+exclude_per_dir .gitignore
+flags 0006
+/