54 lines
1.2 KiB
Bash
Executable File
54 lines
1.2 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
GIT_DIR=.git
|
|
dotest="$GIT_DIR/rebase-apply"
|
|
|
|
prec=4 &&
|
|
this=$(cat 2>/dev/null "$dotest/next") &&
|
|
msgnum=$(printf "%0${prec}d" $this) &&
|
|
test -f "$dotest/$msgnum" &&
|
|
message_id=$(sed -ne '
|
|
/^[ ]/{
|
|
# Append continuation line to hold space
|
|
H
|
|
# Swap hold and pattern
|
|
x
|
|
# Remove the LF, making it a single line
|
|
s/\n//
|
|
# Swap hold and pattern back
|
|
x
|
|
# Discard the pattern and go on
|
|
n
|
|
}
|
|
# Hold this new line, and look at what is in the hold space
|
|
x
|
|
# Is it the Message-ID line? If so, spit it out and finish.
|
|
/^[Mm][Ee][Ss][Ss][Aa][Gg][Ee]-[Ii][Dd]:[ ]*/{
|
|
s///p
|
|
q
|
|
}
|
|
# Otherwise, check if this new line is empty
|
|
x
|
|
# Is it? Then we are done with the header
|
|
/^$/b end
|
|
# Otherwise we need to hold onto this header line
|
|
x
|
|
# And start the next cycle
|
|
b
|
|
: end
|
|
# ??? do we want to check if we held onto the last message-id line
|
|
# and process it here if we did???
|
|
q
|
|
' "$dotest/$msgnum") &&
|
|
|
|
if test -n "$message_id" &&
|
|
head=$(git rev-parse --verify HEAD 2>/dev/null)
|
|
then
|
|
echo "$head $message_id" >>"$GIT_DIR"/am.log &&
|
|
(
|
|
GIT_NOTES_REF=refs/notes/amlog
|
|
export GIT_NOTES_REF
|
|
git notes add -f -m "Message-Id: $message_id" "$head"
|
|
)
|
|
fi
|