[PATCHv2 2/2] commit/status: show the index-worktree diff with -v -v
git 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. Signed-off-by: Michael J Gruber --- Documentation/git-commit.txt | 4 t/t7508-status.sh| 43 +++ wt-status.c | 10 ++ 3 files changed, 57 insertions(+) diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt index 1e74b75..f14d2ec 100644 --- a/Documentation/git-commit.txt +++ b/Documentation/git-commit.txt @@ -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:: diff --git a/t/t7508-status.sh b/t/t7508-status.sh index 4989e98..6779195 100755 --- a/t/t7508-status.sh +++ b/t/t7508-status.sh @@ -139,6 +139,49 @@ test_expect_success 'status -v' ' test_cmp expect output ' +cat >expect <<\EOF +On branch master +Changes to be committed: + (use "git reset HEAD ..." to unstage) + + new file: dir2/added + +Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git checkout -- ..." to discard changes in working directory) + + modified: dir1/modified + +Untracked files: + (use "git add ..." to include in what will be committed) + + dir1/untracked + dir2/modified + dir2/untracked + expect + output + untracked + +diff --git HEAD=base-commit/dir2/added INDEX=staged-for-commit/dir2/added +new file mode 100644 +index 000..00750ed +--- /dev/null INDEX=staged-for-commit/dir2/added +@@ -0,0 +1 @@ ++3 +diff --git INDEX=staged-for-commit/dir1/modified WORKTREE=not-staged-for-commit/dir1/modified +index e69de29..d00491f 100644 +--- INDEX=staged-for-commit/dir1/modified WORKTREE=not-staged-for-commit/dir1/modified +@@ -0,0 +1 @@ ++1 +EOF + +test_expect_success 'status -v -v' ' + git status -v -v >output && + test_cmp expect output +' + test_expect_success 'setup fake editor' ' cat >.git/editor <<-\EOF && #! /bin/sh diff --git a/wt-status.c b/wt-status.c index 29666d0..b6e9837 100644 --- a/wt-status.c +++ b/wt-status.c @@ -873,7 +873,17 @@ 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) { + rev.diffopt.a_prefix = "HEAD=base-commit/"; + rev.diffopt.b_prefix = "INDEX=staged-for-commit/"; + } /* else use prefix as per user config */ run_diff_index(&rev, 1); + if (s->verbose > 1) { + setup_work_tree(); + rev.diffopt.a_prefix = "INDEX=staged-for-commit/"; + rev.diffopt.b_prefix = "WORKTREE=not-staged-for-commit/"; + run_diff_files(&rev, 0); + } } static void wt_status_print_tracking(struct wt_status *s) -- 2.3.1.303.g5174db1 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCHv2 2/2] commit/status: show the index-worktree diff with -v -v
Michael J Gruber writes: > +diff --git INDEX=staged-for-commit/dir1/modified > WORKTREE=not-staged-for-commit/dir1/modified > +index e69de29..d00491f 100644 > +--- INDEX=staged-for-commit/dir1/modified > WORKTREE=not-staged-for-commit/dir1/modified This might be OK for a project like Git itself, but I suspect people with long pathnames (like, eh, those in Java land) would not appreciate it. Wouldn't mnemonic prefix, which the users are already familiar with, be the most suitable tool for this disambiguation? After all that was what it was invented for 8 years ago. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCHv2 2/2] commit/status: show the index-worktree diff with -v -v
Junio C Hamano venit, vidit, dixit 03.03.2015 22:26: > Michael J Gruber writes: > >> +diff --git INDEX=staged-for-commit/dir1/modified >> WORKTREE=not-staged-for-commit/dir1/modified >> +index e69de29..d00491f 100644 >> +--- INDEX=staged-for-commit/dir1/modified >> WORKTREE=not-staged-for-commit/dir1/modified > > This might be OK for a project like Git itself, but I suspect people > with long pathnames (like, eh, those in Java land) would not > appreciate it. > > Wouldn't mnemonic prefix, which the users are already familiar with, > be the most suitable tool for this disambiguation? After all that > was what it was invented for 8 years ago. Well...: > or it may want to even be like this: > > diff --git a/A b/A > ... > diff --git to-be-committed/A left-out-of-the-commit/A > ... > diff --git a/B b/B > ... > > by using a custom, unusual and easy-to-notice prefixes. Your idea was to use these verbous prefixes so that one recognizes the different types of diffs, and so that we don't need to sort them by file. I'm happy with c/,i/ and i/,w/ and without sorting. Maybe we would need headings between the two diffs then? HEAD/,INDEX/ resp. INDEX/,WORKTREE/ would be a shorter alternativ that is inline with the short acronyms execept for c/, because COMMIT/ (withiut "base") would be misleading during commit -v, I'm afraid. Michael -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCHv2 2/2] commit/status: show the index-worktree diff with -v -v
Michael J Gruber writes: > Junio C Hamano venit, vidit, dixit 03.03.2015 22:26: >> Michael J Gruber writes: >> >>> +diff --git INDEX=staged-for-commit/dir1/modified >>> WORKTREE=not-staged-for-commit/dir1/modified >>> +index e69de29..d00491f 100644 >>> +--- INDEX=staged-for-commit/dir1/modified >>> WORKTREE=not-staged-for-commit/dir1/modified >> >> This might be OK for a project like Git itself, but I suspect people >> with long pathnames (like, eh, those in Java land) would not >> appreciate it. >> >> Wouldn't mnemonic prefix, which the users are already familiar with, >> be the most suitable tool for this disambiguation? After all that >> was what it was invented for 8 years ago. > > Well...: > >> or it may want to even be like this: >> >> diff --git a/A b/A >> ... >> diff --git to-be-committed/A left-out-of-the-commit/A >> ... >> diff --git a/B b/B >> ... >> >> by using a custom, unusual and easy-to-notice prefixes. > > Your idea was to use these verbous prefixes so that one recognizes the > different types of diffs, and so that we don't need to sort them by file. Yeah, but I can become wiser over time and change my opinion, no ;-)? As to pairing the diffs by paths so that c/i and i/w diffs for the same path come together, which I mentioned in the older message you quoted, I think what you said in response made sense, i.e. "the intention was to show the diff for the two categories of changes which "git status" lists without diff already". So I'd prefer showing c/i diff and then optionall i/w diff like you did, without mixing them together. > I'm happy with c/,i/ and i/,w/ and without sorting. Maybe we would need > headings between the two diffs then? Yup. The i/w diff is a new thing and a heading before it to explain what it is would be very helpful for the users to understand what they are looking at. A new heading before c/i diff might help but it may be OK without. E.g. something along the following lines Changes to be committed: modified: foo Changes left in the working tree: modified: bar -- Changes to be committed diff --git c/foo i/foo ... -- Changes left in the working tree diff --git i/bar w/bsar ... -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html