#!/bin/bash
set -e
. tests/lib

t-setup-import examplegit
t-tstunt-parsechangelog

cd $tmp/git/$p.git
git config core.sharedRepository true
chmod -R g+w objects
umask 022

cd $tmp/example

suite=stable

t-commit 'No changes, just send to stable' '' stable

t-make-badcommit
git reset --hard $badcommit

t-dgit -wgf build
t-dgit push --overwrite=1.2 stable
t-archive-process-incoming stable

rstable=refs/remotes/dgit/dgit/stable

t-dgit fetch stable
t-has-parent-or-is $rstable $badcommit

fixup=${DGIT_BADCOMMIT_FIXUP-dgit-badcommit-fixup}

cd $tmp/git/$p.git
git gc --aggressive --prune=all
rmdir objects/* ||:

$fixup --real

cd $tmp/$p
git symbolic-ref HEAD >../sym.before
git rev-parse HEAD >../ref.before

$fixup --real

git symbolic-ref HEAD >../sym.after
git rev-parse HEAD >../ref.after
diff ../sym.before ../sym.after
set +e; diff ../ref.before ../ref.after; rc=$?; set -e; test $rc = 1

t-dgit fetch stable

t-expect-fail "child $rstable lacks parent $badcommit" \
t-has-parent-or-is $rstable $badcommit

check_shared () {
	find "$1" -perm -200 \! -perm -020 -ls |tee $tmp/badperm
	test -f $tmp/badperm -a ! -s $tmp/badperm
}

check_shared $tmp/git/$p.git/objects

t-ok
