aboutsummaryrefslogtreecommitdiff
path: root/conv
blob: c2777603f18eb87fbf9080e4eb556396f69cbe72 (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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/bin/sh

# conv -- convert git diff -p output to pkgsrc patch

IFS='
'

{
	echo '$NetBSD$'
	echo

	# get patch description
	if [ x"$1" = x"-i" ]; then
		f=`mktemp -t ${0##*/}` || exit 1
		echo 'Edit patch description...' > $f
		</dev/tty >/dev/tty vi $f
		c=`cat $f`
		if [ x"$c" != x"Edit patch description..." ]; then
			printf '%s\n\n' "$c"
		fi
		rm $f
	fi

	sed '
		/^diff/d;
		/^index/d;
		s/^--- .*/&/;
	'
} |
while read -r line; do
	case "$line" in
	diff*)	;;
	index*)	;;
	'--- a/'*)
		file=${line#--- a/}
		echo -n "--- $file.orig	"
		file=$(git rev-parse --show-toplevel)/$file
		echo "$(stat -x "$file")" | sed -n 's/^Access: //p' ;;
	'+++ b/'*)
		echo "+++ ${line#+++ b/}" ;;
	*)
		echo "$line" ;;
	esac
done | {
if [ x"$1" = x"-i" ]; then
	# read patch before proceeding
	patch=`cat`

	# get patch directory
	dir=$2
	if [ -z "$2" ]; then
		echo -n 'Package name: ' >/dev/tty
		read dir </dev/tty
	fi
	dir=~/patches/$dir
	mkdir -p $dir

	# get patch name
	name=$3
	if [ -z "$3" ]; then
		echo -n 'Patch name: ' >/dev/tty
		read name </dev/tty
	fi

	case $name in
	patch-*) ;;
	*) name=patch-$name ;;
	esac

	# write patch if it doesn't already exist
	if [ -e $dir/$name ]; then
		f=`mktemp -t ${0##*/}` || exit 1
		printf '%s\n' "$patch" > $f
		echo "error: $dir/$name already exists; saving to $f" 1>&2
		exit 1
	else
		printf '%s\n' "$patch" > $dir/$name
		echo $dir/$name 1>&2
	fi
else
	cat
fi
}