make commit message a little more consistent and conforting

It is nicer to let the user know when a commit succeeded all the time,
not only the first time.  Also the commit sha1 is much more useful than
the tree sha1 in this case.

This patch also introduces a -q switch to supress this message as well
as the summary of created/deleted files.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Nicolas Pitre 2006-12-14 23:15:44 -05:00 committed by Junio C Hamano
parent 1510fea781
commit ebd124c678
9 changed files with 84 additions and 29 deletions

View File

@ -336,17 +336,9 @@ $ commit=$(echo 'Initial commit' | git-commit-tree $tree)
$ git-update-ref HEAD $commit $ git-update-ref HEAD $commit
------------------------------------------------ ------------------------------------------------
which will say: In this case this creates a totally new commit that is not related to
anything else. Normally you do this only *once* for a project ever, and
---------------- all later commits will be parented on top of an earlier commit.
Committing initial tree 8988da15d077d4829fc51d8544c097def6644dbb
----------------
just to warn you about the fact that it created a totally new commit
that is not related to anything else. Normally you do this only *once*
for a project ever, and all later commits will be parented on top of an
earlier commit, and you'll never see this "Committing initial tree"
message ever again.
Again, normally you'd never actually do this by hand. There is a Again, normally you'd never actually do this by hand. There is a
helpful script called `git commit` that will do all of this for you. So helpful script called `git commit` that will do all of this for you. So

View File

@ -21,6 +21,11 @@
deleted lines in decimal notation and pathname without deleted lines in decimal notation and pathname without
abbreviation, to make it more machine friendly. abbreviation, to make it more machine friendly.
--shortstat::
Output only the last line of the --stat format containing total
number of modified files, as well as number of added and deleted
lines.
--summary:: --summary::
Output a condensed summary of extended header information Output a condensed summary of extended header information
such as creations, renames and mode changes. such as creations, renames and mode changes.

View File

@ -113,6 +113,9 @@ but can be used to amend a merge commit.
as well. This is usually not what you want unless you as well. This is usually not what you want unless you
are concluding a conflicted merge. are concluding a conflicted merge.
-q|--quiet::
Supress commit summary message.
\--:: \--::
Do not interpret any more arguments as options. Do not interpret any more arguments as options.

View File

@ -22,14 +22,14 @@ defaulting to local storage area
$ echo 'hello world' > file.txt $ echo 'hello world' > file.txt
$ git add . $ git add .
$ git commit -a -m "initial commit" $ git commit -a -m "initial commit"
Committing initial tree 92b8b694ffb1675e5975148e1121810081dbdffe Created initial commit 54196cc2703dc165cbd373a65a4dcf22d50ae7f7
create mode 100644 file.txt create mode 100644 file.txt
$ echo 'hello world!' >file.txt $ echo 'hello world!' >file.txt
$ git commit -a -m "add emphasis" $ git commit -a -m "add emphasis"
Created commit c4d59f390b9cfd4318117afde11d601c1085f241
------------------------------------------------ ------------------------------------------------
What are the 40 digits of hex that git responded to the first commit What are the 40 digits of hex that git responded to the commit with?
with?
We saw in part one of the tutorial that commits have names like this. We saw in part one of the tutorial that commits have names like this.
It turns out that every object in the git history is stored under It turns out that every object in the git history is stored under
@ -39,13 +39,25 @@ the same data twice (since identical data is given an identical SHA1
name), and that the contents of a git object will never change (since name), and that the contents of a git object will never change (since
that would change the object's name as well). that would change the object's name as well).
It is expected that the content of the commit object you created while
following the example above generates a different SHA1 hash than
the one shown above because the commit object records the time when
it was created and the name of the person performing the commit.
We can ask git about this particular object with the cat-file We can ask git about this particular object with the cat-file
command--just cut-and-paste from the reply to the initial commit, to command. Don't copy the 40 hex digits from this example but use those
save yourself typing all 40 hex digits: from your own version. Note that you can shorten it to only a few
characters to save yourself typing all 40 hex digits:
------------------------------------------------ ------------------------------------------------
$ git cat-file -t 92b8b694ffb1675e5975148e1121810081dbdffe $ git-cat-file -t 54196cc2
tree commit
$ git-cat-file commit 54196cc2
tree 92b8b694ffb1675e5975148e1121810081dbdffe
author J. Bruce Fields <bfields@puzzle.fieldses.org> 1143414668 -0500
committer J. Bruce Fields <bfields@puzzle.fieldses.org> 1143414668 -0500
initial commit
------------------------------------------------ ------------------------------------------------
A tree can refer to one or more "blob" objects, each corresponding to A tree can refer to one or more "blob" objects, each corresponding to
@ -102,8 +114,7 @@ $ find .git/objects/
and the contents of these files is just the compressed data plus a and the contents of these files is just the compressed data plus a
header identifying their length and their type. The type is either a header identifying their length and their type. The type is either a
blob, a tree, a commit, or a tag. We've seen a blob and a tree now, blob, a tree, a commit, or a tag.
so next we should look at a commit.
The simplest commit to find is the HEAD commit, which we can find The simplest commit to find is the HEAD commit, which we can find
from .git/HEAD: from .git/HEAD:

