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>...]'
|
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
|
while case "$#" in 0) break;; esac
|
||||||
do
|
do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
@ -64,6 +64,12 @@ do
|
|||||||
use_commit="$1"
|
use_commit="$1"
|
||||||
no_edit=t
|
no_edit=t
|
||||||
shift ;;
|
shift ;;
|
||||||
|
-s|--s|--si|--sig|--sign|--signo|--signof|--signoff)
|
||||||
|
signoff=t
|
||||||
|
shift ;;
|
||||||
|
-v|--v|--ve|--ver|--veri|--verif|--verify)
|
||||||
|
verify=t
|
||||||
|
shift ;;
|
||||||
--)
|
--)
|
||||||
shift
|
shift
|
||||||
break ;;
|
break ;;
|
||||||
@ -86,6 +92,60 @@ t)
|
|||||||
esac
|
esac
|
||||||
git-update-cache -q --refresh -- "$@" || exit 1
|
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"
|
PARENTS="-p HEAD"
|
||||||
if [ ! -r "$GIT_DIR/HEAD" ]; then
|
if [ ! -r "$GIT_DIR/HEAD" ]; then
|
||||||
if [ -z "$(git-ls-files)" ]; then
|
if [ -z "$(git-ls-files)" ]; then
|
||||||
@ -161,7 +221,14 @@ else
|
|||||||
export GIT_AUTHOR_DATE
|
export GIT_AUTHOR_DATE
|
||||||
git-cat-file commit "$use_commit" |
|
git-cat-file commit "$use_commit" |
|
||||||
sed -e '1,/^$/d'
|
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
|
git-status-script >>.editmsg
|
||||||
fi
|
fi
|
||||||
if [ "$?" != "0" -a ! -f $GIT_DIR/MERGE_HEAD ]
|
if [ "$?" != "0" -a ! -f $GIT_DIR/MERGE_HEAD ]
|
||||||
@ -176,7 +243,8 @@ case "$no_edit" in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
grep -v '^#' < .editmsg | git-stripspace > .cmitmsg
|
grep -v '^#' < .editmsg | git-stripspace > .cmitmsg
|
||||||
if test -s .cmitmsg
|
grep -v -i '^Signed-off-by' .cmitmsg >.cmitchk
|
||||||
|
if test -s .cmitchk
|
||||||
then
|
then
|
||||||
tree=$(git-write-tree) &&
|
tree=$(git-write-tree) &&
|
||||||
commit=$(cat .cmitmsg | git-commit-tree $tree $PARENTS) &&
|
commit=$(cat .cmitmsg | git-commit-tree $tree $PARENTS) &&
|
||||||
@ -187,5 +255,5 @@ else
|
|||||||
false
|
false
|
||||||
fi
|
fi
|
||||||
ret="$?"
|
ret="$?"
|
||||||
rm -f .cmitmsg .editmsg
|
rm -f .cmitmsg .editmsg .cmitchk
|
||||||
exit "$ret"
|
exit "$ret"
|
||||||
|
Loading…
Reference in New Issue
Block a user