mirror of
https://github.com/git/git.git
synced 2024-11-25 02:44:48 +08:00
Add --signoff and --verify option to git commit.
As brought up in the discussion which followed a patch to add a signed-off-by line with the --sign flag to format-patch from Johannes Schindelin, add --signoff to the git commit command. Also add --verify to make sure the lines you introduced are clean, which is more useful in commit but not very much in format-patch as it was originally implemented, because finding botches at format-patch time is too late. Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
af36b70ef9
commit
0cfe1d303a
@ -9,7 +9,7 @@ usage () {
|
||||
die 'git commit [-a] [-m <message>] [-F <logfile>] [(-C|-c) <commit>] [<path>...]'
|
||||
}
|
||||
|
||||
all= logfile= use_commit= no_edit= log_given= log_message=
|
||||
all= logfile= use_commit= no_edit= log_given= log_message= verify= signoff=
|
||||
while case "$#" in 0) break;; esac
|
||||
do
|
||||
case "$1" in
|
||||
@ -64,6 +64,12 @@ do
|
||||
use_commit="$1"
|
||||
no_edit=t
|
||||
shift ;;
|
||||
-s|--s|--si|--sig|--sign|--signo|--signof|--signoff)
|
||||
signoff=t
|
||||
shift ;;
|
||||
-v|--v|--ve|--ver|--veri|--verif|--verify)
|
||||
verify=t
|
||||
shift ;;
|
||||
--)
|
||||
shift
|
||||
break ;;
|
||||
@ -86,6 +92,60 @@ t)
|
||||
esac
|
||||
git-update-cache -q --refresh -- "$@" || exit 1
|
||||
|
||||
case "$verify" in
|
||||
t)
|
||||
# This is slightly modified from Andrew Morton's Perfect Patch.
|
||||
# Lines you introduce should not have trailing whitespace.
|
||||
# Also check for an indentation that has SP before a TAB.
|
||||
perl -e '
|
||||
my $fh;
|
||||
my $found_bad = 0;
|
||||
my $filename;
|
||||
my $reported_filename = "";
|
||||
my $lineno;
|
||||
sub bad_line {
|
||||
my ($why, $line) = @_;
|
||||
if (!$found_bad) {
|
||||
print "*\n";
|
||||
print "* You have some suspicious patch lines:\n";
|
||||
print "*\n";
|
||||
$found_bad = 1;
|
||||
}
|
||||
if ($reported_filename ne $filename) {
|
||||
print "* In $filename\n";
|
||||
$reported_filename = $filename;
|
||||
}
|
||||
print "* $why (line $lineno)\n$line\n";
|
||||
}
|
||||
open $fh, "-|", qw(git-diff-cache -p -M --cached HEAD);
|
||||
while (<$fh>) {
|
||||
if (m|^diff --git a/(.*) b/\1$|) {
|
||||
$filename = $1;
|
||||
next;
|
||||
}
|
||||
if (/^@@ -\S+ \+(\d+)/) {
|
||||
$lineno = $1 - 1;
|
||||
next;
|
||||
}
|
||||
if (/^ /) {
|
||||
$lineno++;
|
||||
next;
|
||||
}
|
||||
if (s/^\+//) {
|
||||
$lineno++;
|
||||
chomp;
|
||||
if (/\s$/) {
|
||||
bad_line("trailing whitespace", $_);
|
||||
}
|
||||
if (/^\s* /) {
|
||||
bad_line("indent SP followed by a TAB", $_);
|
||||
}
|
||||
}
|
||||
}
|
||||
exit($found_bad);
|
||||
' || exit ;;
|
||||
esac
|
||||
|
||||
PARENTS="-p HEAD"
|
||||
if [ ! -r "$GIT_DIR/HEAD" ]; then
|
||||
if [ -z "$(git-ls-files)" ]; then
|
||||
@ -161,7 +221,14 @@ else
|
||||
export GIT_AUTHOR_DATE
|
||||
git-cat-file commit "$use_commit" |
|
||||
sed -e '1,/^$/d'
|
||||
fi >.editmsg
|
||||
fi |
|
||||
git-stripspace >.editmsg
|
||||
case "$signoff" in
|
||||
t)
|
||||
git-var GIT_COMMITTER_IDENT | sed -e '
|
||||
s/>.*/>/
|
||||
s/^/Signed-off-by: /' >>.editmsg ;;
|
||||
esac
|
||||
git-status-script >>.editmsg
|
||||
fi
|
||||
if [ "$?" != "0" -a ! -f $GIT_DIR/MERGE_HEAD ]
|
||||
@ -176,7 +243,8 @@ case "$no_edit" in
|
||||
;;
|
||||
esac
|
||||
grep -v '^#' < .editmsg | git-stripspace > .cmitmsg
|
||||
if test -s .cmitmsg
|
||||
grep -v -i '^Signed-off-by' .cmitmsg >.cmitchk
|
||||
if test -s .cmitchk
|
||||
then
|
||||
tree=$(git-write-tree) &&
|
||||
commit=$(cat .cmitmsg | git-commit-tree $tree $PARENTS) &&
|
||||
@ -187,5 +255,5 @@ else
|
||||
false
|
||||
fi
|
||||
ret="$?"
|
||||
rm -f .cmitmsg .editmsg
|
||||
rm -f .cmitmsg .editmsg .cmitchk
|
||||
exit "$ret"
|
||||
|
Loading…
Reference in New Issue
Block a user