5 # Copyright (c) 2000-2005 Per Liden
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2 of the License, or
10 # (at your option) any later version.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
39 if [ -e "$TMPFILE" ]; then
45 diff -u "$1" "$2" > "$3"
49 diff --old-group-format="%<" \
50 --new-group-format="%>" \
51 --changed-group-format="<<<<< MERGE CONFLICT $1 >>>>>
52 %<<<<<< MERGE CONFLICT $2 >>>>>
53 %><<<<< END MERGE CONFLICT >>>>>
57 REJMERGE_MERGE_INFO
="$(grep -c '^<<<<< END MERGE CONFLICT >>>>>$' "$3") merge conflict(s)."
62 info
"Access permissions $1"
63 stat
-c '%A %U %G %n' "$1"
64 stat
-c '%A %U %G %n' "$2"
66 info_n
"[K]eep [U]pgrade [D]iff [S]kip? "
71 k
|K
) chown
--reference="$1" "$2"
72 chmod --reference="$1" "$2"
75 u
|U
) chown
--reference="$2" "$1"
76 chmod --reference="$2" "$1"
89 rejmerge_merge
"$1" "$2" "$TMPFILE"
95 if [ "$REJMERGE_MERGE_INFO" ]; then
96 info
"$REJMERGE_MERGE_INFO"
97 unset REJMERGE_MERGE_INFO
101 info_n
"[I]nstall [E]dit [V]iew [S]kip? "
106 i
|I
) chmod --reference="$1" "$TMPFILE"
107 mv -f "$TMPFILE" "$1"
111 e
|E
) $EDITOR "$TMPFILE"
126 rejmerge_diff
"$1" "$2" "$TMPFILE"
130 cat "$TMPFILE" | more
132 info_n
"[K]eep [U]pgrade [M]erge [D]iff [S]kip? "
143 m
|M
) merge_menu
"$1" "$2"
162 info_n
"[K]eep [U]pgrade [D]iff [S]kip? "
183 echo "usage: $REJMERGE_COMMAND [options]"
185 echo " -r, --root <path> specify alternative root"
186 echo " -v, --version print version and exit "
187 echo " -h, --help print help and exit"
195 echo "$REJMERGE_COMMAND: option $1 requires an argument"
199 REJMERGE_CONF
="$2$REJMERGE_CONF"
200 REJECTED_DIR
="$2$REJECTED_DIR"
203 echo "$REJMERGE_COMMAND (pkgutils) $REJMERGE_VERSION"
209 echo "$REJMERGE_COMMAND: invalid option $1"
215 if [ ! -d "$REJECTED_DIR" ]; then
216 echo "$REJMERGE_COMMAND: $REJECTED_DIR not found"
222 local STAT_FILE1
=$
(stat
-c '%F' "$1")
223 local STAT_FILE2
=$
(stat
-c '%F' "$2")
225 if [ "$STAT_FILE1" != "regular file" ]; then
229 if [ "$STAT_FILE2" != "regular file" ]; then
239 if [ "$UID" != "0" ]; then
240 echo "$REJMERGE_COMMAND: only root can merge rejected files"
245 if [ -f "$REJMERGE_CONF" ]; then
249 REJECTED_FILES_FOUND
="no"
252 for REJECTED_FILE
in $
(find $REJECTED_DIR ! -type d
); do
253 INSTALLED_FILE
="$REJMERGE_ROOT${REJECTED_FILE##$REJECTED_DIR}"
255 # Remove rejected file if there is no installed version
256 if [ ! -e "$INSTALLED_FILE" ]; then
257 rm -f "$REJECTED_FILE"
262 local STAT_FILE1
=$
(stat
-c '%A %U %G' "$INSTALLED_FILE")
263 local STAT_FILE2
=$
(stat
-c '%A %U %G' "$REJECTED_FILE")
265 if [ "$STAT_FILE1" != "$STAT_FILE2" ]; then
266 REJECTED_FILES_FOUND
="yes"
267 permissions_menu
"$INSTALLED_FILE" "$REJECTED_FILE"
271 if files_regular
"$INSTALLED_FILE" "$REJECTED_FILE"; then
272 # Both files are regular
273 if cmp -s "$INSTALLED_FILE" "$REJECTED_FILE"; then
274 rm -f "$REJECTED_FILE"
276 REJECTED_FILES_FOUND
="yes"
277 diff_menu
"$INSTALLED_FILE" "$REJECTED_FILE"
280 # At least one file is non-regular
281 REJECTED_FILES_FOUND
="yes"
282 file_menu
"$INSTALLED_FILE" "$REJECTED_FILE"
286 # Remove empty directories
287 for DIR
in $
(find $REJECTED_DIR -depth -type d
); do
288 if [ "$DIR" != "$REJECTED_DIR" ]; then
289 rmdir "$DIR" &> /dev
/null
293 if [ "$REJECTED_FILES_FOUND" = "no" ]; then
294 echo "Nothing to merge"
300 trap "interrupted" SIGHUP SIGINT SIGQUIT SIGTERM
305 readonly REJMERGE_VERSION
="#VERSION#"
306 readonly REJMERGE_COMMAND
="${0##*/}"
308 REJMERGE_CONF
="/etc/rejmerge.conf"
309 REJECTED_DIR
="/var/lib/pkg/rejected"
311 TMPFILE
=$
(mktemp
) || exit 1