* Some Commit Messages Scare git-rev-list @ 2006-04-12 13:11 Darrin Thompson 2006-04-12 17:23 ` Linus Torvalds 0 siblings, 1 reply; 5+ messages in thread From: Darrin Thompson @ 2006-04-12 13:11 UTC (permalink / raw) To: git This scripts exhibits some odd behavior. Apparently git-rev-list mishandles commit messages which do not end in a newline. This as best I can tell this is a problem introduced since 1.1.5. Here is a script to reproduce the problem: rm -rf git-test mkdir git-test cd git-test git-init-db echo hello > hello git-add hello # send scary message to git-commit -F - echo -n "test commit" | git-commit -F - -a echo world > world git-add world git-update-index --add world treeid=$(git-write-tree) # send scary message directly to git-commit-tree commitid=$(echo -n "another-test" | git-commit-tree $treeid -p HEAD) git-update-ref HEAD $commitid # see the wreckage git-rev-list --pretty HEAD Running gitk will also show the problem. -- Darrin ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Some Commit Messages Scare git-rev-list 2006-04-12 13:11 Some Commit Messages Scare git-rev-list Darrin Thompson @ 2006-04-12 17:23 ` Linus Torvalds 2006-04-12 18:46 ` Junio C Hamano 0 siblings, 1 reply; 5+ messages in thread From: Linus Torvalds @ 2006-04-12 17:23 UTC (permalink / raw) To: Darrin Thompson; +Cc: Git Mailing List, Junio C Hamano On Wed, 12 Apr 2006, Darrin Thompson wrote: > > This scripts exhibits some odd behavior. Apparently git-rev-list > mishandles commit messages which do not end in a newline. This as best I > can tell this is a problem introduced since 1.1.5. Fixed like so.. However, your script shows another problem: the "#" added at the end of the line for a echo -n "duh" | git-commit -F - -a seems to be because we append the "git status" output to it, and then we drop the lines that start with a '#', but due to the "-n", the first # ends up being at the end of the line. I suspect that when we get the commit message like that, we should _not_ do any of the commit message editing at all. That's a separate issue, though, and not fixed by this patch. Linus --- diff --git a/commit.c b/commit.c index d534c9b..c7bb8db 100644 --- a/commit.c +++ b/commit.c @@ -400,11 +400,11 @@ static int get_one_line(const char *msg, while (len--) { char c = *msg++; + if (!c) + break; ret++; if (c == '\n') break; - if (!c) - return 0; } return ret; } ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: Some Commit Messages Scare git-rev-list 2006-04-12 17:23 ` Linus Torvalds @ 2006-04-12 18:46 ` Junio C Hamano 2006-04-12 19:39 ` Junio C Hamano 0 siblings, 1 reply; 5+ messages in thread From: Junio C Hamano @ 2006-04-12 18:46 UTC (permalink / raw) To: Linus Torvalds; +Cc: Darrin Thompson, Git Mailing List Linus Torvalds <torvalds@osdl.org> writes: > Fixed like so.. Thanks. > However, your script shows another problem: the "#" added at the end of > the line for a > > echo -n "duh" | git-commit -F - -a > > seems to be because we append the "git status" output to it, and then we > drop the lines that start with a '#', but due to the "-n", the first # > ends up being at the end of the line. > > I suspect that when we get the commit message like that, we should _not_ > do any of the commit message editing at all. True. -- >8 -- [PATCH] git-commit: do not muck with commit message when no_edit is set. Spotted by Linus and Darrin Thompson. When we took a commit message from -F <file> with an incomplete line, we appended "git status" output, which ended up attaching a lone "#" at the end. We still need the "do we have anything to commit?" check by running "status" (which has to know what to do in different cases with -i/-o/-a), but there is no point appending its output to the proposed commit message given by the user. Signed-off-by: Junio C Hamano <junkio@cox.net> --- git-commit.sh | 17 ++++++++++++----- 1 files changed, 12 insertions(+), 5 deletions(-) 475443c8489d9167b944367d8ec8bfef77bee0a5 diff --git a/git-commit.sh b/git-commit.sh index 1e7c09e..bd3dc71 100755 --- a/git-commit.sh +++ b/git-commit.sh @@ -537,7 +537,7 @@ t) ;; esac -if [ -f "$GIT_DIR/MERGE_HEAD" ]; then +if test -f "$GIT_DIR/MERGE_HEAD" && test -z "$no_edit"; then echo "#" echo "# It looks like you may be committing a MERGE." echo "# If this is not correct, please remove the file" @@ -605,16 +605,23 @@ else current= fi -{ - test -z "$only_include_assumed" || echo "$only_include_assumed" - run_status -} >>"$GIT_DIR"/COMMIT_EDITMSG +if test -z "$no_edit" +then + { + test -z "$only_include_assumed" || echo "$only_include_assumed" + run_status + } >>"$GIT_DIR"/COMMIT_EDITMSG +else + # we need to check if there is anything to commit + run_status >/dev/null +fi if [ "$?" != "0" -a ! -f "$GIT_DIR/MERGE_HEAD" -a -z "$amend" ] then rm -f "$GIT_DIR/COMMIT_EDITMSG" run_status exit 1 fi + case "$no_edit" in '') case "${VISUAL:-$EDITOR},$TERM" in -- 1.3.0.rc3.g72c1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: Some Commit Messages Scare git-rev-list 2006-04-12 18:46 ` Junio C Hamano @ 2006-04-12 19:39 ` Junio C Hamano 2006-04-12 20:04 ` Linus Torvalds 0 siblings, 1 reply; 5+ messages in thread From: Junio C Hamano @ 2006-04-12 19:39 UTC (permalink / raw) To: git; +Cc: Darrin Thompson, Linus Torvalds Junio C Hamano <junkio@cox.net> writes: > We still need the "do we have anything to commit?" check by > running "status" (which has to know what to do in different > cases with -i/-o/-a), but there is no point appending its output > to the proposed commit message given by the user. BTW, this does not quite work as expected if you did something like this: echo -n 'incomplete line' | git commit -a -s -F - because we would want to append the Signed-off-by: line. I am almost tempted to say "then do not do it", but it might make sense to do this as well. -- >8 -- [PATCH] stripspace: make sure not to leave an incomplete line. When dealing with a commit log message for human consumption, it never makes sense to keep a log that ends with an incomplete line, so make it a part of the clean-up process done with git-stripspace. Signed-off-by: Junio C Hamano <junkio@cox.net> --- diff --git a/stripspace.c b/stripspace.c index 96cd0a8..dee1ef0 100644 --- a/stripspace.c +++ b/stripspace.c @@ -6,9 +6,9 @@ #include <ctype.h> * Remove empty lines from the beginning and end. * * Turn multiple consecutive empty lines into just one - * empty line. + * empty line. Return true if it is an incomplete line. */ -static void cleanup(char *line) +static int cleanup(char *line) { int len = strlen(line); @@ -21,16 +21,19 @@ static void cleanup(char *line) len--; line[len] = 0; } while (len > 1); + return 0; } + return 1; } int main(int argc, char **argv) { int empties = -1; + int incomplete = 0; char line[1024]; while (fgets(line, sizeof(line), stdin)) { - cleanup(line); + incomplete = cleanup(line); /* Not just an empty line? */ if (line[0] != '\n') { @@ -44,5 +47,7 @@ int main(int argc, char **argv) continue; empties++; } + if (incomplete) + putchar('\n'); return 0; } ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: Some Commit Messages Scare git-rev-list 2006-04-12 19:39 ` Junio C Hamano @ 2006-04-12 20:04 ` Linus Torvalds 0 siblings, 0 replies; 5+ messages in thread From: Linus Torvalds @ 2006-04-12 20:04 UTC (permalink / raw) To: Junio C Hamano; +Cc: git, Darrin Thompson On Wed, 12 Apr 2006, Junio C Hamano wrote: > > [PATCH] stripspace: make sure not to leave an incomplete line. Ack. Linus ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2006-04-12 20:04 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2006-04-12 13:11 Some Commit Messages Scare git-rev-list Darrin Thompson 2006-04-12 17:23 ` Linus Torvalds 2006-04-12 18:46 ` Junio C Hamano 2006-04-12 19:39 ` Junio C Hamano 2006-04-12 20:04 ` Linus Torvalds
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).