t / t3903-stash.shon commit Merge branch 'jc/maint-apply-match-beginning' (a1c0dca)
   1#!/bin/sh
   2#
   3# Copyright (c) 2007 Johannes E Schindelin
   4#
   5
   6test_description='Test git-stash'
   7
   8. ./test-lib.sh
   9
  10test_expect_success 'stash some dirty working directory' '
  11        echo 1 > file &&
  12        git add file &&
  13        test_tick &&
  14        git commit -m initial &&
  15        echo 2 > file &&
  16        git add file &&
  17        echo 3 > file &&
  18        test_tick &&
  19        git stash &&
  20        git diff-files --quiet &&
  21        git diff-index --cached --quiet HEAD
  22'
  23
  24cat > expect << EOF
  25diff --git a/file b/file
  26index 0cfbf08..00750ed 100644
  27--- a/file
  28+++ b/file
  29@@ -1 +1 @@
  30-2
  31+3
  32EOF
  33
  34test_expect_success 'parents of stash' '
  35        test $(git rev-parse stash^) = $(git rev-parse HEAD) &&
  36        git diff stash^2..stash > output &&
  37        test_cmp output expect
  38'
  39
  40test_expect_success 'apply needs clean working directory' '
  41        echo 4 > other-file &&
  42        git add other-file &&
  43        echo 5 > other-file &&
  44        test_must_fail git stash apply
  45'
  46
  47test_expect_success 'apply stashed changes' '
  48        git add other-file &&
  49        test_tick &&
  50        git commit -m other-file &&
  51        git stash apply &&
  52        test 3 = $(cat file) &&
  53        test 1 = $(git show :file) &&
  54        test 1 = $(git show HEAD:file)
  55'
  56
  57test_expect_success 'apply stashed changes (including index)' '
  58        git reset --hard HEAD^ &&
  59        echo 6 > other-file &&
  60        git add other-file &&
  61        test_tick &&
  62        git commit -m other-file &&
  63        git stash apply --index &&
  64        test 3 = $(cat file) &&
  65        test 2 = $(git show :file) &&
  66        test 1 = $(git show HEAD:file)
  67'
  68
  69test_expect_success 'unstashing in a subdirectory' '
  70        git reset --hard HEAD &&
  71        mkdir subdir &&
  72        cd subdir &&
  73        git stash apply &&
  74        cd ..
  75'
  76
  77test_expect_success 'drop top stash' '
  78        git reset --hard &&
  79        git stash list > stashlist1 &&
  80        echo 7 > file &&
  81        git stash &&
  82        git stash drop &&
  83        git stash list > stashlist2 &&
  84        diff stashlist1 stashlist2 &&
  85        git stash apply &&
  86        test 3 = $(cat file) &&
  87        test 1 = $(git show :file) &&
  88        test 1 = $(git show HEAD:file)
  89'
  90
  91test_expect_success 'drop middle stash' '
  92        git reset --hard &&
  93        echo 8 > file &&
  94        git stash &&
  95        echo 9 > file &&
  96        git stash &&
  97        git stash drop stash@{1} &&
  98        test 2 = $(git stash list | wc -l) &&
  99        git stash apply &&
 100        test 9 = $(cat file) &&
 101        test 1 = $(git show :file) &&
 102        test 1 = $(git show HEAD:file) &&
 103        git reset --hard &&
 104        git stash drop &&
 105        git stash apply &&
 106        test 3 = $(cat file) &&
 107        test 1 = $(git show :file) &&
 108        test 1 = $(git show HEAD:file)
 109'
 110
 111test_expect_success 'stash pop' '
 112        git reset --hard &&
 113        git stash pop &&
 114        test 3 = $(cat file) &&
 115        test 1 = $(git show :file) &&
 116        test 1 = $(git show HEAD:file) &&
 117        test 0 = $(git stash list | wc -l)
 118'
 119
 120test_done