From: Stephen Rothwell Date: Wed, 11 Jan 2023 01:05:11 +0000 (+1100) Subject: detect duplicate patches X-Git-Url: https://git.ozlabs.org/?a=commitdiff_plain;h=d8e1a8032067a384b430dc5bcfb92544e395d7b7;p=next-scripts detect duplicate patches --- diff --git a/common.sh b/common.sh index 2d46df5..1f66c13 100644 --- a/common.sh +++ b/common.sh @@ -134,4 +134,37 @@ check_unmerged_files() fi } +check_dups() +{ + # "In POSIX sh, 'local' is undefined." + # shellcheck disable=SC3043 + local name base sha dfile + + name="$1" + base="$2" + sha="$3" + if [ "$base" = "HEAD" ]; then + dfile="$top_dir/duplicates/next/$name" + else + dfile="$top_dir/duplicates/linus/$name" + fi + + # if there is anything in this tree, then check for duplicates + if [ "$(git rev-list --count --no-merges "$base".."$sha")" -eq 0 ]; then + rm -f "$dfile" + return; + fi + + dups=$(git cherry "$base" "$sha" | sed -n 's/^- //p' | + xargs -r -n 1 "$tools_dir"/clog | sort) + if [ -z "$dups" ]; then + rm -f "$dfile" + elif ! [ -f "$dfile" ]; then + printf '%s\n' "$dups" | tee "$dfile" + elif ! printf '%s\n' "$dups" | cmp -s - "$dfile"; then + printf '%s\n' "$dups" | comm -23 - "$dfile" + printf '%s\n' "$dups" >"$dfile" + fi +} + true diff --git a/do_merge b/do_merge index 84df695..68ba9d7 100755 --- a/do_merge +++ b/do_merge @@ -18,7 +18,8 @@ while getopts 'ns:' opt; do done shift $((OPTIND - 1)) -. "$(dirname "$0")/common.sh" +tools_dir=$(dirname "$0") +. "$tools_dir/common.sh" log() { @@ -89,6 +90,7 @@ for h in $heads; do done 7<"../pre-merge/$tree" fi log Merging "$h" "($hlog)" + check_dups "$tree" HEAD "$h" msg=$(printf "Merge branch '%s' of %s" "${h#*/}" "$(get_url "$tree")") if ! execute git merge -m "$msg" "$h"; then echo Merge failed 1>&2 diff --git a/fetch_trees b/fetch_trees index 12d50d0..d1e3fa3 100755 --- a/fetch_trees +++ b/fetch_trees @@ -55,6 +55,7 @@ for name in $trees; do old_sha=$(git rev-parse "$name/$branch") "$fun" "$name" new_sha=$(git rev-parse "$name/$branch") + check_dups "$name" origin/master "$new_sha" if ! [ "$new_sha" = "$old_sha" ]; then "$tools_dir"/check_commits ^origin/master "$old_sha..$new_sha" fi diff --git a/from_build_host b/from_build_host index 6a2829a..e26bb83 100755 --- a/from_build_host +++ b/from_build_host @@ -5,6 +5,7 @@ rsync -avHPSUXx --open-noatime --delete \ --exclude "gitk.cache" \ --exclude '.gitk-tmp**' \ + --include '/duplicates/***' \ --include '/patches/***' \ --include '/mmotm/***' \ --include '/next/***' \