1#!/bin/sh 2 3test_description='Test git notes prune' 4 5. ./test-lib.sh 6 7test_expect_success 'setup: create a few commits with notes' ' 8 9 : > file1 && 10 git add file1 && 11 test_tick && 12 git commit -m 1st && 13 git notes add -m "Note #1" && 14 first=$(git rev-parse HEAD) && 15 : > file2 && 16 git add file2 && 17 test_tick && 18 git commit -m 2nd && 19 git notes add -m "Note #2" && 20 second=$(git rev-parse HEAD) && 21 : > file3 && 22 git add file3 && 23 test_tick && 24 git commit -m 3rd && 25 third=$(git rev-parse HEAD) && 26 COMMIT_FILE=$(echo $third | sed "s!^..!.git/objects/&/!") && 27 test -f $COMMIT_FILE && 28 test-tool chmtime =+0 $COMMIT_FILE && 29 git notes add -m "Note #3" 30' 31 32cat > expect <<END_OF_LOG 33commit $third 34Author: A U Thor <author@example.com> 35Date: Thu Apr 7 15:15:13 2005 -0700 36 37 3rd 38 39Notes: 40 Note #3 41 42commit $second 43Author: A U Thor <author@example.com> 44Date: Thu Apr 7 15:14:13 2005 -0700 45 46 2nd 47 48Notes: 49 Note #2 50 51commit $first 52Author: A U Thor <author@example.com> 53Date: Thu Apr 7 15:13:13 2005 -0700 54 55 1st 56 57Notes: 58 Note #1 59END_OF_LOG 60 61test_expect_success 'verify commits and notes' ' 62 63 git log > actual && 64 test_cmp expect actual 65' 66 67test_expect_success 'remove some commits' ' 68 69 git reset --hard HEAD~1 && 70 git reflog expire --expire=now HEAD && 71 git gc --prune=now 72' 73 74test_expect_success 'verify that commits are gone' ' 75 76 test_must_fail git cat-file -p $third && 77 git cat-file -p $second && 78 git cat-file -p $first 79' 80 81test_expect_success 'verify that notes are still present' ' 82 83 git notes show $third && 84 git notes show $second && 85 git notes show $first 86' 87 88test_expect_success 'prune -n does not remove notes' ' 89 90 git notes list > expect && 91 git notes prune -n && 92 git notes list > actual && 93 test_cmp expect actual 94' 95 96 97test_expect_success 'prune -n lists prunable notes' ' 98 99 echo $third >expect && 100 git notes prune -n > actual && 101 test_cmp expect actual 102' 103 104 105test_expect_success 'prune notes' ' 106 107 git notes prune 108' 109 110test_expect_success 'verify that notes are gone' ' 111 112 test_must_fail git notes show $third && 113 git notes show $second && 114 git notes show $first 115' 116 117test_expect_success 'remove some commits' ' 118 119 git reset --hard HEAD~1 && 120 git reflog expire --expire=now HEAD && 121 git gc --prune=now 122' 123 124test_expect_success 'prune -v notes' ' 125 126 echo $second >expect && 127 git notes prune -v > actual && 128 test_cmp expect actual 129' 130 131test_expect_success 'verify that notes are gone' ' 132 133 test_must_fail git notes show $third && 134 test_must_fail git notes show $second && 135 git notes show $first 136' 137 138test_done 139