refs.c: kill register_ref_store(), add register_submodule_ref_store()
[gitweb.git] / t / t3701-add-interactive.sh
index 24ddd8a704b22e32322b8ef52bbd0d2e6195e5e1..f9528fa00c4ad382a99460fbf5b2c9b7a96ec34b 100755 (executable)
@@ -326,15 +326,34 @@ test_expect_success 'split hunk "add -p (edit)"' '
        # 2. Correct version applies the (not)edited version, and asks
        #    about the next hunk, against which we say q and program
        #    exits.
-       for a in s e     q n q q
-       do
-               echo $a
-       done |
+       printf "%s\n" s e     q n q q |
        EDITOR=: git add -p &&
        git diff >actual &&
        ! grep "^+15" actual
 '
 
+test_expect_failure 'split hunk "add -p (no, yes, edit)"' '
+       cat >test <<-\EOF &&
+       5
+       10
+       20
+       21
+       30
+       31
+       40
+       50
+       60
+       EOF
+       git reset &&
+       # test sequence is s(plit), n(o), y(es), e(dit)
+       # q n q q is there to make sure we exit at the end.
+       printf "%s\n" s n y e   q n q q |
+       EDITOR=: git add -p 2>error &&
+       test_must_be_empty error &&
+       git diff >actual &&
+       ! grep "^+31" actual
+'
+
 test_expect_success 'patch mode ignores unmerged entries' '
        git reset --hard &&
        test_commit conflict &&
@@ -361,4 +380,79 @@ test_expect_success 'patch mode ignores unmerged entries' '
        test_cmp expected diff
 '
 
+test_expect_success 'diffs can be colorized' '
+       git reset --hard &&
+
+       # force color even though the test script has no terminal
+       test_config color.ui always &&
+
+       echo content >test &&
+       printf y | git add -p >output 2>&1 &&
+
+       # We do not want to depend on the exact coloring scheme
+       # git uses for diffs, so just check that we saw some kind of color.
+       grep "$(printf "\\033")" output
+'
+
+test_expect_success 'patch-mode via -i prompts for files' '
+       git reset --hard &&
+
+       echo one >file &&
+       echo two >test &&
+       git add -i <<-\EOF &&
+       patch
+       test
+
+       y
+       quit
+       EOF
+
+       echo test >expect &&
+       git diff --cached --name-only >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'add -p handles globs' '
+       git reset --hard &&
+
+       mkdir -p subdir &&
+       echo base >one.c &&
+       echo base >subdir/two.c &&
+       git add "*.c" &&
+       git commit -m base &&
+
+       echo change >one.c &&
+       echo change >subdir/two.c &&
+       git add -p "*.c" <<-\EOF &&
+       y
+       y
+       EOF
+
+       cat >expect <<-\EOF &&
+       one.c
+       subdir/two.c
+       EOF
+       git diff --cached --name-only >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'add -p does not expand argument lists' '
+       git reset --hard &&
+
+       echo content >not-changed &&
+       git add not-changed &&
+       git commit -m "add not-changed file" &&
+
+       echo change >file &&
+       GIT_TRACE=$(pwd)/trace.out git add -p . <<-\EOF &&
+       y
+       EOF
+
+       # we know that "file" must be mentioned since we actually
+       # update it, but we want to be sure that our "." pathspec
+       # was not expanded into the argument list of any command.
+       # So look only for "not-changed".
+       ! grep not-changed trace.out
+'
+
 test_done