X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=build%2Fcommit-msg;h=37bc6b0a963121bf1e4d5e6d4f7c0dcf62681175;hb=3a61be26565a5f3e9c6a65a270a1b51c3513aeb7;hp=1fab5095a4d8a372fe46a69c1d6be58c84a63317;hpb=3f5e72e4cff0d5238fa3ef7a7acf27c86ea973e8;p=fs%2Flustre-release.git diff --git a/build/commit-msg b/build/commit-msg deleted file mode 100755 index 1fab509..0000000 --- a/build/commit-msg +++ /dev/null @@ -1,216 +0,0 @@ -#!/bin/bash -# -# A hook script to check the commit log message to ensure that it has -# a well-formed commit summary and body, a valid Signed-off-by: line, -# and a Gerrit Change-Id: line (added automatically if missing). -# -# Called by git-commit with one argument, the name of the file -# that has the commit message. The hook should exit with non-zero -# status after issuing an appropriate message if it wants to stop the -# commit. The hook is allowed to edit the commit message file. -# -# Should be installed as .git/hooks/commit-msg. -# - -ORIGINAL="$1" -REVISED="$(mktemp "$ORIGINAL.XXXXXX")" -SAVE="$(basename $ORIGINAL).$(date +%Y%m%d.%H%M%S)" -SIGNOFF="Signed-off-by" -CHANGEID="Change-Id" -WIDTH_SUM=64 -WIDTH_REG=70 - -# Check for, and add if missing, a unique Change-Id -new_changeid() { - NEWID=$({ - git var GIT_AUTHOR_IDENT - git var GIT_COMMITTER_IDENT - git write-tree - git rev-parse HEAD 2>/dev/null - grep -v "^$SIGNOFF" "$ORIGINAL" | git stripspace -s - } | git hash-object --stdin) - if [ -z "$NEWID" ]; then - error "$0: git hash-object failed for $CHANGEID:" - exit 1 - fi - - echo "$CHANGEID: I$NEWID" - HAS_CHANGEID=true -} - -error() { - [ "$LINE" ] && echo "line $NUM: $LINE" 1>&2 - [ "$1" ] && echo "error: commit message $1" 1>&2 - [ "$2" ] && echo "$2" 1>&2 - - HAS_ERROR=true -} - -usage() { - cat 1>&2 <<- EOF - - See http://wiki.whamcloud.com/display/PUB/Commit+Comments - for full details. An example valid commit comment is: - - LU-nnn component: short description of change under 64 columns - - The "component:" should be a lower-case single-word subsystem of the - Lustre code that best encompasses the change being made. Examples of - components include modules like: llite, lov, lmv, osc, mdc, ldlm, lnet, - ptlrpc, mds, oss, osd, ldiskfs, libcfs, socklnd, o2iblnd; functional - subsystems like: recovery, quota, grant; and auxilliary areas like: - build, tests, docs. This list is not exhaustive, but is a guideline. - - The commit comment should contain a detailed explanation of the change - being made. This can be as long as you'd like. Please give details - of what problem was solved (including error messages or problems that - were seen), a good high-level description of how it was solved, and - which parts of the code were changed (including important functions - that were changed, if this is useful to understand the patch, and - for easier searching). Wrap lines at/under $WIDTH_REG columns. - - $SIGNOFF: Your Real Name - $CHANGEID: Ixxxx(added automatically if missing)xxxx - - EOF - - mv "$ORIGINAL" "$SAVE" && - echo "$0: saved original commit comment to $SAVE" 1>&2 -} - -export HAS_ERROR=false -export HAS_SUMMARY=false -export HAS_LAST_BLANK=false -export HAS_BODY=false -export HAS_SIGNOFF=false -case $(grep -c "^$CHANGEID:" "$ORIGINAL") in -0) export HAS_CHANGEID=false ;; -1) export HAS_CHANGEID=true ;; -*) error "with multiple $CHANGEID: lines not allowed." - export HAS_CHANGEID=true - HAS_ERROR=true ;; -esac -export HAS_COMMENTS=false -export HAS_DIFF=false - -export LINE="" -export NUM=1 - -IFS="" # don't eat whitespace, to preserve message formatting -while read LINE; do - WIDTH=$(($(echo $LINE | wc -c) - 1)) # -1 for end-of-line character - - case "$LINE" in - $SIGNOFF*) - # Signed-off-by: First Last - HAS_SOB=$(echo "$LINE" | grep "^$SIGNOFF: .* .* <.*@[^.]*\..*>") - if [ -z "$HAS_SOB" ]; then - error "missing valid commit summary line to show" \ - "agreement with code submission requirements." - elif ! $HAS_SUMMARY; then - error "missing summary before $SIGNOFF:." - elif ! $HAS_LAST_BLANK; then - error "missing blank line before $SIGNOFF:." - elif ! $HAS_BODY; then - error "missing useful comments before $SIGNOFF:." - else - HAS_SIGNOFF=true # allow multiple signoff lines - fi - echo $LINE - ! $HAS_CHANGEID && new_changeid - ;; - $CHANGEID*) - # Change-Id: I762ab50568f25527176ae54e92c446cf06112097 - HAS_ID=$(echo "$LINE" | grep "^$CHANGEID: I[0-9a-fA-F]\{40\}") - if [ -z "$HAS_ID" ]; then - error "has invalid $CHANGEID: line for Gerrit tracking" - elif ! $HAS_SUMMARY; then - error "missing summary before $CHANGEID:." - elif ! $HAS_BODY; then - error "missing useful comments before $CHANGEID:." - - # $CHANGEID used to come before $SIGNOFF in old commits. - # Allow this to continue for some time, until they are gone. - # elif ! $HAS_SIGNOFF; then - # error "missing $SIGNOFF: before $CHANGEID:." - - # $HAS_CHANGEID was already checked and set above - #elif $HAS_CHANGEID; then - # error "does not allow multiple $CHANGEID: lines." - #else - # HAS_CHANGEID=true - fi - echo $LINE - ;; - "") - [ $HAS_SUMMARY -a ! $HAS_BODY ] && HAS_LAST_BLANK=true - [ $HAS_BODY ] && HAS_LAST_BLANK=true - echo $LINE - ;; - diff*|index*) - # Beginning of uncommented diffstat from "commit -v". If - # there are diff and index lines, skip the rest of the input. - # diff --git a/build/commit-msg b/build/commit-msg - # index 80a3442..acb4c50 100755 - DIFF=$(echo "$LINE" | grep -- "^diff --git a/") - [ "$DIFF" ] && HAS_DIFF=true && continue - INDEX=$(echo "$LINE" | grep -- "^index [0-9a-fA-F]\{6,\}\.\.") - [ $HAS_DIFF -a "$INDEX" ] && break || HAS_DIFF=false - ;; - \#*) - HAS_COMMENTS=true - continue - ;; - *) if [ $NUM -eq 1 ]; then - FMT="^[A-Z]\{2,5\}-[0-9]\{1,5\} [-a-z0-9]\{2,9\}: " - HAS_JIRA_COMPONENT=$(echo "$LINE" | grep "$FMT") - if [ -z "$HAS_JIRA_COMPONENT" ]; then - FMT="^[A-Z]\{2,5\}-[0-9]\{1,5\} " - HAS_JIRA=$(echo "$LINE" | grep "$FMT") - if [ "$HAS_JIRA" ]; then - error "has no component in summary." - else - error "missing JIRA ticket number." - fi - elif [ $WIDTH -gt $WIDTH_SUM ]; then - error "summary longer than $WIDTH_SUM columns." - else - HAS_SUMMARY=true - fi - elif $HAS_SIGNOFF; then - error "trailing garbage after $SIGNOFF: line." - elif [ $WIDTH -gt $WIDTH_REG ]; then - error "has line longer than $WIDTH_REG columns." - elif ! $HAS_BODY && ! $HAS_LAST_BLANK; then - error "has no blank line after summary." - else - HAS_BODY=true - fi - HAS_LAST_BLANK=false - HAS_DIFF=false - echo $LINE - ;; - esac - - NUM=$((NUM + 1)) -done < "$ORIGINAL" > "$REVISED" - -[ $NUM -eq 1 ] && exit 1 # empty file - -LINE="" -if ! $HAS_SUMMARY; then - error "missing commit summary line." -elif ! $HAS_BODY; then - error "missing commit description." -elif ! $HAS_SIGNOFF; then - error "missing valid $SIGNOFF: line." -elif ! $HAS_CHANGEID; then - error "missing valid $CHANGEID: line." -fi -if $HAS_ERROR; then - usage - rm "$REVISED" - exit 1 -fi - -mv "$REVISED" "$ORIGINAL" diff --git a/build/commit-msg b/build/commit-msg new file mode 120000 index 0000000..37bc6b0 --- /dev/null +++ b/build/commit-msg @@ -0,0 +1 @@ +../contrib/git-hooks/commit-msg \ No newline at end of file