t / t6004-rev-list-path-optim.shon commit untracked-cache: be defensive about missing NULs in index (c6909f9)
   1#!/bin/sh
   2
   3test_description='git rev-list trivial path optimization test
   4
   5   d/z1
   6   b0                             b1
   7   o------------------------*----o master
   8  /                        /
   9 o---------o----o----o----o side
  10 a0        c0   c1   a1   c2
  11 d/f0      d/f1
  12 d/z0
  13
  14'
  15
  16. ./test-lib.sh
  17
  18test_expect_success setup '
  19        echo Hello >a &&
  20        mkdir d &&
  21        echo World >d/f &&
  22        echo World >d/z &&
  23        git add a d &&
  24        test_tick &&
  25        git commit -m "Initial commit" &&
  26        git rev-parse --verify HEAD &&
  27        git tag initial
  28'
  29
  30test_expect_success path-optimization '
  31        test_tick &&
  32        commit=$(echo "Unchanged tree" | git commit-tree "HEAD^{tree}" -p HEAD) &&
  33        test $(git rev-list $commit | wc -l) = 2 &&
  34        test $(git rev-list $commit -- . | wc -l) = 1
  35'
  36
  37test_expect_success 'further setup' '
  38        git checkout -b side &&
  39        echo Irrelevant >c &&
  40        echo Irrelevant >d/f &&
  41        git add c d/f &&
  42        test_tick &&
  43        git commit -m "Side makes an irrelevant commit" &&
  44        git tag side_c0 &&
  45        echo "More Irrelevancy" >c &&
  46        git add c &&
  47        test_tick &&
  48        git commit -m "Side makes another irrelevant commit" &&
  49        echo Bye >a &&
  50        git add a &&
  51        test_tick &&
  52        git commit -m "Side touches a" &&
  53        git tag side_a1 &&
  54        echo "Yet more Irrelevancy" >c &&
  55        git add c &&
  56        test_tick &&
  57        git commit -m "Side makes yet another irrelevant commit" &&
  58        git checkout master &&
  59        echo Another >b &&
  60        echo Munged >d/z &&
  61        git add b d/z &&
  62        test_tick &&
  63        git commit -m "Master touches b" &&
  64        git tag master_b0 &&
  65        git merge side &&
  66        echo Touched >b &&
  67        git add b &&
  68        test_tick &&
  69        git commit -m "Master touches b again"
  70'
  71
  72test_expect_success 'path optimization 2' '
  73        git rev-parse side_a1 initial >expected &&
  74        git rev-list HEAD -- a >actual &&
  75        test_cmp expected actual
  76'
  77
  78test_expect_success 'pathspec with leading path' '
  79        git rev-parse master^ master_b0 side_c0 initial >expected &&
  80        git rev-list HEAD -- d >actual &&
  81        test_cmp expected actual
  82'
  83
  84test_expect_success 'pathspec with glob (1)' '
  85        git rev-parse master^ master_b0 side_c0 initial >expected &&
  86        git rev-list HEAD -- "d/*" >actual &&
  87        test_cmp expected actual
  88'
  89
  90test_expect_success 'pathspec with glob (2)' '
  91        git rev-parse side_c0 initial >expected &&
  92        git rev-list HEAD -- "d/[a-m]*" >actual &&
  93        test_cmp expected actual
  94'
  95
  96test_done