Mercurial > hg
diff contrib/plan9/9diff @ 16383:f5dd179bfa4a
plan9: initial support for plan 9 from bell labs
This patch contains support for Plan 9 from Bell Labs. A README is
provided in contrib/plan9 which describes the port in greater detail.
A new extension is also provided named factotum which permits the
factotum(4) authentication agent to provide credentials for HTTP
repositories. This extension is also applicable to other POSIX
platforms which make use of Plan 9 from User Space (aka plan9ports).
author | Steven Stallion <sstallion@gmail.com> |
---|---|
date | Sun, 08 Apr 2012 12:43:41 -0700 |
parents | |
children | f9262456fb01 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/plan9/9diff Sun Apr 08 12:43:41 2012 -0700 @@ -0,0 +1,42 @@ +#!/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 ''