t / t3305-notes-fanout.shon commit Merge branch 'pw/add-p-single' (60f8b89)
   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                case "$path" in
  39                ??/??????????????????????????????????????)
  40                        : true
  41                        ;;
  42                *)
  43                        echo "Invalid path \"$path\"" &&
  44                        return 1
  45                        ;;
  46                esac
  47        done
  48'
  49
  50test_expect_success 'deleting most notes with git-notes' '
  51        num_notes=250 &&
  52        i=0 &&
  53        git rev-list HEAD |
  54        while test $i -lt $num_notes && read sha1
  55        do
  56                i=$(($i + 1)) &&
  57                test_tick &&
  58                git notes remove "$sha1" ||
  59                exit 1
  60        done
  61'
  62
  63test_expect_success 'most notes deleted correctly with git-notes' '
  64        git log HEAD~250 | grep "^    " > output &&
  65        i=50 &&
  66        while test $i -gt 0
  67        do
  68                echo "    commit #$i" &&
  69                echo "    note #$i" &&
  70                i=$(($i - 1));
  71        done > expect &&
  72        test_cmp expect output
  73'
  74
  75test_expect_success 'deleting most notes triggers fanout consolidation' '
  76        # Expect entire notes tree to have a fanout == 0
  77        git ls-tree -r --name-only refs/notes/commits |
  78        while read path
  79        do
  80                case "$path" in
  81                ????????????????????????????????????????)
  82                        : true
  83                        ;;
  84                *)
  85                        echo "Invalid path \"$path\"" &&
  86                        return 1
  87                        ;;
  88                esac
  89        done
  90'
  91
  92test_done