summaryrefslogtreecommitdiffstats
path: root/inpatch.in
blob: f3c352682cc658fece2a5038b3a07d9598408558 (plain) (blame)
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#! /bin/bash

#  This script is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License version 2 as
#  published by the Free Software Foundation.
#
#  See the COPYING and AUTHORS files for more details.

# Read in library functions
if ! [ -r @LIB@/patchfns ]
then
	echo "Cannot read library @LIB@/patchfns" >&2
	exit 1
fi
. @LIB@/patchfns

usage()
{
	echo "Usage: inpatch [patchname]"
	echo "       inpatch -f filename"
	if [ x$1 = x-h ]
	then
		cat <<EOF

Print the list of files that the topmost or specified patch
changes.

-f	Print which patches change the specified file.

EOF
		exit 0
	else
		exit 1
	fi
}

options=`getopt -o f:h -- "$@"`

if [ $? -ne 0 ]
then
	usage
fi

eval set -- "$options"

while true
do
	case "$1" in
	-f)
		opt_file=$2
		shift 2 ;;
	-h)
		usage -h ;;
	--)
		shift
		break ;;
	esac
done

if [ $# -gt 1 ]
then
	usage
fi
opt_patch=$1

scan_patches()
{
	local patches=$* patch
	for patch in $patches
	do
		refresh_file_list $patch
		status=$?
		if [ $status -eq 2 ]
		then
			if [ -z "$opt_quiet" ]
			then
				echo "Recreated file list for $patch" >&2
			fi
		elif [ $status -ne 0 ]
		then
			echo "Could not create file list for patch $patch" >&2
			return 1
		fi
	done
	
	grep -l -e "^$(quote_re $opt_file)\$" $(pc_file_name $patches) \
	| sed -e 's:^\.pc/::' -e 's:/\.pc$::'
}

if [ -n "$opt_patch" ]
then
	patch=$(stripit "$opt_patch")
else
	patch=$(top_patch)
	if [ -z "$patch" ]
	then
		echo "No patches applied" >&2
		exit 1
	fi
fi

if [ -z "$opt_file" ]
then
	if ! is_applied $patch
	then
		if ! patch_in_series
		then
			echo "Patch $patch not in series file" >&2
		else
			echo "Patch is not applied (no old/new status)" >&2
			no_status=1
		fi
	fi

	for file in $(files_in_patch $patch)
	do
		if [ -n "$no_status" -o -s $(backup_file_name $patch $file) ]
		then
			echo "$file"
		else
			echo "$file (new)"
		fi
	done
else
	#if [ -n "$opt_patch" ]
	#then
	#	scan_patches $(patches_before $opt_patch) | sed -e 's/^/> /'
	#	scan_patches $opt_patch | sed -e 's/^/| /'
	#	scan_patches $(patches_after $opt_patch) | sed -e 's/^/< /'
	#else
	#	series=$(cat_series)
	#	if [ -n "$series" ]
	#	then
	#		scan_patches $series | sed -e 's/^/< /'
	#	fi
	#fi
	series=$(cat_series)
	if [ -n "$series" ]
	then
		scan_patches $series
		#| sed -e 's/^'"$(quote_re $patch)"'$/\0 (here)/'
	fi
fi