#!/bin/sh # Check the format of GNU Emacs change log entries. # Copyright 2014 Free Software Foundation, Inc. # This file is part of GNU Emacs. # GNU Emacs is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # GNU Emacs is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with GNU Emacs. If not, see . # Written by Paul Eggert. # Use a UTF-8 locale if available, so that the UTF-8 check works. # Use U+00A2 CENT SIGN to test whether the locale works. cent_sign_utf8_octal='\302\242' at_sign=` printf "${cent_sign_utf8_octal}@" | awk '{print substr($0, 2)}' 2>/dev/null ` if test "$at_sign" != @; then at_sign=` printf "${cent_sign_utf8_octal}@" | LC_ALL=en_US.utf8 awk '{print substr($0, 2)}' 2>/dev/null ` if test "$at_sign" = @; then LC_ALL=en_US.utf8; export LC_ALL fi fi # Check the log entry. exec awk ' /^#/ { next } !/^.*$/ { print "Invalid character (not UTF-8)" status = 1 } nlines == 0 && !/[^[:space:]]/ { next } { nlines++ } nlines == 1 && /^[[:space:]]/ { print "White space at start of first line" status = 1 } nlines == 2 && /[^[:space:]]/ { print "Nonempty second line" status = 1 } /[[:cntrl:]]/ { print "Text contains control character; please use spaces instead of tabs" status = 1 } 72 < length && /[[:space:]]/ { print "Line longer than 72 characters" status = 1 } 140 < length { print "Word longer than 140 characters" status = 1 } /^Signed-off-by: / { print "'Signed-off-by:' present" status = 1 } END { if (nlines == 0) { print "Empty change log entry" status = 1 } exit status } ' <"$1"