| 1 | #!/bin/sh |
| 2 | # Merge later... |
| 3 | |
| 4 | : ${MASTER:=master} |
| 5 | |
| 6 | : "${target:=maint}" "${here:=$MASTER}" |
| 7 | |
| 8 | # Read from RelNotes and find mergeable topics |
| 9 | search_topics () { |
| 10 | tmp=/tmp/ML.$$ |
| 11 | trap 'rm -f "$tmp"' 0 |
| 12 | git rev-list --parents --first-parent $target..$here >"$tmp" |
| 13 | |
| 14 | x40='[0-9a-f]' |
| 15 | x40="$x40$x40$x40$x40$x40" |
| 16 | x40="$x40$x40$x40$x40$x40$x40$x40$x40" |
| 17 | sed -n -e 's/^ (merge \([0-9a-f]*\) \([^ ]*\) later to maint.*/\1 \2/p' | |
| 18 | while read sha1 topic |
| 19 | do |
| 20 | if ! full_sha1=$(git rev-parse --verify "$sha1") |
| 21 | then |
| 22 | echo >&2 "Not found: $sha1 $topic" |
| 23 | continue |
| 24 | fi |
| 25 | |
| 26 | comment= |
| 27 | if ! git show-ref --quiet --verify "refs/heads/$topic" |
| 28 | then |
| 29 | comment="$topic gone" |
| 30 | tip=$full_sha1 topic=$sha1 |
| 31 | elif tip=$(git rev-parse --verify "refs/heads/$topic") && |
| 32 | test "$tip" != "$full_sha1" |
| 33 | then |
| 34 | echo >&2 "$topic # $tip moved from $sha1" |
| 35 | continue |
| 36 | fi |
| 37 | |
| 38 | ago= lg=-1 |
| 39 | fp=$( |
| 40 | sed -ne "s/^\($x40\) $x40 $tip"'$/\1/p' "$tmp" |
| 41 | ) && |
| 42 | test -n "$fp" && |
| 43 | ago=$( |
| 44 | git show -s --format='%ad' --date=short $fp |
| 45 | ) && |
| 46 | lg=$(git log --oneline $target..$tip | wc -l) |
| 47 | |
| 48 | if test $lg = -1 |
| 49 | then |
| 50 | echo "# $topic not yet merged to $here" |
| 51 | elif test $lg != 0 |
| 52 | then |
| 53 | echo "$topic # $lg${ago+ ($ago)}${comment+ $comment}" |
| 54 | else |
| 55 | echo "# $topic already merged${ago+ ($ago)}${comment+ $comment}" |
| 56 | fi |
| 57 | done |
| 58 | } |
| 59 | |
| 60 | while case "$#,$1" in |
| 61 | 0,*) |
| 62 | break ;; |
| 63 | *,-t) |
| 64 | target=${2?"-t target???"} |
| 65 | git show-ref --quiet --verify "refs/heads/$target" || { |
| 66 | echo >&2 "$target: no such branch" |
| 67 | exit 1 |
| 68 | } |
| 69 | shift ;; |
| 70 | *) |
| 71 | break ;; |
| 72 | esac |
| 73 | do |
| 74 | shift |
| 75 | done |
| 76 | |
| 77 | case $# in |
| 78 | 0) |
| 79 | search_topics |
| 80 | exit $? |
| 81 | ;; |
| 82 | esac |
| 83 | |
| 84 | for topic |
| 85 | do |
| 86 | sha1=$(git rev-parse --short $topic) |
| 87 | echo " (merge $sha1 $topic later to maint)." |
| 88 | done |
| 89 |