git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [OUTREACHY][PATCH] diff: do not show submodule with untracked files as "-dirty"

From
PWPhillip Wood <phillip.wood123@gmail.com>
Date
Oct 20, 2020, 13:38 UTC
Message-ID
<7af89857-5495-d008-3d8f-09b5fed32775@gmail.com>
In-Reply-To
<pull.751.git.1602781723670.gitgitgadget@gmail.com>
Hi Sangeeta
On 15/10/2020 18:08, Sangeeta via GitGitGadget wrote:
> From: sangu09 <sangunb09@gmail.com>

I think we require your full name on the From line to match the Signed-off-by line below (c.f. https://lore.kernel.org/git/xmqqpn5dd5dv.fsf@gitster.c.googlers.com)

> Git diff reports a submodule directory as -dirty even when there are only untracked files in the submodule directory.
> This is inconsistent with what `git describe --dirty` says when run in the submodule directory in that state.

That is a good summary of the issue that this change addresses, we normally wrap lines at 72 characters though.

> So this patch makes `git diff HEAD` consistent with `git describe --dirty` in case of untracked files. This can be solved by including the "--ignore-submodules=untracked" feature in git diff by default. So in order to make this as default behaviour I have added the behaviour of `ignore-submodules` in `repo_diff_setup()` function.
I think this could be a little more concise

This patch makes `git diff HEAD` consistent with `git describe --dirty` when a submodule contains untracked files by making `--ignore-submodules=untracked` the default.

> Also, to avoid `ignoreSubmodules` in user config being overwritten, I have made a  global variable >`diff_ignore_submodule_config` to keep a track whether `handle_ignore_submodules_arg` is called before or not.

It is good that you have thought about this and it is worth mentioning in the commit message, however unfortunately that variable does not seem to exist in the patch.

Show 42 quoted lines
> 
> Signed-off-by: Sangeeta Jain <sangunb09@gmail.com>
> ---
>      [Outreachy] diff: do not show submodule with untracked files as "-dirty"
>      
>      Git diff reports a submodule directory as -dirty even when there are
>      only untracked files in the submodule directory. This is inconsistent
>      with what git describe --dirty says when run in the submodule directory
>      in that state.
>      
>      So this patch makes git diff HEAD consistent with git describe --dirty
>      in case of untracked files. This can be solved by including the
>      "--ignore-submodules=untracked" feature in git diff by default. So in
>      order to make this as default behaviour I have added the behaviour of
>      ignore-submodules in repo_diff_setup() function. Also, to avoid
>      ignoreSubmodules in user config being overwritten, I have made a global
>      variable diff_ignore_submodule_config to keep a track whether
>      handle_ignore_submodules_arg is called before or not.
> 
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-751%2Fsangu09%2Fhandle_untracked-v1
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-751/sangu09/handle_untracked-v1
> Pull-Request: https://github.com/gitgitgadget/git/pull/751
> 
>   diff.c                                       |  1 +
>   submodule.c                                  |  2 ++
>   t/t3701-add-interactive.sh                   |  2 +-
>   t/t4027-diff-submodule.sh                    |  6 ++--
>   t/t4041-diff-submodule-option.sh             | 16 ++++-----
>   t/t4060-diff-submodule-option-diff-format.sh | 16 ++++-----
>   t/t7064-wtstatus-pv2.sh                      |  8 ++---
>   t/t7506-status-submodule.sh                  | 38 +++++---------------
>   8 files changed, 36 insertions(+), 53 deletions(-)
> 
> diff --git a/diff.c b/diff.c
> index 2bb2f8f57e..07d89e3e2b 100644
> --- a/diff.c
> +++ b/diff.c
> @@ -4585,6 +4585,7 @@ void repo_diff_setup(struct repository *r, struct diff_options *options)
>   		DIFF_XDL_SET(options, INDENT_HEURISTIC);
>   
>   	options->orderfile = diff_order_file_cfg;
> +	options->flags.ignore_untracked_in_submodules = 1;

This unconditionally overrides diff.ignoreSubmodules, grepping seems to show that we don't have any tests that test a config value of "none". There are a few that check "dirty" which we should look at to consider if they still add value now we've changed the default.

Show 12 quoted lines
>   	if (diff_no_prefix) {
>   		options->a_prefix = options->b_prefix = "";
> diff --git a/submodule.c b/submodule.c
> index b3bb59f066..762298c010 100644
> --- a/submodule.c
> +++ b/submodule.c
> @@ -1678,6 +1678,8 @@ unsigned is_submodule_modified(const char *path, int ignore_untracked)
>   	strvec_pushl(&cp.args, "status", "--porcelain=2", NULL);
>   	if (ignore_untracked)
>   		strvec_push(&cp.args, "-uno");
> +	else
> +        strvec_push (&cp.args, "--ignore-submodules=none");

We need to do this a a consequence of changing the default for '--ignore-submodules`, we should think what the consequences are for other users of `git status` and whether we need to do something similar there if diff.ignoreSubmodules is not set.

Show 41 quoted lines
>   	prepare_submodule_repo_env(&cp.env_array);
>   	cp.git_cmd = 1;
> diff --git a/t/t3701-add-interactive.sh b/t/t3701-add-interactive.sh
> index ca04fac417..98e46ad1ae 100755
> --- a/t/t3701-add-interactive.sh
> +++ b/t/t3701-add-interactive.sh
> @@ -761,7 +761,7 @@ test_expect_success 'setup different kinds of dirty submodules' '
>   		echo dirty >>initial &&
>   		: >untracked
>   	) &&
> -	git -C for-submodules diff-files --name-only >actual &&
> +	git -C for-submodules diff-files --name-only --ignore-submodules=none >actual &&
>   	cat >expected <<-\EOF &&
>   	dirty-both-ways
>   	dirty-head
> diff --git a/t/t4027-diff-submodule.sh b/t/t4027-diff-submodule.sh
> index d7145ccca4..7bf2cb9c88 100755
> --- a/t/t4027-diff-submodule.sh
> +++ b/t/t4027-diff-submodule.sh
> @@ -93,7 +93,7 @@ test_expect_success 'git diff HEAD with dirty submodule (untracked)' '
>   	) &&
>   	git diff HEAD >actual &&
>   	sed -e "1,/^@@/d" actual >actual.body &&
> -	expect_from_to >expect.body $subtip $subprev-dirty &&
> +	expect_from_to >expect.body $subtip $subprev &&
>   	test_cmp expect.body actual.body
>   '
>   
> @@ -168,13 +168,13 @@ test_expect_success 'git diff HEAD with dirty submodule (untracked, refs match)'
>   		git clean -qfdx &&
>   		>cruft
>   	) &&
> -	git diff HEAD >actual &&
> +	git diff --ignore-submodules=none HEAD >actual &&
>   	sed -e "1,/^@@/d" actual >actual.body &&
>   	expect_from_to >expect.body $subprev $subprev-dirty &&
>   	test_cmp expect.body actual.body &&
>   	git diff --ignore-submodules=all HEAD >actual2 &&
>   	test_must_be_empty actual2 &&
> -	git diff --ignore-submodules=untracked HEAD >actual3 &&
> +	git diff HEAD >actual3 &&
This checks the new default which is good
Show 155 quoted lines
>   	test_must_be_empty actual3 &&
>   	git diff --ignore-submodules=dirty HEAD >actual4 &&
>   	test_must_be_empty actual4
> diff --git a/t/t4041-diff-submodule-option.sh b/t/t4041-diff-submodule-option.sh
> index f852136585..bb368b685d 100755
> --- a/t/t4041-diff-submodule-option.sh
> +++ b/t/t4041-diff-submodule-option.sh
> @@ -262,7 +262,7 @@ test_expect_success 'submodule is up to date' '
>   
>   test_expect_success 'submodule contains untracked content' '
>   	echo new > sm1/new-file &&
> -	git diff-index -p --submodule=log HEAD >actual &&
> +	git diff-index -p --submodule=log HEAD --ignore-submodules=none >actual &&
>   	cat >expected <<-EOF &&
>   	Submodule sm1 contains untracked content
>   	EOF
> @@ -270,7 +270,7 @@ test_expect_success 'submodule contains untracked content' '
>   '
>   
>   test_expect_success 'submodule contains untracked content (untracked ignored)' '
> -	git diff-index -p --ignore-submodules=untracked --submodule=log HEAD >actual &&
> +	git diff-index -p --submodule=log HEAD >actual &&
>   	test_must_be_empty actual
>   '
>   
> @@ -286,7 +286,7 @@ test_expect_success 'submodule contains untracked content (all ignored)' '
>   
>   test_expect_success 'submodule contains untracked and modified content' '
>   	echo new > sm1/foo6 &&
> -	git diff-index -p --submodule=log HEAD >actual &&
> +	git diff-index -p --submodule=log HEAD --ignore-submodules=none >actual &&
>   	cat >expected <<-EOF &&
>   	Submodule sm1 contains untracked content
>   	Submodule sm1 contains modified content
> @@ -296,7 +296,7 @@ test_expect_success 'submodule contains untracked and modified content' '
>   
>   test_expect_success 'submodule contains untracked and modified content (untracked ignored)' '
>   	echo new > sm1/foo6 &&
> -	git diff-index -p --ignore-submodules=untracked --submodule=log HEAD >actual &&
> +	git diff-index -p --submodule=log HEAD >actual &&
>   	cat >expected <<-EOF &&
>   	Submodule sm1 contains modified content
>   	EOF
> @@ -337,7 +337,7 @@ test_expect_success 'submodule is modified' '
>   
>   test_expect_success 'modified submodule contains untracked content' '
>   	echo new > sm1/new-file &&
> -	git diff-index -p --submodule=log HEAD >actual &&
> +	git diff-index -p  --ignore-submodules=none --submodule=log HEAD >actual &&
>   	cat >expected <<-EOF &&
>   	Submodule sm1 contains untracked content
>   	Submodule sm1 $head6..$head8:
> @@ -347,7 +347,7 @@ test_expect_success 'modified submodule contains untracked content' '
>   '
>   
>   test_expect_success 'modified submodule contains untracked content (untracked ignored)' '
> -	git diff-index -p --ignore-submodules=untracked --submodule=log HEAD >actual &&
> +	git diff-index -p --submodule=log HEAD >actual &&
>   	cat >expected <<-EOF &&
>   	Submodule sm1 $head6..$head8:
>   	  > change
> @@ -371,7 +371,7 @@ test_expect_success 'modified submodule contains untracked content (all ignored)
>   
>   test_expect_success 'modified submodule contains untracked and modified content' '
>   	echo modification >> sm1/foo6 &&
> -	git diff-index -p --submodule=log HEAD >actual &&
> +	git diff-index -p --ignore-submodules=none --submodule=log HEAD >actual &&
>   	cat >expected <<-EOF &&
>   	Submodule sm1 contains untracked content
>   	Submodule sm1 contains modified content
> @@ -383,7 +383,7 @@ test_expect_success 'modified submodule contains untracked and modified content'
>   
>   test_expect_success 'modified submodule contains untracked and modified content (untracked ignored)' '
>   	echo modification >> sm1/foo6 &&
> -	git diff-index -p --ignore-submodules=untracked --submodule=log HEAD >actual &&
> +	git diff-index -p --submodule=log HEAD >actual &&
>   	cat >expected <<-EOF &&
>   	Submodule sm1 contains modified content
>   	Submodule sm1 $head6..$head8:
> diff --git a/t/t4060-diff-submodule-option-diff-format.sh b/t/t4060-diff-submodule-option-diff-format.sh
> index fc8229c726..dc7b242697 100755
> --- a/t/t4060-diff-submodule-option-diff-format.sh
> +++ b/t/t4060-diff-submodule-option-diff-format.sh
> @@ -409,7 +409,7 @@ test_expect_success 'submodule is up to date' '
>   
>   test_expect_success 'submodule contains untracked content' '
>   	echo new > sm1/new-file &&
> -	git diff-index -p --submodule=diff HEAD >actual &&
> +	git diff-index -p --ignore-submodules=none --submodule=diff HEAD >actual &&
>   	cat >expected <<-EOF &&
>   	Submodule sm1 contains untracked content
>   	EOF
> @@ -417,7 +417,7 @@ test_expect_success 'submodule contains untracked content' '
>   '
>   
>   test_expect_success 'submodule contains untracked content (untracked ignored)' '
> -	git diff-index -p --ignore-submodules=untracked --submodule=diff HEAD >actual &&
> +	git diff-index -p --submodule=diff HEAD >actual &&
>   	test_must_be_empty actual
>   '
>   
> @@ -433,7 +433,7 @@ test_expect_success 'submodule contains untracked content (all ignored)' '
>   
>   test_expect_success 'submodule contains untracked and modified content' '
>   	echo new > sm1/foo6 &&
> -	git diff-index -p --submodule=diff HEAD >actual &&
> +	git diff-index -p --ignore-submodules=none --submodule=diff HEAD >actual &&
>   	cat >expected <<-EOF &&
>   	Submodule sm1 contains untracked content
>   	Submodule sm1 contains modified content
> @@ -451,7 +451,7 @@ test_expect_success 'submodule contains untracked and modified content' '
>   # NOT OK
>   test_expect_success 'submodule contains untracked and modified content (untracked ignored)' '
>   	echo new > sm1/foo6 &&
> -	git diff-index -p --ignore-submodules=untracked --submodule=diff HEAD >actual &&
> +	git diff-index -p --submodule=diff HEAD >actual &&
>   	cat >expected <<-EOF &&
>   	Submodule sm1 contains modified content
>   	diff --git a/sm1/foo6 b/sm1/foo6
> @@ -512,7 +512,7 @@ test_expect_success 'submodule is modified' '
>   
>   test_expect_success 'modified submodule contains untracked content' '
>   	echo new > sm1/new-file &&
> -	git diff-index -p --submodule=diff HEAD >actual &&
> +	git diff-index -p --ignore-submodules=none --submodule=diff HEAD >actual &&
>   	cat >expected <<-EOF &&
>   	Submodule sm1 contains untracked content
>   	Submodule sm1 $head7..$head8:
> @@ -528,7 +528,7 @@ test_expect_success 'modified submodule contains untracked content' '
>   '
>   
>   test_expect_success 'modified submodule contains untracked content (untracked ignored)' '
> -	git diff-index -p --ignore-submodules=untracked --submodule=diff HEAD >actual &&
> +	git diff-index -p --submodule=diff HEAD >actual &&
>   	cat >expected <<-EOF &&
>   	Submodule sm1 $head7..$head8:
>   	diff --git a/sm1/foo6 b/sm1/foo6
> @@ -564,7 +564,7 @@ test_expect_success 'modified submodule contains untracked content (all ignored)
>   
>   test_expect_success 'modified submodule contains untracked and modified content' '
>   	echo modification >> sm1/foo6 &&
> -	git diff-index -p --submodule=diff HEAD >actual &&
> +	git diff-index -p --ignore-submodules=none --submodule=diff HEAD >actual &&
>   	cat >expected <<-EOF &&
>   	Submodule sm1 contains untracked content
>   	Submodule sm1 contains modified content
> @@ -583,7 +583,7 @@ test_expect_success 'modified submodule contains untracked and modified content'
>   
>   test_expect_success 'modified submodule contains untracked and modified content (untracked ignored)' '
>   	echo modification >> sm1/foo6 &&
> -	git diff-index -p --ignore-submodules=untracked --submodule=diff HEAD >actual &&
> +	git diff-index -p --submodule=diff HEAD >actual &&
>   	cat >expected <<-EOF &&
>   	Submodule sm1 contains modified content
>   	Submodule sm1 $head7..$head8:

