t / t5400-send-pack.shon commit xdl_merge(): fix a segmentation fault when refining conflicts (5d6b151)
   1#!/bin/sh
   2#
   3# Copyright (c) 2005 Junio C Hamano
   4#
   5
   6test_description='See why rewinding head breaks send-pack
   7
   8'
   9. ./test-lib.sh
  10
  11touch cpio-test
  12test_expect_success 'working cpio' 'echo cpio-test | cpio -o > /dev/null'
  13
  14cnt='1'
  15test_expect_success setup '
  16        tree=$(git-write-tree) &&
  17        commit=$(echo "Commit #0" | git-commit-tree $tree) &&
  18        zero=$commit &&
  19        parent=$zero &&
  20        for i in $cnt
  21        do
  22            sleep 1 &&
  23            commit=$(echo "Commit #$i" | git-commit-tree $tree -p $parent) &&
  24            parent=$commit || return 1
  25        done &&
  26        git-update-ref HEAD "$commit" &&
  27        git-clone -l ./. victim &&
  28        cd victim &&
  29        git-log &&
  30        cd .. &&
  31        git-update-ref HEAD "$zero" &&
  32        parent=$zero &&
  33        for i in $cnt
  34        do
  35            sleep 1 &&
  36            commit=$(echo "Rebase #$i" | git-commit-tree $tree -p $parent) &&
  37            parent=$commit || return 1
  38        done &&
  39        git-update-ref HEAD "$commit" &&
  40        echo Rebase &&
  41        git-log'
  42
  43test_expect_success \
  44        'pushing rewound head should not barf but require --force' ' 
  45        # should not fail but refuse to update.
  46        if git-send-pack ./victim/.git/ master
  47        then
  48                # now it should fail with Pasky patch
  49                echo >&2 Gaah, it should have failed.
  50                false
  51        else
  52                echo >&2 Thanks, it correctly failed.
  53                true
  54        fi &&
  55        if cmp victim/.git/refs/heads/master .git/refs/heads/master
  56        then
  57                # should have been left as it was!
  58                false
  59        else
  60                true
  61        fi &&
  62        # this should update
  63        git-send-pack --force ./victim/.git/ master &&
  64        cmp victim/.git/refs/heads/master .git/refs/heads/master
  65'
  66
  67test_expect_success \
  68        'push can be used to delete a ref' '
  69        cd victim &&
  70        git branch extra master &&
  71        cd .. &&
  72        test -f victim/.git/refs/heads/extra &&
  73        git-send-pack ./victim/.git/ :extra master &&
  74        ! test -f victim/.git/refs/heads/extra
  75'
  76
  77unset GIT_CONFIG GIT_CONFIG_LOCAL
  78HOME=`pwd`/no-such-directory
  79export HOME ;# this way we force the victim/.git/config to be used.
  80
  81test_expect_success \
  82        'pushing with --force should be denied with denyNonFastforwards' '
  83        cd victim &&
  84        git-repo-config receive.denyNonFastforwards true &&
  85        cd .. &&
  86        git-update-ref refs/heads/master master^ &&
  87        git-send-pack --force ./victim/.git/ master &&
  88        ! diff -u .git/refs/heads/master victim/.git/refs/heads/master
  89'
  90
  91test_done