Git: git9

git9 @ 724c516a6eda0063439457a6701ef0d7ef37eb93

nl='
'

fn die{
	>[1=2] echo $0: $*
	exit $"*
}

fn usage{
	>[1=2] echo -n 'usage:' $usage
	exit 'usage'
}

# subst [-g] this [that]
fn subst{
	awk 'BEGIN{
		global = 0
		for(i = 1; ARGV[i] ~ /^-/; i++){
			if(ARGV[i] == "-g")
				global = 1
			ARGC--
		}
		this = ARGV[i++]; ARGC--
		that = ARGV[i++]; ARGC--
	}
	{
		if(global) gsub(this, that)
		else sub(this, that)
		print
	}' $*
}

fn present {
	if(~ $1 /dev/null && cmp $2 $3>/dev/null)
		status=gone
	if not if (~ $3 /dev/null && cmp $1 $2>/dev/null)
		status=gone
	if not
		status=()
}

# merge1 out theirs base ours
fn merge1 {
	n=$pid
	out=$1
	theirs=$2
	base=$3
	ours=$4
	tmp=$out.tmp
	while(test -f $tmp){
		tmp=$tmp.$n
		n=`{echo $n + 1 | hoc}
	}

	if(! test -f $ours)
		ours=/dev/null
	if(! test -f $base)
		base=/dev/null
	if(! test -f $theirs)
		theirs=/dev/null
	if(! ape/diff3 -3 -m $ours $base $theirs > $tmp)
		echo merge needed: $out

	if(present $ours $base $theirs){
		mv $tmp $out
		git/add $out
	}
	if not {
		rm -f $tmp $out
		git/rm $out
	}
}

fn gitup{
	gitroot=`{git/conf -r >[2]/dev/null}
	if(~ $#gitroot 0)
		die 'not a git repository'
	gitrel=`{pwd | subst '^'$"gitroot'/?'}
	if(~ $#gitrel 0)
		gitrel='.'
	cd $gitroot
	startfs=()
	if(! test -e /mnt/git/ctl)
		startfs=true
	if(! grep -s '^repo '$gitroot'$' /mnt/git/ctl >[2]/dev/null)
		startfs=true
	if(~ $#startfs 1)
		git/fs
	if not
		status=''
}