summaryrefslogtreecommitdiff
path: root/sys/src/cmd/git/diff
blob: 8a95b9b35061faf94218fe2cc554aeb3cd110a64 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/rc
rfork ne
. /sys/lib/git/common.rc

gitup

flagfmt='c:commit branch, s:summarize, u:uncommitted'; args='[file ...]'
eval `''{aux/getflags $*} || exec aux/usage

if(~ $#commit 0){
	commit=HEAD
	cparam=()
}

files=()
filt=MAR
if(~ $#uncommitted 1)
	filt=MARU
if(! ~ $#* 0)
	files=`{cleanname -d $gitrel $*}

branch=`{git/query -p $commit}
if(~ $summarize 1 || ~ $uncommitted 1){
	git/walk -f$filt $cparam $files
	exit
}

showed=()
mntgen /mnt/scratch
bind $branch/tree/ /mnt/scratch/a
bind . /mnt/scratch/b
for(f in `$nl{git/walk -c -f$filt $cparam $files}){
	if(~ $#showed 0){
		echo diff `{git/query $commit} uncommitted
		showed=1
	}
	cd /mnt/scratch
	a=a/$f
	b=b/$f
	if(! test -f a/$f)
		a=/dev/null
	if(! test -f b/$f)
		b=/dev/null
	diff -u $a $b
}
exit ''