View File

@ -107,8 +107,6 @@ int cmd_commit_tree(int argc, const char **argv, const char *prefix)
if (new_parent(parents)) if (new_parent(parents))
parents++; parents++;
} }
if (!parents)
fprintf(stderr, "Committing initial tree %s\n", argv[1]);
init_buffer(&buffer, &size); init_buffer(&buffer, &size);
add_buffer(&buffer, &size, "tree %s\n", sha1_to_hex(tree_sha1)); add_buffer(&buffer, &size, "tree %s\n", sha1_to_hex(tree_sha1));

38
diff.c
View File

@ -801,6 +801,35 @@ static void show_stats(struct diffstat_t* data, struct diff_options *options)
set, total_files, adds, dels, reset); set, total_files, adds, dels, reset);
} }
static void show_shortstats(struct diffstat_t* data)
{
int i, adds = 0, dels = 0, total_files = data->nr;
if (data->nr == 0)
return;
for (i = 0; i < data->nr; i++) {
if (!data->files[i]->is_binary &&
!data->files[i]->is_unmerged) {
int added = data->files[i]->added;
int deleted= data->files[i]->deleted;
if (!data->files[i]->is_renamed &&
(added + deleted == 0)) {
total_files--;
} else {
adds += added;
dels += deleted;
}
}
free(data->files[i]->name);
free(data->files[i]);
}
free(data->files);
printf(" %d files changed, %d insertions(+), %d deletions(-)\n",
total_files, adds, dels);
}
static void show_numstat(struct diffstat_t* data, struct diff_options *options) static void show_numstat(struct diffstat_t* data, struct diff_options *options)
{ {
int i; int i;
@ -1771,6 +1800,7 @@ int diff_setup_done(struct diff_options *options)
options->output_format &= ~(DIFF_FORMAT_RAW | options->output_format &= ~(DIFF_FORMAT_RAW |
DIFF_FORMAT_NUMSTAT | DIFF_FORMAT_NUMSTAT |
DIFF_FORMAT_DIFFSTAT | DIFF_FORMAT_DIFFSTAT |
DIFF_FORMAT_SHORTSTAT |
DIFF_FORMAT_SUMMARY | DIFF_FORMAT_SUMMARY |
DIFF_FORMAT_PATCH); DIFF_FORMAT_PATCH);
@ -1781,6 +1811,7 @@ int diff_setup_done(struct diff_options *options)
if (options->output_format & (DIFF_FORMAT_PATCH | if (options->output_format & (DIFF_FORMAT_PATCH |
DIFF_FORMAT_NUMSTAT | DIFF_FORMAT_NUMSTAT |
DIFF_FORMAT_DIFFSTAT | DIFF_FORMAT_DIFFSTAT |
DIFF_FORMAT_SHORTSTAT |
DIFF_FORMAT_SUMMARY | DIFF_FORMAT_SUMMARY |
DIFF_FORMAT_CHECKDIFF)) DIFF_FORMAT_CHECKDIFF))
options->recursive = 1; options->recursive = 1;
@ -1872,6 +1903,9 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac)
else if (!strcmp(arg, "--numstat")) { else if (!strcmp(arg, "--numstat")) {
options->output_format |= DIFF_FORMAT_NUMSTAT; options->output_format |= DIFF_FORMAT_NUMSTAT;
} }
else if (!strcmp(arg, "--shortstat")) {
options->output_format |= DIFF_FORMAT_SHORTSTAT;
}
else if (!strncmp(arg, "--stat", 6)) { else if (!strncmp(arg, "--stat", 6)) {
char *end; char *end;
int width = options->stat_width; int width = options->stat_width;
@ -2646,7 +2680,7 @@ void diff_flush(struct diff_options *options)
separator++; separator++;
} }
if (output_format & (DIFF_FORMAT_DIFFSTAT|DIFF_FORMAT_NUMSTAT)) { if (output_format & (DIFF_FORMAT_DIFFSTAT|DIFF_FORMAT_SHORTSTAT|DIFF_FORMAT_NUMSTAT)) {
struct diffstat_t diffstat; struct diffstat_t diffstat;
memset(&diffstat, 0, sizeof(struct diffstat_t)); memset(&diffstat, 0, sizeof(struct diffstat_t));
@ -2660,6 +2694,8 @@ void diff_flush(struct diff_options *options)
show_numstat(&diffstat, options); show_numstat(&diffstat, options);
if (output_format & DIFF_FORMAT_DIFFSTAT) if (output_format & DIFF_FORMAT_DIFFSTAT)
show_stats(&diffstat, options); show_stats(&diffstat, options);
else if (output_format & DIFF_FORMAT_SHORTSTAT)
show_shortstats(&diffstat);
separator++; separator++;
} }

1
diff.h
View File

@ -29,6 +29,7 @@ typedef void (*diff_format_fn_t)(struct diff_queue_struct *q,
#define DIFF_FORMAT_NUMSTAT 0x0004 #define DIFF_FORMAT_NUMSTAT 0x0004
#define DIFF_FORMAT_SUMMARY 0x0008 #define DIFF_FORMAT_SUMMARY 0x0008
#define DIFF_FORMAT_PATCH 0x0010 #define DIFF_FORMAT_PATCH 0x0010
#define DIFF_FORMAT_SHORTSTAT 0x0020
/* These override all above */ /* These override all above */
#define DIFF_FORMAT_NAME 0x0100 #define DIFF_FORMAT_NAME 0x0100

View File

@ -80,6 +80,7 @@ no_edit=
log_given= log_given=
log_message= log_message=
verify=t verify=t
quiet=
verbose= verbose=
signoff= signoff=
force_author= force_author=
@ -241,6 +242,10 @@ $1"
signoff=t signoff=t
shift shift
;; ;;
-q|--q|--qu|--qui|--quie|--quiet)
quiet=t
shift
;;
-v|--v|--ve|--ver|--verb|--verbo|--verbos|--verbose) -v|--v|--ve|--ver|--verb|--verbo|--verbos|--verbose)
verbose=t verbose=t
shift shift
@ -615,11 +620,17 @@ then
git-rerere git-rerere
fi fi
if test -x "$GIT_DIR"/hooks/post-commit && test "$ret" = 0 if test "$ret" = 0
then then
"$GIT_DIR"/hooks/post-commit if test -x "$GIT_DIR"/hooks/post-commit
then
"$GIT_DIR"/hooks/post-commit
fi
if test -z "$quiet"
then
echo "Created${initial_commit:+ initial} commit $commit"
git-diff-tree --shortstat --summary --root --no-commit-id HEAD
fi
fi fi
test "$ret" = 0 && git-diff-tree --summary --root --no-commit-id HEAD
exit "$ret" exit "$ret"

View File

@ -37,8 +37,6 @@ test_expect_success 'tree' "test 8988da15d077d4829fc51d8544c097def6644dbb = $tre
output="$(echo "Initial commit" | git-commit-tree $(git-write-tree) 2>&1 > .git/refs/heads/master)" output="$(echo "Initial commit" | git-commit-tree $(git-write-tree) 2>&1 > .git/refs/heads/master)"
test_expect_success 'commit' "test 'Committing initial tree 8988da15d077d4829fc51d8544c097def6644dbb' = \"$output\""
git-diff-index -p HEAD > diff.output git-diff-index -p HEAD > diff.output
test_expect_success 'git-diff-index -p HEAD' 'cmp diff.expect diff.output' test_expect_success 'git-diff-index -p HEAD' 'cmp diff.expect diff.output'