t / t3305-notes-fanout.shon commit Move write_shallow_commits to fetch-pack.c (294e15f)
   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 read sha1
  55        do
  56                i=$(($i + 1)) &&
  57                if test $i -gt $num_notes
  58                then
  59                        break
  60                fi &&
  61                test_tick &&
  62                git notes remove "$sha1"
  63        done
  64'
  65
  66test_expect_success 'most notes deleted correctly with git-notes' '
  67        git log HEAD~250 | grep "^    " > output &&
  68        i=50 &&
  69        while test $i -gt 0
  70        do
  71                echo "    commit #$i" &&
  72                echo "    note #$i" &&
  73                i=$(($i - 1));
  74        done > expect &&
  75        test_cmp expect output
  76'
  77
  78test_expect_success 'deleting most notes triggers fanout consolidation' '
  79        # Expect entire notes tree to have a fanout == 0
  80        git ls-tree -r --name-only refs/notes/commits |
  81        while read path
  82        do
  83                case "$path" in
  84                ????????????????????????????????????????)
  85                        : true
  86                        ;;
  87                *)
  88                        echo "Invalid path \"$path\"" &&
  89                        return 1
  90                        ;;
  91                esac
  92        done
  93'
  94
  95test_done