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>maint
							parent
							
								
									1510fea781
								
							
						
					
					
						commit
						ebd124c678
					
				|  | @ -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 | ||||||
|  |  | ||||||
|  | @ -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. | ||||||
|  |  | ||||||
|  | @ -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. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @ -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: | ||||||
|  |  | ||||||
|  | @ -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
								
								
								
								
							
							
						
						
									
										38
									
								
								diff.c
								
								
								
								
							|  | @ -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
								
								
								
								
							
							
						
						
									
										1
									
								
								diff.h
								
								
								
								
							|  | @ -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 | ||||||
|  |  | ||||||
|  | @ -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 | ||||||
|  | 	if test -x "$GIT_DIR"/hooks/post-commit | ||||||
|  | 	then | ||||||
| 		"$GIT_DIR"/hooks/post-commit | 		"$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" | ||||||
|  |  | ||||||
|  | @ -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' | ||||||
|  |  | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Nicolas Pitre
						Nicolas Pitre