1#!/bin/ksh 2# 3# $OpenBSD: diff.sh,v 1.6 2019/05/12 14:57:30 robert Exp $ 4# 5# Copyright (c) 2017, 2019 Robert Nagy <robert@openbsd.org> 6# 7# Permission to use, copy, modify, and distribute this software for any 8# purpose with or without fee is hereby granted, provided that the above 9# copyright notice and this permission notice appear in all copies. 10# 11# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18 19umask 0022 20 21trap exit HUP INT TERM 22 23[[ "$1" != /* ]] || [[ "$2" != /* ]] && 24 echo "paths have to be absolute" && 25 exit 1 26 27plist=$(mktemp) 28trap 'rm -f ${plist}' EXIT 29 30padd() { 31 local _path=$1 32 readlink -f ${_path} >> ${plist} 33} 34 35diff -Parq $1 $2 2>&1 | grep ' differ$' | 36while IFS= read -r _d 37do 38 _o=$(echo $_d | cut -d ' ' -f2) 39 _n=$(echo $_d | cut -d ' ' -f4) 40 case "${_o##*.}" 41 in 42 a) 43 cmp -s ${_o} ${_n} 34 34 || padd ${_n} 44 ;; 45 1|3p) 46 # Needed for perl(1) because Pod::Man adds the build 47 # date in the man page; e.g. /usr/share/man1/pod2html.1: 48 # .TH POD2HTML 1 "2017-07-29" "perl v5.24.1" 49 _onm=$(mktemp) 50 _nnm=$(mktemp) 51 trap 'rm -f ${_onm} ${_nnm}' EXIT 52 sed -E '/([0-9]+-[0-9]+-[0-9]+|=+)/d' ${_o} > ${_onm} 53 sed -E '/([0-9]+-[0-9]+-[0-9]+|=+)/d' ${_n} > ${_nnm} 54 diff -q ${_onm} ${_nnm} >/dev/null || padd ${_n} 55 rm -f ${_onm} ${_nnm} 56 ;; 57 EFI|dat|db|tgz|*void|*dir|mk|cache-4) 58 ;; 59 *) 60 padd ${_n} 61 ;; 62 esac 63done 64 65sort -u ${plist} 66