5 # Copyright (c) 2000-2005 Per Liden
6 # Copyright (c) 2006-2007 by CRUX team (http://crux.nu)
8 # This program is free software; you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 2 of the License, or
11 # (at your option) any later version.
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with this program; if not, write to the Free Software
20 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
40 if [ -e "$TMPFILE" ]; then
46 diff -u "$1" "$2" > "$3"
50 diff --old-group-format="%<" \
51 --new-group-format="%>" \
52 --changed-group-format="<<<<< MERGE CONFLICT $1 >>>>>
53 %<<<<<< MERGE CONFLICT $2 >>>>>
54 %><<<<< END MERGE CONFLICT >>>>>
58 REJMERGE_MERGE_INFO
="$(grep -c '^<<<<< END MERGE CONFLICT >>>>>$' "$3") merge conflict(s)."
63 info
"Access permissions $1"
64 stat
-c '%A %U %G %n' "$1"
65 stat
-c '%A %U %G %n' "$2"
67 info_n
"[K]eep [U]pgrade [D]iff [S]kip? "
72 k
|K
) chown
--reference="$1" "$2"
73 chmod --reference="$1" "$2"
76 u
|U
) chown
--reference="$2" "$1"
77 chmod --reference="$2" "$1"
90 rejmerge_merge
"$1" "$2" "$TMPFILE"
96 if [ "$REJMERGE_MERGE_INFO" ]; then
97 info
"$REJMERGE_MERGE_INFO"
98 unset REJMERGE_MERGE_INFO
102 info_n
"[I]nstall [E]dit [V]iew [S]kip? "
107 i
|I
) chmod --reference="$1" "$TMPFILE"
108 mv -f "$TMPFILE" "$1"
112 e
|E
) $EDITOR "$TMPFILE"
127 rejmerge_diff
"$1" "$2" "$TMPFILE"
131 cat "$TMPFILE" | more
133 info_n
"[K]eep [U]pgrade [M]erge [D]iff [S]kip? "
144 m
|M
) merge_menu
"$1" "$2"
163 info_n
"[K]eep [U]pgrade [D]iff [S]kip? "
184 echo "usage: $REJMERGE_COMMAND [options]"
186 echo " -r, --root <path> specify alternative root"
187 echo " -v, --version print version and exit "
188 echo " -h, --help print help and exit"
196 echo "$REJMERGE_COMMAND: option $1 requires an argument"
200 REJMERGE_CONF
="$2$REJMERGE_CONF"
201 REJECTED_DIR
="$2$REJECTED_DIR"
204 echo "$REJMERGE_COMMAND (pkgutils) $REJMERGE_VERSION"
210 echo "$REJMERGE_COMMAND: invalid option $1"
216 if [ ! -d "$REJECTED_DIR" ]; then
217 echo "$REJMERGE_COMMAND: $REJECTED_DIR not found"
223 local STAT_FILE1
=$
(stat
-c '%F' "$1")
224 local STAT_FILE2
=$
(stat
-c '%F' "$2")
226 if [ "$STAT_FILE1" != "regular file" ]; then
230 if [ "$STAT_FILE2" != "regular file" ]; then
240 if [ "$UID" != "0" ]; then
241 echo "$REJMERGE_COMMAND: only root can merge rejected files"
246 if [ -f "$REJMERGE_CONF" ]; then
250 REJECTED_FILES_FOUND
="no"
253 for REJECTED_FILE
in $
(find $REJECTED_DIR ! -type d
); do
254 INSTALLED_FILE
="$REJMERGE_ROOT${REJECTED_FILE##$REJECTED_DIR}"
256 # Remove rejected file if there is no installed version
257 if [ ! -e "$INSTALLED_FILE" ]; then
258 rm -f "$REJECTED_FILE"
263 local STAT_FILE1
=$
(stat
-c '%A %U %G' "$INSTALLED_FILE")
264 local STAT_FILE2
=$
(stat
-c '%A %U %G' "$REJECTED_FILE")
266 if [ "$STAT_FILE1" != "$STAT_FILE2" ]; then
267 REJECTED_FILES_FOUND
="yes"
268 permissions_menu
"$INSTALLED_FILE" "$REJECTED_FILE"
272 if files_regular
"$INSTALLED_FILE" "$REJECTED_FILE"; then
273 # Both files are regular
274 if cmp -s "$INSTALLED_FILE" "$REJECTED_FILE"; then
275 rm -f "$REJECTED_FILE"
277 REJECTED_FILES_FOUND
="yes"
278 diff_menu
"$INSTALLED_FILE" "$REJECTED_FILE"
281 # At least one file is non-regular
282 REJECTED_FILES_FOUND
="yes"
283 file_menu
"$INSTALLED_FILE" "$REJECTED_FILE"
287 # Remove empty directories
288 for DIR
in $
(find $REJECTED_DIR -depth -type d
); do
289 if [ "$DIR" != "$REJECTED_DIR" ]; then
290 rmdir "$DIR" &> /dev
/null
294 if [ "$REJECTED_FILES_FOUND" = "no" ]; then
295 echo "Nothing to merge"
301 trap "interrupted" SIGHUP SIGINT SIGQUIT SIGTERM
306 readonly REJMERGE_VERSION
="#VERSION#"
307 readonly REJMERGE_COMMAND
="${0##*/}"
309 REJMERGE_CONF
="/etc/rejmerge.conf"
310 REJECTED_DIR
="/var/lib/pkg/rejected"
312 TMPFILE
=$
(mktemp
) || exit 1