t7508: test git status -v
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH v4 1/3 t7508: .gitignore 'expect' and 'output' files
From: Junio C Hamano <[email protected]>
These files are used to observe the behaviour of the 'status' command and if there weren't any such observer, the expected output from 'status' wouldn't even mention them.
Place them in .gitignore to unclutter the output expected by the tests. An added benefit is that future tests can add such files that are purely for use by the observer, i.e. the tests themselves, by naming them as expect-foo and/or output-bar.
--- t/t7508-status.sh | 78 ++++++++++--------------------------------------------- 1 file changed, 13 insertions(+), 65 deletions(-)
t/t7508-status.sh +13 -65
@@ -66,6 +66,12 @@ strip_comments () { rm "$1" && mv "$1".tmp "$1" } +cat >.gitignore <<\EOF +.gitignore +expect* +output* +EOF + test_expect_success 'status --column' ' cat >expect <<\EOF && # On branch master
@@ -83,8 +89,8 @@ test_expect_success 'status --column' ' # Untracked files: # (use "git add <file>..." to include in what will be committed) # -# dir1/untracked dir2/untracked output -# dir2/modified expect untracked +# dir1/untracked dir2/untracked +# dir2/modified untracked # EOF COLUMNS=50 git -c status.displayCommentPrefix=true status --column="column dense" >output &&
@@ -116,8 +122,6 @@ cat >expect <<\EOF # dir1/untracked # dir2/modified # dir2/untracked -# expect -# output # untracked # EOF
@@ -167,8 +171,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked EOF
@@ -186,8 +188,6 @@ A dir2/added ?? dir1/untracked ?? dir2/modified ?? dir2/untracked -?? expect -?? output ?? untracked EOF
@@ -320,7 +320,11 @@ EOF test_i18ncmp expect output ' -rm -f .gitignore +cat >.gitignore <<\EOF +.gitignore +expect* +output* +EOF cat >expect <<\EOF ## master
@@ -329,8 +333,6 @@ A dir2/added ?? dir1/untracked ?? dir2/modified ?? dir2/untracked -?? expect -?? output ?? untracked EOF
@@ -434,8 +436,6 @@ Untracked files: dir2/modified dir2/untracked dir3/ - expect - output untracked EOF
@@ -456,8 +456,6 @@ A dir2/added ?? dir2/modified ?? dir2/untracked ?? dir3/ -?? expect -?? output ?? untracked EOF test_expect_success 'status -s -unormal' '
@@ -493,8 +491,6 @@ Untracked files: dir2/untracked dir3/untracked1 dir3/untracked2 - expect - output untracked EOF
@@ -518,8 +514,6 @@ A dir2/added ?? dir1/untracked ?? dir2/modified ?? dir2/untracked -?? expect -?? output ?? untracked EOF test_expect_success 'status -s -uall' '
@@ -554,8 +548,6 @@ Untracked files: untracked ../dir2/modified ../dir2/untracked - ../expect - ../output ../untracked EOF
@@ -569,8 +561,6 @@ A ../dir2/added ?? untracked ?? ../dir2/modified ?? ../dir2/untracked -?? ../expect -?? ../output ?? ../untracked EOF test_expect_success 'status -s with relative paths' '
@@ -586,8 +576,6 @@ A dir2/added ?? dir1/untracked ?? dir2/modified ?? dir2/untracked -?? expect -?? output ?? untracked EOF
@@ -625,8 +613,6 @@ Untracked files: <BLUE>dir1/untracked<RESET> <BLUE>dir2/modified<RESET> <BLUE>dir2/untracked<RESET> - <BLUE>expect<RESET> - <BLUE>output<RESET> <BLUE>untracked<RESET> EOF
@@ -647,8 +633,6 @@ cat >expect <<\EOF <BLUE>??<RESET> dir1/untracked <BLUE>??<RESET> dir2/modified <BLUE>??<RESET> dir2/untracked -<BLUE>??<RESET> expect -<BLUE>??<RESET> output <BLUE>??<RESET> untracked EOF
@@ -676,8 +660,6 @@ cat >expect <<\EOF <BLUE>??<RESET> dir1/untracked <BLUE>??<RESET> dir2/modified <BLUE>??<RESET> dir2/untracked -<BLUE>??<RESET> expect -<BLUE>??<RESET> output <BLUE>??<RESET> untracked EOF
@@ -694,8 +676,6 @@ A dir2/added ?? dir1/untracked ?? dir2/modified ?? dir2/untracked -?? expect -?? output ?? untracked EOF
@@ -755,8 +735,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked EOF
@@ -772,8 +750,6 @@ A dir2/added ?? dir1/untracked ?? dir2/modified ?? dir2/untracked -?? expect -?? output ?? untracked EOF
@@ -798,8 +774,6 @@ Untracked files: dir1/untracked dir2/ - expect - output untracked EOF
@@ -848,8 +822,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked EOF
@@ -870,8 +842,6 @@ A sm ?? dir1/untracked ?? dir2/modified ?? dir2/untracked -?? expect -?? output ?? untracked EOF test_expect_success 'status -s submodule summary is disabled by default' '
@@ -913,8 +883,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked EOF
@@ -940,8 +908,6 @@ A sm ?? dir1/untracked ?? dir2/modified ?? dir2/untracked -?? expect -?? output ?? untracked EOF test_expect_success 'status -s submodule summary' '
@@ -964,8 +930,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked no changes added to commit (use "git add" and/or "git commit -a")
@@ -983,8 +947,6 @@ cat >expect <<EOF ?? dir1/untracked ?? dir2/modified ?? dir2/untracked -?? expect -?? output ?? untracked EOF test_expect_success 'status -s submodule summary (clean submodule)' '
@@ -1025,8 +987,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked EOF
@@ -1080,8 +1040,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked EOF
@@ -1192,8 +1150,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked EOF
@@ -1254,8 +1210,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked EOF
@@ -1336,8 +1290,6 @@ cat > expect << EOF ; dir1/untracked ; dir2/modified ; dir2/untracked -; expect -; output ; untracked ; EOF
@@ -1369,8 +1321,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked no changes added to commit (use "git add" and/or "git commit -a")
@@ -1400,8 +1350,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked EOF
Signature · 1 line
2.3.1.303.g5174db1
PATCH v4 2/3 t7508: test git status -v
In reply to a message not in the archive"status -v" had no test. Include one.
This also requires changing the .gitignore subtests, which is a good thing:
they include testing a .gitignore pattern now.
--- t/t7508-status.sh | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-)
t/t7508-status.sh +12 -2
@@ -137,6 +137,12 @@ test_expect_success 'status with status.displayCommentPrefix=false' ' test_i18ncmp expect output ' +test_expect_success 'status -v' ' + (cat expect && git diff --cached) >expect-with-v && + git status -v >output && + test_i18ncmp expect-with-v output +' + test_expect_success 'setup fake editor' ' cat >.git/editor <<-\EOF && #! /bin/sh
@@ -201,7 +207,7 @@ test_expect_success 'status -s' ' test_expect_success 'status with gitignore' ' { echo ".gitignore" && - echo "expect" && + echo "expect*" && echo "output" && echo "untracked" } >.gitignore &&
@@ -222,6 +228,7 @@ test_expect_success 'status with gitignore' ' !! dir1/untracked !! dir2/untracked !! expect + !! expect-with-v !! output !! untracked EOF
@@ -253,6 +260,7 @@ Ignored files: dir1/untracked dir2/untracked expect + expect-with-v output untracked
@@ -264,7 +272,7 @@ EOF test_expect_success 'status with gitignore (nothing untracked)' ' { echo ".gitignore" && - echo "expect" && + echo "expect*" && echo "dir2/modified" && echo "output" && echo "untracked"
@@ -285,6 +293,7 @@ test_expect_success 'status with gitignore (nothing untracked)' ' !! dir2/modified !! dir2/untracked !! expect + !! expect-with-v !! output !! untracked EOF
@@ -312,6 +321,7 @@ Ignored files: dir2/modified dir2/untracked expect + expect-with-v output untracked
Signature · 1 line
2.3.1.303.g5174db1
PATCH v4 3/3 commit/status: show the index-worktree diff with -v -v
In reply to a message not in the archivegit commit and git status in long format show the diff between HEAD and the index when given -v. This allows previewing a commit to be made.
They also list tracked files with unstaged changes, but without a diff.
Introduce '-v -v' which shows the diff between the index and the worktree in addition to the HEAD index diff. This allows a review of unstaged changes which might be missing from the commit.
In the case of '-v -v', additonal header lines
Changes to be committed:
and
Changes not staged for commit:
are inserted before the diffs, which are equal to those in the status part; the latter preceded by 50*"-" to make it stick out more.
--- Documentation/git-commit.txt | 4 ++++ t/t7508-status.sh | 11 +++++++++++ wt-status.c | 20 ++++++++++++++++++++ 3 files changed, 35 insertions(+)
Documentation/git-commit.txt +4 -0
@@ -284,6 +284,10 @@ configuration variable documented in linkgit:git-config[1]. would be committed at the bottom of the commit message template. Note that this diff output doesn't have its lines prefixed with '#'. ++ +If specified twice, show in addition the unified diff between +what would be committed and the worktree files, i.e. the unstaged +changes to tracked files. -q:: --quiet::
t/t7508-status.sh +11 -0
@@ -143,6 +143,17 @@ test_expect_success 'status -v' ' test_i18ncmp expect-with-v output ' +test_expect_success 'status -v -v' ' + (cat expect && + echo "Changes to be committed:" && + git -c diff.mnemonicprefix=true diff --cached && + echo "--------------------------------------------------" && + echo "Changes not staged for commit:" && + git -c diff.mnemonicprefix=true diff) >expect-with-v && + git status -v -v >output && + test_i18ncmp expect-with-v output +' + test_expect_success 'setup fake editor' ' cat >.git/editor <<-\EOF && #! /bin/sh
wt-status.c +20 -0
@@ -849,6 +849,8 @@ static void wt_status_print_verbose(struct wt_status *s) {struct rev_info rev;struct setup_revision_opt opt; +int dirty_submodules; +const char *c =color (WT_STATUS_HEADER , s);init_revisions (&rev,NULL );DIFF_OPT_SET (&rev.diffopt,ALLOW_TEXTCONV );
@@ -873,7 +875,25 @@ static void wt_status_print_verbose(struct wt_status *s) rev.diffopt.use_color =0 ;wt_status_add_cut_line (s->fp); } +if (s->verbose >1 && s->commitable) { +/* print_updated() printed a header, so do we */ +if (s->fp != stdout) +wt_status_print_trailer (s); +status_printf_ln (s, c,_ ("Changes to be committed:" )); + rev.diffopt.a_prefix ="c/" ; + rev.diffopt.b_prefix ="i/" ; + }/* else use prefix as per user config */ run_diff_index (&rev,1 ); +if (s->verbose >1 && +wt_status_check_worktree_changes (s, &dirty_submodules)) { +status_printf_ln (s, c, +"--------------------------------------------------" ); +status_printf_ln (s, c,_ ("Changes not staged for commit:" )); +setup_work_tree (); + rev.diffopt.a_prefix ="i/" ; + rev.diffopt.b_prefix ="w/" ; +run_diff_files (&rev,0 ); + } }static void wt_status_print_tracking (struct wt_status *s)
Signature · 1 line
2.3.1.303.g5174db1
v4 cover [PATCHv4 0/3]
In reply to a message not in the archivev4 has an additional line with 50*"-" before the second header (if there is any).
Also, if status spewed out a cut-line (for commit) we emit a trailer line before the first header (if there is any) so that it doesn't get sucked in visually with the cut line description.
If there is only a "second" header it stands out by itself already due to quinti-dashed line.
Junio C Hamano (1):
t7508: .gitignore 'expect' and 'output' files
Michael J Gruber (2):
t7508: test git status -v
commit/status: show the index-worktree diff with -v -v
Documentation/git-commit.txt | 4 ++ t/t7508-status.sh | 103 +++++++++++++++---------------------------- wt-status.c | 20 +++++++++ 3 files changed, 60 insertions(+), 67 deletions(-)
Signature · 1 line
2.3.1.303.g5174db1
Re: [PATCHv4 0/3] More diffs for commit/status
Michael J Gruber venit, vidit, dixit 06.03.2015 10:43:
...
So, I both managed to
- omit the cover letter subject (which format-patch helpfully does *not* fill in from the branch description) and
- mis-copy the in-reply-to message id (to a non-existent one). Thunderbird user....
Sorry.
I really need to get myself a different workflow.
Michael