#!/bin/sh # Merge later... MASTER=master : "${target:=maint}" "${here:=$MASTER}" # Read from RelNotes and find mergeable topics search_topics () { tmp=/tmp/ML.$$ trap 'rm -f "$tmp"' 0 git rev-list --parents --first-parent $target..$here >"$tmp" x40='[0-9a-f]' x40="$x40$x40$x40$x40$x40" x40="$x40$x40$x40$x40$x40$x40$x40$x40" sed -n -e 's/^ (merge \([0-9a-f]*\) \([^ ]*\) later to maint.*/\1 \2/p' | while read sha1 topic do if ! full_sha1=$(git rev-parse --verify "$sha1") then echo >&2 "Not found: $sha1 $topic" continue fi comment= if ! git show-ref --quiet --verify "refs/heads/$topic" then comment="$topic gone" tip=$full_sha1 topic=$sha1 elif tip=$(git rev-parse --verify "refs/heads/$topic") && test "$tip" != "$full_sha1" then echo >&2 "$topic # $tip moved from $sha1" continue fi ago= lg=0 fp=$( sed -ne "s/^\($x40\) $x40 $tip"'$/\1/p' "$tmp" ) && test -n "$fp" && ago=$( git show -s --format='%ar' $fp ) && lg=$(git log --oneline $target..$tip | wc -l) if test $lg != 0 then echo "$topic # $lg${ago+ ($ago)}${comment+ $comment}" else echo "# $topic already merged${ago+ ($ago)}${comment+ $comment}" fi done } while case "$#,$1" in 0,*) break ;; *,-t) target=${2?"-t target???"} git show-ref --quiet --verify "refs/heads/$target" || { echo >&2 "$target: no such branch" exit 1 } shift ;; *) break ;; esac do shift done case $# in 0) search_topics exit $? ;; esac for topic do sha1=$(git rev-parse --short $topic) echo " (merge $sha1 $topic later to maint)." done