t / t3904-stash-patch.shon commit fsmonitor: simplify determining the git worktree under Windows (1fff303)
   1#!/bin/sh
   2
   3test_description='stash -p'
   4. ./lib-patch-mode.sh
   5
   6if ! test_have_prereq PERL
   7then
   8        skip_all='skipping stash -p tests, perl not available'
   9        test_done
  10fi
  11
  12test_expect_success 'setup' '
  13        mkdir dir &&
  14        echo parent > dir/foo &&
  15        echo dummy > bar &&
  16        echo committed > HEAD &&
  17        git add bar dir/foo HEAD &&
  18        git commit -m initial &&
  19        test_tick &&
  20        test_commit second dir/foo head &&
  21        echo index > dir/foo &&
  22        git add dir/foo &&
  23        set_and_save_state bar bar_work bar_index &&
  24        save_head
  25'
  26
  27# note: order of files with unstaged changes: HEAD bar dir/foo
  28
  29test_expect_success 'saying "n" does nothing' '
  30        set_state HEAD HEADfile_work HEADfile_index &&
  31        set_state dir/foo work index &&
  32        (echo n; echo n; echo n) | test_must_fail git stash save -p &&
  33        verify_state HEAD HEADfile_work HEADfile_index &&
  34        verify_saved_state bar &&
  35        verify_state dir/foo work index
  36'
  37
  38test_expect_success 'git stash -p' '
  39        (echo y; echo n; echo y) | git stash save -p &&
  40        verify_state HEAD committed HEADfile_index &&
  41        verify_saved_state bar &&
  42        verify_state dir/foo head index &&
  43        git reset --hard &&
  44        git stash apply &&
  45        verify_state HEAD HEADfile_work committed &&
  46        verify_state bar dummy dummy &&
  47        verify_state dir/foo work head
  48'
  49
  50test_expect_success 'git stash -p --no-keep-index' '
  51        set_state HEAD HEADfile_work HEADfile_index &&
  52        set_state bar bar_work bar_index &&
  53        set_state dir/foo work index &&
  54        (echo y; echo n; echo y) | git stash save -p --no-keep-index &&
  55        verify_state HEAD committed committed &&
  56        verify_state bar bar_work dummy &&
  57        verify_state dir/foo head head &&
  58        git reset --hard &&
  59        git stash apply --index &&
  60        verify_state HEAD HEADfile_work HEADfile_index &&
  61        verify_state bar dummy bar_index &&
  62        verify_state dir/foo work index
  63'
  64
  65test_expect_success 'git stash --no-keep-index -p' '
  66        set_state HEAD HEADfile_work HEADfile_index &&
  67        set_state bar bar_work bar_index &&
  68        set_state dir/foo work index &&
  69        (echo y; echo n; echo y) | git stash save --no-keep-index -p &&
  70        verify_state HEAD committed committed &&
  71        verify_state dir/foo head head &&
  72        verify_state bar bar_work dummy &&
  73        git reset --hard &&
  74        git stash apply --index &&
  75        verify_state HEAD HEADfile_work HEADfile_index &&
  76        verify_state bar dummy bar_index &&
  77        verify_state dir/foo work index
  78'
  79
  80test_expect_success 'stash -p --no-keep-index -- <pathspec> does not unstage other files' '
  81        set_state HEAD HEADfile_work HEADfile_index &&
  82        set_state dir/foo work index &&
  83        echo y | git stash push -p --no-keep-index -- HEAD &&
  84        verify_state HEAD committed committed &&
  85        verify_state dir/foo work index
  86'
  87
  88test_expect_success 'none of this moved HEAD' '
  89        verify_saved_head
  90'
  91
  92test_expect_failure 'stash -p with split hunk' '
  93        git reset --hard &&
  94        cat >test <<-\EOF &&
  95        aaa
  96        bbb
  97        ccc
  98        EOF
  99        git add test &&
 100        git commit -m "initial" &&
 101        cat >test <<-\EOF &&
 102        aaa
 103        added line 1
 104        bbb
 105        added line 2
 106        ccc
 107        EOF
 108        printf "%s\n" s n y q |
 109        test_might_fail git stash -p 2>error &&
 110        ! test_must_be_empty error &&
 111        grep "added line 1" test &&
 112        ! grep "added line 2" test
 113'
 114
 115test_done