view contrib/plan9/9diff @ 26902:7ffebbdcb371

rebase: preserve the 'intermediate-source' attribute of grafts Preserving the 'source' attribute of grafts started with a69a77a80900, which predates the introduction of 'intermediate-source' in 51930a7180bd by a year and a half. It looks like not preserving this was an oversight. On a related note, notice how the source value of 32af76 is no longer visible in the graph above this test. Is it reasonable to import the sha1 translation from evolve.py:relocate() into scmutil or similar, and use that to fixup these attributes as well as the commit message? (I realize that evolve is still experimental, but I don't see a way to do this from the evolve extension.)
author Matt Harbison <matt_harbison@yahoo.com>
date Sun, 08 Nov 2015 17:56:48 -0500
parents f9262456fb01
children
line wrap: on
line source

#!/bin/rc
# 9diff - Mercurial extdiff wrapper for diff(1)

rfork e

fn getfiles {
	cd $1 &&
	for(f in `{du -as | awk '{print $2}'})
		test -f $f && echo `{cleanname $f}
}

fn usage {
	echo >[1=2] usage: 9diff [diff options] parent child root
	exit usage
}

opts=()
while(~ $1 -*){
	opts=($opts $1)
	shift
}
if(! ~ $#* 3)
	usage

# extdiff will set the parent and child to a single file if there is
# only one change. If there are multiple changes, directories will be
# set. diff(1) does not cope particularly with directories; instead we
# do the recursion ourselves and diff each file individually.
if(test -f $1)
	diff $opts $1 $2
if not{
	# extdiff will create a snapshot of the working copy to prevent
	# conflicts during the diff. We circumvent this behavior by
	# diffing against the repository root to produce plumbable
	# output. This is antisocial.
	for(f in `{sort -u <{getfiles $1} <{getfiles $2}}){
		file1=$1/$f; test -f $file1 || file1=/dev/null
		file2=$3/$f; test -f $file2 || file2=/dev/null
		diff $opts $file1 $file2
	}
}
exit ''