What's cooking (2024/09 #08)
[alt-git.git] / ML
blobc560d738b4f06f7e2cb56b5d77f073bee11f04dc
1 #!/bin/sh
2 # Merge later...
4 : ${MASTER:=master}
6 : "${target:=maint}" "${here:=$MASTER}"
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"
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
20 if ! full_sha1=$(git rev-parse --verify "$sha1")
21 then
22 echo >&2 "Not found: $sha1 $topic"
23 continue
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
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)
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}"
57 done
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
69 shift ;;
71 break ;;
72 esac
74 shift
75 done
77 case $# in
79 search_topics
80 exit $?
82 esac
84 for topic
86 sha1=$(git rev-parse --short $topic)
87 echo " (merge $sha1 $topic later to maint)."
88 done