t / t3305-notes-fanout.shon commit Merge branch 'rs/strbuf-detach' (bf6136c)
   1#!/bin/sh
   2
   3test_description='Test that adding/removing many notes triggers automatic fanout restructuring'
   4
   5. ./test-lib.sh
   6
   7test_expect_success 'creating many notes with git-notes' '
   8        num_notes=300 &&
   9        i=0 &&
  10        while test $i -lt $num_notes
  11        do
  12                i=$(($i + 1)) &&
  13                test_tick &&
  14                echo "file for commit #$i" > file &&
  15                git add file &&
  16                git commit -q -m "commit #$i" &&
  17                git notes add -m "note #$i" || return 1
  18        done
  19'
  20
  21test_expect_success 'many notes created correctly with git-notes' '
  22        git log | grep "^    " > output &&
  23        i=300 &&
  24        while test $i -gt 0
  25        do
  26                echo "    commit #$i" &&
  27                echo "    note #$i" &&
  28                i=$(($i - 1));
  29        done > expect &&
  30        test_cmp expect output
  31'
  32
  33test_expect_success 'many notes created with git-notes triggers fanout' '
  34        # Expect entire notes tree to have a fanout == 1
  35        git ls-tree -r --name-only refs/notes/commits |
  36        while read path
  37        do
  38                echo $path | grep "^../[0-9a-f]*$" || {
  39                        echo "Invalid path \"$path\"" &&
  40                        return 1;
  41                }
  42        done
  43'
  44
  45test_expect_success 'deleting most notes with git-notes' '
  46        num_notes=250 &&
  47        i=0 &&
  48        git rev-list HEAD |
  49        while test $i -lt $num_notes && read sha1
  50        do
  51                i=$(($i + 1)) &&
  52                test_tick &&
  53                git notes remove "$sha1" ||
  54                exit 1
  55        done
  56'
  57
  58test_expect_success 'most notes deleted correctly with git-notes' '
  59        git log HEAD~250 | grep "^    " > output &&
  60        i=50 &&
  61        while test $i -gt 0
  62        do
  63                echo "    commit #$i" &&
  64                echo "    note #$i" &&
  65                i=$(($i - 1));
  66        done > expect &&
  67        test_cmp expect output
  68'
  69
  70test_expect_success 'deleting most notes triggers fanout consolidation' '
  71        # Expect entire notes tree to have a fanout == 0
  72        git ls-tree -r --name-only refs/notes/commits |
  73        while read path
  74        do
  75                echo $path | grep -v "^../.*" || {
  76                        echo "Invalid path \"$path\"" &&
  77                        return 1;
  78                }
  79        done
  80'
  81
  82test_done