1f283a5567c4032cdc5a493db5c341e0d2bfda6c
   1#!/bin/sh
   2#
   3# Copyright (C) 2006 Martin Waitz <tali@admingilde.org>
   4#
   5
   6test_description='test transitive info/alternate entries'
   7. ./test-lib.sh
   8
   9base_dir=$(pwd)
  10
  11test_expect_success 'preparing first repository' '
  12        test_create_repo A &&
  13        cd A &&
  14        echo "Hello World" > file1 &&
  15        git add file1 &&
  16        git commit -m "Initial commit" file1 &&
  17        git repack -a -d &&
  18        git prune
  19'
  20
  21cd "$base_dir"
  22
  23test_expect_success 'preparing second repository' '
  24        git clone -l -s A B &&
  25        cd B &&
  26        echo "foo bar" > file2 &&
  27        git add file2 &&
  28        git commit -m "next commit" file2 &&
  29        git repack -a -d -l &&
  30        git prune
  31'
  32
  33cd "$base_dir"
  34
  35test_expect_success 'preparing third repository' '
  36        git clone -l -s B C &&
  37        cd C &&
  38        echo "Goodbye, cruel world" > file3 &&
  39        git add file3 &&
  40        git commit -m "one more" file3 &&
  41        git repack -a -d -l &&
  42        git prune
  43'
  44
  45cd "$base_dir"
  46
  47test_expect_success 'creating too deep nesting' '
  48        git clone -l -s C D &&
  49        git clone -l -s D E &&
  50        git clone -l -s E F &&
  51        git clone -l -s F G &&
  52        git clone --bare -l -s G H
  53'
  54
  55test_expect_success 'invalidity of deepest repository' '
  56        cd H &&
  57        test_must_fail git fsck
  58'
  59
  60cd "$base_dir"
  61
  62test_expect_success 'validity of third repository' '
  63        cd C &&
  64        git fsck
  65'
  66
  67cd "$base_dir"
  68
  69test_expect_success 'validity of fourth repository' '
  70        cd D &&
  71        git fsck
  72'
  73
  74cd "$base_dir"
  75
  76test_expect_success 'breaking of loops' '
  77        echo "$base_dir"/B/.git/objects >>"$base_dir"/A/.git/objects/info/alternatesi &&
  78        cd C &&
  79        git fsck
  80'
  81
  82cd "$base_dir"
  83
  84test_expect_success 'that info/alternates is necessary' '
  85        cd C &&
  86        rm -f .git/objects/info/alternates &&
  87        test_must_fail git fsck
  88'
  89
  90cd "$base_dir"
  91
  92test_expect_success 'that relative alternate is possible for current dir' '
  93        cd C &&
  94        echo "../../../B/.git/objects" > .git/objects/info/alternates &&
  95        git fsck
  96'
  97
  98cd "$base_dir"
  99
 100test_expect_success 'that relative alternate is only possible for current dir' '
 101        cd D &&
 102        test_must_fail git fsck
 103'
 104
 105cd "$base_dir"
 106
 107test_done