I think all the diff tests look fine and we seem to have a good mix of testing the new default and --ignore-submodules=none

Show 10 quoted lines
> diff --git a/t/t7064-wtstatus-pv2.sh b/t/t7064-wtstatus-pv2.sh
> index 537787e598..200626251e 100755
> --- a/t/t7064-wtstatus-pv2.sh
> +++ b/t/t7064-wtstatus-pv2.sh
> @@ -483,7 +483,7 @@ test_expect_success 'create and add submodule, submodule appears clean (A. S...)
>   	)
>   '
>   
> -test_expect_success 'untracked changes in added submodule (AM S..U)' '
> +test_expect_success 'untracked changes in added submodule (A. S...))' '
typo: there's an extra ')'
Show 29 quoted lines
>   	(	cd super_repo &&
>   		## create untracked file in the submodule.
>   		(	cd sub1 &&
> @@ -500,7 +500,7 @@ test_expect_success 'untracked changes in added submodule (AM S..U)' '
>   		# branch.upstream origin/master
>   		# branch.ab +0 -0
>   		1 A. N... 000000 100644 100644 $ZERO_OID $HMOD .gitmodules
> -		1 AM S..U 000000 160000 160000 $ZERO_OID $HSUB sub1
> +		1 A. S... 000000 160000 160000 $ZERO_OID $HSUB sub1
>   		EOF
>   
>   		git status --porcelain=v2 --branch --untracked-files=all >actual &&
> @@ -560,7 +560,7 @@ test_expect_success 'staged and unstaged changes in added (AM S.M.)' '
>   	)
>   '
>   
> -test_expect_success 'staged and untracked changes in added submodule (AM S.MU)' '
> +test_expect_success 'staged and untracked changes in added submodule (AM S.M.)' '
>   	(	cd super_repo &&
>   		(	cd sub1 &&
>   			## stage new changes in tracked file.
> @@ -579,7 +579,7 @@ test_expect_success 'staged and untracked changes in added submodule (AM S.MU)'
>   		# branch.upstream origin/master
>   		# branch.ab +0 -0
>   		1 A. N... 000000 100644 100644 $ZERO_OID $HMOD .gitmodules
> -		1 AM S.MU 000000 160000 160000 $ZERO_OID $HSUB sub1
> +		1 AM S.M. 000000 160000 160000 $ZERO_OID $HSUB sub1
>   		EOF
>

I'm not sure about the changes in this file, maybe we should be testing the new default and --ignore-submodules=none

Show 116 quoted lines
>   		git status --porcelain=v2 --branch --untracked-files=all >actual &&
> diff --git a/t/t7506-status-submodule.sh b/t/t7506-status-submodule.sh
> index 3fcb44767f..b7ff7928fb 100755
> --- a/t/t7506-status-submodule.sh
> +++ b/t/t7506-status-submodule.sh
> @@ -95,7 +95,7 @@ test_expect_success 'status with untracked file in submodule' '
>   	(cd sub && git reset --hard) &&
>   	echo "content" >sub/new-file &&
>   	git status >output &&
> -	test_i18ngrep "modified:   sub (untracked content)" output
> +	test_i18ngrep "^nothing to commit" output
>   '
>   
>   test_expect_success 'status -uno with untracked file in submodule' '
> @@ -105,23 +105,19 @@ test_expect_success 'status -uno with untracked file in submodule' '
>   
>   test_expect_success 'status with untracked file in submodule (porcelain)' '
>   	git status --porcelain >output &&
> -	diff output - <<-\EOF
> -	 M sub
> -	EOF
> +	test_must_be_empty output
>   '
>   
>   test_expect_success 'status with untracked file in submodule (short)' '
>   	git status --short >output &&
> -	diff output - <<-\EOF
> -	 ? sub
> -	EOF
> +	test_must_be_empty output
>   '
>   
>   test_expect_success 'status with added and untracked file in submodule' '
>   	(cd sub && git reset --hard && echo >foo && git add foo) &&
>   	echo "content" >sub/new-file &&
>   	git status >output &&
> -	test_i18ngrep "modified:   sub (modified content, untracked content)" output
> +	test_i18ngrep "modified:   sub (modified content)" output
>   '
>   
>   test_expect_success 'status with added and untracked file in submodule (porcelain)' '
> @@ -169,7 +165,7 @@ test_expect_success 'status with untracked file in modified submodule' '
>   	(cd sub && git reset --hard) &&
>   	echo "content" >sub/new-file &&
>   	git status >output &&
> -	test_i18ngrep "modified:   sub (new commits, untracked content)" output
> +	test_i18ngrep "modified:   sub (new commits)" output
>   '
>   
>   test_expect_success 'status with untracked file in modified submodule (porcelain)' '
> @@ -183,7 +179,7 @@ test_expect_success 'status with added and untracked file in modified submodule'
>   	(cd sub && git reset --hard && echo >foo && git add foo) &&
>   	echo "content" >sub/new-file &&
>   	git status >output &&
> -	test_i18ngrep "modified:   sub (new commits, modified content, untracked content)" output
> +	test_i18ngrep "modified:   sub (new commits, modified content)" output
>   '
>   
>   test_expect_success 'status with added and untracked file in modified submodule (porcelain)' '
> @@ -350,30 +346,17 @@ test_expect_success 'setup superproject with untracked file in nested submodule'
>   
>   test_expect_success 'status with untracked file in nested submodule (porcelain)' '
>   	git -C super status --porcelain >output &&
> -	diff output - <<-\EOF
> -	 M sub1
> -	 M sub2
> -	 M sub3
> -	EOF
> +	test_must_be_empty output
>   '
>   
>   test_expect_success 'status with untracked file in nested submodule (porcelain=2)' '
>   	git -C super status --porcelain=2 >output &&
> -	sanitize_output output &&
> -	diff output - <<-\EOF
> -	1 .M S..U 160000 160000 160000 HASH HASH sub1
> -	1 .M S..U 160000 160000 160000 HASH HASH sub2
> -	1 .M S..U 160000 160000 160000 HASH HASH sub3
> -	EOF
> +	test_must_be_empty output
>   '
>   
>   test_expect_success 'status with untracked file in nested submodule (short)' '
>   	git -C super status --short >output &&
> -	diff output - <<-\EOF
> -	 ? sub1
> -	 ? sub2
> -	 ? sub3
> -	EOF
> +	test_must_be_empty output
>   '
>   
>   test_expect_success 'setup superproject with modified file in nested submodule' '
> @@ -386,7 +369,6 @@ test_expect_success 'status with added file in nested submodule (porcelain)' '
>   	diff output - <<-\EOF
>   	 M sub1
>   	 M sub2
> -	 M sub3
>   	EOF
>   '
>   
> @@ -396,7 +378,6 @@ test_expect_success 'status with added file in nested submodule (porcelain=2)' '
>   	diff output - <<-\EOF
>   	1 .M S.M. 160000 160000 160000 HASH HASH sub1
>   	1 .M S.M. 160000 160000 160000 HASH HASH sub2
> -	1 .M S..U 160000 160000 160000 HASH HASH sub3
>   	EOF
>   '
>   
> @@ -405,7 +386,6 @@ test_expect_success 'status with added file in nested submodule (short)' '
>   	diff output - <<-\EOF
>   	 m sub1
>   	 m sub2
> -	 ? sub3
>   	EOF
>   '

I think we want to keep testing that we get the correct output when --ignore-submodules=none as well as maybe adding a couple of new tests that check the default in this file, rather than changing the expected output.

Best Wishes
Phillip
> base-commit: d98273ba77e1ab9ec755576bc86c716a97bf59d7
> 
Previous: Sangeeta via GitGitGadgetNext: Sangeeta NB
Message 2 of 36 in “diff: do not show submodule with untracked files as "-dirty"”
  1. diff: do not show submodule with untracked files as "-dirty"Sangeeta via GitGitGadget, Oct 15, 2020
  2. Phillip WoodOct 20, 2020
  3. Sangeeta NBOct 20, 2020
  4. Phillip WoodOct 21, 2020
  5. [Outreachy] [PATCH v2] diff: do not show submodule with untracked files as "-dirty"Sangeeta Jain, Oct 21, 2020
  6. Eric SunshineOct 21, 2020
  7. Sangeeta NBOct 21, 2020
  8. Eric SunshineOct 21, 2020
  9. [Outreachy] [PATCH v3] diff: do not show submodule with untracked files as "-dirty"Sangeeta Jain, Oct 22, 2020
  10. Junio C HamanoOct 22, 2020
  11. Sangeeta NBOct 23, 2020
  12. Junio C HamanoOct 23, 2020
  13. Sangeeta NBOct 23, 2020
  14. Junio C HamanoOct 23, 2020
  15. Sangeeta NBOct 23, 2020
  16. diff: do not show submodule with untracked files as "-dirty"Sangeeta Jain, Oct 23, 2020
  17. Junio C HamanoOct 23, 2020
  18. Sangeeta NBOct 23, 2020
  19. Junio C HamanoOct 23, 2020
  20. [Outreachy] [PATCH v4] diff: do not show submodule with untracked files as "-dirty"Sangeeta Jain, Oct 23, 2020
  21. Junio C HamanoOct 23, 2020
  22. Sangeeta NBOct 25, 2020
  23. Junio C HamanoOct 26, 2020
  24. [Outreachy] [PATCH v5] diff: do not show submodule with untracked files as "-dirty"Sangeeta Jain, Oct 23, 2020
  25. [Outreachy][PATCH v6] diff: do not show submodule with untracked files as "-dirty"Sangeeta Jain, Oct 26, 2020
  26. SangeetaNov 3, 2020
  27. Junio C HamanoNov 3, 2020
  28. SangeetaNov 7, 2020
  29. Junio C HamanoDec 8, 2020
  30. Đoàn Trần Công DanhNov 7, 2020
  31. SangeetaNov 9, 2020
  32. Junio C HamanoNov 9, 2020
  33. [Outreachy][PATCH v7] diff: do not show submodule with untracked files as "-dirty"Sangeeta Jain, Nov 10, 2020
  34. Đoàn Trần Công DanhNov 10, 2020
  35. SangeetaDec 8, 2020
  36. Junio C HamanoDec 8, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.