t / t3904-stash-patch.shon commit Merge branch 'maint' (a9583af)
   1#!/bin/sh
   2
   3test_description='git checkout --patch'
   4. ./lib-patch-mode.sh
   5
   6test_expect_success PERL 'setup' '
   7        mkdir dir &&
   8        echo parent > dir/foo &&
   9        echo dummy > bar &&
  10        echo committed > HEAD &&
  11        git add bar dir/foo HEAD &&
  12        git commit -m initial &&
  13        test_tick &&
  14        test_commit second dir/foo head &&
  15        echo index > dir/foo &&
  16        git add dir/foo &&
  17        set_and_save_state bar bar_work bar_index &&
  18        save_head
  19'
  20
  21# note: order of files with unstaged changes: HEAD bar dir/foo
  22
  23test_expect_success PERL 'saying "n" does nothing' '
  24        set_state HEAD HEADfile_work HEADfile_index &&
  25        set_state dir/foo work index &&
  26        (echo n; echo n; echo n) | test_must_fail git stash save -p &&
  27        verify_state HEAD HEADfile_work HEADfile_index &&
  28        verify_saved_state bar &&
  29        verify_state dir/foo work index
  30'
  31
  32test_expect_success PERL 'git stash -p' '
  33        (echo y; echo n; echo y) | git stash save -p &&
  34        verify_state HEAD committed HEADfile_index &&
  35        verify_saved_state bar &&
  36        verify_state dir/foo head index &&
  37        git reset --hard &&
  38        git stash apply &&
  39        verify_state HEAD HEADfile_work committed &&
  40        verify_state bar dummy dummy &&
  41        verify_state dir/foo work head
  42'
  43
  44test_expect_success PERL 'git stash -p --no-keep-index' '
  45        set_state HEAD HEADfile_work HEADfile_index &&
  46        set_state bar bar_work bar_index &&
  47        set_state dir/foo work index &&
  48        (echo y; echo n; echo y) | git stash save -p --no-keep-index &&
  49        verify_state HEAD committed committed &&
  50        verify_state bar bar_work dummy &&
  51        verify_state dir/foo head head &&
  52        git reset --hard &&
  53        git stash apply --index &&
  54        verify_state HEAD HEADfile_work HEADfile_index &&
  55        verify_state bar dummy bar_index &&
  56        verify_state dir/foo work index
  57'
  58
  59test_expect_success PERL 'git stash --no-keep-index -p' '
  60        set_state HEAD HEADfile_work HEADfile_index &&
  61        set_state bar bar_work bar_index &&
  62        set_state dir/foo work index &&
  63        (echo y; echo n; echo y) | git stash save --no-keep-index -p &&
  64        verify_state HEAD committed committed &&
  65        verify_state dir/foo head head &&
  66        verify_state bar bar_work dummy &&
  67        git reset --hard &&
  68        git stash apply --index &&
  69        verify_state HEAD HEADfile_work HEADfile_index &&
  70        verify_state bar dummy bar_index &&
  71        verify_state dir/foo work index
  72'
  73
  74test_expect_success PERL 'none of this moved HEAD' '
  75        verify_saved_head
  76'
  77
  78test_done