git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH 0/1] commit-graph: add --[no-]progress to write and verify
@ 2019-08-20 18:37 Garima Singh via GitGitGadget
  2019-08-20 18:37 ` [PATCH 1/1] " Garima Singh via GitGitGadget
                   ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Garima Singh via GitGitGadget @ 2019-08-20 18:37 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano

Hey Git contributors! 

My name is Garima Singh and I work at Microsoft. I recently started working
closely with the Microsoft team contributing to the git client ecosystem. I
am very glad to have the opportunity to work with this community. I am new
to the world of git client development but I did work on the Git service
offering of Azure Developer Services for a few years. I am sure I will get
to learn a lot from all of you. 

Dr. Derrick Stolee helped me pick out my first task (Thanks Stolee!) He
mentioned an issue in the commit-graph builtin where git did not support
opting in and out of the progress output. This was bloating up the stderr
logs in VFS for Git. The progress feature was introduced in 7b0f229222
("commit-graph write: add progress output", 2018-09-17) but the ability to
opt-out was overlooked. This patch adds the --no-progress option so that
callers can control the amount of logging they receive. 

Looking forward to your review. Cheers! Garima Singh

CC: stolee@gmail.com, avarab@gmail.com, garimasigit@gmail.com

Garima Singh (1):
  commit-graph: add --[no-]progress to write and verify.

 Documentation/git-commit-graph.txt |  4 +++-
 builtin/commit-graph.c             | 29 +++++++++++++++++-------
 commit-graph.c                     |  7 ++++--
 t/t5318-commit-graph.sh            | 36 ++++++++++++++++++++++++++++++
 t/t5324-split-commit-graph.sh      |  2 +-
 5 files changed, 66 insertions(+), 12 deletions(-)


base-commit: 5fa0f5238b0cd46cfe7f6fa76c3f526ea98148d9
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-315%2Fgarimasi514%2FcoreGit-commit-graph-progress-toggle-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-315/garimasi514/coreGit-commit-graph-progress-toggle-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/315
-- 
gitgitgadget

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH 1/1] commit-graph: add --[no-]progress to write and verify.
  2019-08-20 18:37 [PATCH 0/1] commit-graph: add --[no-]progress to write and verify Garima Singh via GitGitGadget
@ 2019-08-20 18:37 ` Garima Singh via GitGitGadget
  2019-08-20 21:11   ` Junio C Hamano
  2019-08-20 21:13   ` Eric Sunshine
  2019-08-20 18:45 ` [PATCH 0/1] " Derrick Stolee
  2019-08-26 16:29 ` [PATCH v2 " Garima Singh via GitGitGadget
  2 siblings, 2 replies; 13+ messages in thread
From: Garima Singh via GitGitGadget @ 2019-08-20 18:37 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Garima Singh

From: Garima Singh <garima.singh@microsoft.com>

Add --[no-]progress to git commit-graph write and verify.
The progress feature was introduced in 7b0f229
("commit-graph write: add progress output", 2018-09-17) but
the ability to opt-out was overlooked.

Signed-off-by: Garima Singh <garima.singh@microsoft.com>
---
 Documentation/git-commit-graph.txt |  4 +++-
 builtin/commit-graph.c             | 29 +++++++++++++++++-------
 commit-graph.c                     |  7 ++++--
 t/t5318-commit-graph.sh            | 36 ++++++++++++++++++++++++++++++
 t/t5324-split-commit-graph.sh      |  2 +-
 5 files changed, 66 insertions(+), 12 deletions(-)

diff --git a/Documentation/git-commit-graph.txt b/Documentation/git-commit-graph.txt
index eb5e7865f0..1256a80a81 100644
--- a/Documentation/git-commit-graph.txt
+++ b/Documentation/git-commit-graph.txt
@@ -10,7 +10,7 @@ SYNOPSIS
 --------
 [verse]
 'git commit-graph read' [--object-dir <dir>]
-'git commit-graph verify' [--object-dir <dir>] [--shallow]
+'git commit-graph verify' [--object-dir <dir>] [--shallow] [--[no-]progress]
 'git commit-graph write' <options> [--object-dir <dir>]
 
 
@@ -29,6 +29,8 @@ OPTIONS
 	commit-graph file is expected to be in the `<dir>/info` directory and
 	the packfiles are expected to be in `<dir>/pack`.
 
+--[no-]progress::
+	Toggle whether to show progress or not.
 
 COMMANDS
 --------
diff --git a/builtin/commit-graph.c b/builtin/commit-graph.c
index 38027b83d9..71796910fc 100644
--- a/builtin/commit-graph.c
+++ b/builtin/commit-graph.c
@@ -6,17 +6,18 @@
 #include "repository.h"
 #include "commit-graph.h"
 #include "object-store.h"
+#include "unistd.h"
 
 static char const * const builtin_commit_graph_usage[] = {
 	N_("git commit-graph [--object-dir <objdir>]"),
 	N_("git commit-graph read [--object-dir <objdir>]"),
-	N_("git commit-graph verify [--object-dir <objdir>] [--shallow]"),
-	N_("git commit-graph write [--object-dir <objdir>] [--append|--split] [--reachable|--stdin-packs|--stdin-commits] <split options>"),
+	N_("git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"),
+	N_("git commit-graph write [--object-dir <objdir>] [--append|--split] [--reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <split options>"),
 	NULL
 };
 
 static const char * const builtin_commit_graph_verify_usage[] = {
-	N_("git commit-graph verify [--object-dir <objdir>] [--shallow]"),
+	N_("git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"),
 	NULL
 };
 
@@ -26,7 +27,7 @@ static const char * const builtin_commit_graph_read_usage[] = {
 };
 
 static const char * const builtin_commit_graph_write_usage[] = {
-	N_("git commit-graph write [--object-dir <objdir>] [--append|--split] [--reachable|--stdin-packs|--stdin-commits] <split options>"),
+	N_("git commit-graph write [--object-dir <objdir>] [--append|--split] [--reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <split options>"),
 	NULL
 };
 
@@ -38,6 +39,7 @@ static struct opts_commit_graph {
 	int append;
 	int split;
 	int shallow;
+	int progress;
 } opts;
 
 static int graph_verify(int argc, const char **argv)
@@ -48,16 +50,20 @@ static int graph_verify(int argc, const char **argv)
 	int fd;
 	struct stat st;
 	int flags = 0;
-
+	int defaultProgressState = isatty(2);
+	
 	static struct option builtin_commit_graph_verify_options[] = {
 		OPT_STRING(0, "object-dir", &opts.obj_dir,
 			   N_("dir"),
 			   N_("The object directory to store the graph")),
 		OPT_BOOL(0, "shallow", &opts.shallow,
 			 N_("if the commit-graph is split, only verify the tip file")),
+		OPT_BOOL(0, "progress", &opts.progress, N_("force progress reporting")),
 		OPT_END(),
 	};
 
+	opts.progress = defaultProgressState;
+	
 	argc = parse_options(argc, argv, NULL,
 			     builtin_commit_graph_verify_options,
 			     builtin_commit_graph_verify_usage, 0);
@@ -66,7 +72,9 @@ static int graph_verify(int argc, const char **argv)
 		opts.obj_dir = get_object_directory();
 	if (opts.shallow)
 		flags |= COMMIT_GRAPH_VERIFY_SHALLOW;
-
+	if (opts.progress)
+		flags |= COMMIT_GRAPH_PROGRESS;
+	
 	graph_name = get_commit_graph_filename(opts.obj_dir);
 	open_ok = open_commit_graph(graph_name, &fd, &st);
 	if (!open_ok && errno != ENOENT)
@@ -154,8 +162,9 @@ static int graph_write(int argc, const char **argv)
 	struct string_list *commit_hex = NULL;
 	struct string_list lines;
 	int result = 0;
-	unsigned int flags = COMMIT_GRAPH_PROGRESS;
-
+	unsigned int flags = 0;
+	int defaultProgressState = isatty(2);
+	
 	static struct option builtin_commit_graph_write_options[] = {
 		OPT_STRING(0, "object-dir", &opts.obj_dir,
 			N_("dir"),
@@ -168,6 +177,7 @@ static int graph_write(int argc, const char **argv)
 			N_("start walk at commits listed by stdin")),
 		OPT_BOOL(0, "append", &opts.append,
 			N_("include all commits already in the commit-graph file")),
+		OPT_BOOL(0, "progress", &opts.progress, N_("force progress reporting")),
 		OPT_BOOL(0, "split", &opts.split,
 			N_("allow writing an incremental commit-graph file")),
 		OPT_INTEGER(0, "max-commits", &split_opts.max_commits,
@@ -179,6 +189,7 @@ static int graph_write(int argc, const char **argv)
 		OPT_END(),
 	};
 
+	opts.progress = defaultProgressState;
 	split_opts.size_multiple = 2;
 	split_opts.max_commits = 0;
 	split_opts.expire_time = 0;
@@ -195,6 +206,8 @@ static int graph_write(int argc, const char **argv)
 		flags |= COMMIT_GRAPH_APPEND;
 	if (opts.split)
 		flags |= COMMIT_GRAPH_SPLIT;
+	if (opts.progress)
+		flags |= COMMIT_GRAPH_PROGRESS;
 
 	read_replace_refs = 0;
 
diff --git a/commit-graph.c b/commit-graph.c
index fe954ab5f8..b10d47f99a 100644
--- a/commit-graph.c
+++ b/commit-graph.c
@@ -1986,14 +1986,17 @@ int verify_commit_graph(struct repository *r, struct commit_graph *g, int flags)
 	if (verify_commit_graph_error & ~VERIFY_COMMIT_GRAPH_ERROR_HASH)
 		return verify_commit_graph_error;
 
-	progress = start_progress(_("Verifying commits in commit graph"),
-				  g->num_commits);
+	if (flags & COMMIT_GRAPH_PROGRESS)
+		progress = start_progress(_("Verifying commits in commit graph"),
+					g->num_commits);
+
 	for (i = 0; i < g->num_commits; i++) {
 		struct commit *graph_commit, *odb_commit;
 		struct commit_list *graph_parents, *odb_parents;
 		uint32_t max_generation = 0;
 
 		display_progress(progress, i + 1);
+
 		hashcpy(cur_oid.hash, g->chunk_oid_lookup + g->hash_len * i);
 
 		graph_commit = lookup_commit(r, &cur_oid);
diff --git a/t/t5318-commit-graph.sh b/t/t5318-commit-graph.sh
index 22cb9d6643..a98d9f88f4 100755
--- a/t/t5318-commit-graph.sh
+++ b/t/t5318-commit-graph.sh
@@ -116,6 +116,42 @@ test_expect_success 'Add more commits' '
 	git repack
 '
 
+test_expect_success 'commit-graph write progress off by default for stderr' '
+	cd "$TRASH_DIRECTORY/full" &&
+	git commit-graph write 2>err &&
+	test_line_count = 0 err
+'
+
+test_expect_success 'commit-graph write force progress on for stderr' '
+	cd "$TRASH_DIRECTORY/full" &&
+	git commit-graph write --progress 2>err &&
+	test_file_not_empty err
+'
+
+test_expect_success 'commit-graph write with the --no-progress option' '
+	cd "$TRASH_DIRECTORY/full" &&
+	git commit-graph write --no-progress 2>err &&
+	test_line_count = 0 err
+'
+
+test_expect_success 'commit-graph verify progress off by default for stderr' '
+	cd "$TRASH_DIRECTORY/full" &&
+	git commit-graph verify 2>err &&
+	test_line_count = 0 err
+'
+
+test_expect_success 'commit-graph verify force progress on for stderr' '
+	cd "$TRASH_DIRECTORY/full" &&
+	git commit-graph verify --progress 2>err &&
+	test_file_not_empty err
+'
+
+test_expect_success 'commit-graph verify with the --no-progress option' '
+	cd "$TRASH_DIRECTORY/full" &&
+	git commit-graph verify --no-progress 2>err &&
+	test_line_count = 0 err
+'
+
 # Current graph structure:
 #
 #   __M3___
diff --git a/t/t5324-split-commit-graph.sh b/t/t5324-split-commit-graph.sh
index 99f4ef4c19..4fc3fda9d6 100755
--- a/t/t5324-split-commit-graph.sh
+++ b/t/t5324-split-commit-graph.sh
@@ -319,7 +319,7 @@ test_expect_success 'add octopus merge' '
 	git merge commits/3 commits/4 &&
 	git branch merge/octopus &&
 	git commit-graph write --reachable --split &&
-	git commit-graph verify 2>err &&
+	git commit-graph verify --progress 2>err &&
 	test_line_count = 3 err &&
 	test_i18ngrep ! warning err &&
 	test_line_count = 3 $graphdir/commit-graph-chain
-- 
gitgitgadget

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/1] commit-graph: add --[no-]progress to write and verify
  2019-08-20 18:37 [PATCH 0/1] commit-graph: add --[no-]progress to write and verify Garima Singh via GitGitGadget
  2019-08-20 18:37 ` [PATCH 1/1] " Garima Singh via GitGitGadget
@ 2019-08-20 18:45 ` Derrick Stolee
  2019-08-26 16:29 ` [PATCH v2 " Garima Singh via GitGitGadget
  2 siblings, 0 replies; 13+ messages in thread
From: Derrick Stolee @ 2019-08-20 18:45 UTC (permalink / raw)
  To: Garima Singh via GitGitGadget, git
  Cc: Junio C Hamano, Ævar Arnfjörð Bjarmason,
	garimasigit

On 8/20/2019 2:37 PM, Garima Singh via GitGitGadget wrote:
> Hey Git contributors! 
> 
> My name is Garima Singh and I work at Microsoft. I recently started working
> closely with the Microsoft team contributing to the git client ecosystem. I
> am very glad to have the opportunity to work with this community. I am new
> to the world of git client development but I did work on the Git service
> offering of Azure Developer Services for a few years. I am sure I will get
> to learn a lot from all of you. 

I just wanted to chime in and introduce Garima a bit myself. Garima and  I
were both on the Git Server team for Azure Repos and left that team around
the same time. She went and did things in Azure Pipelines before leaving to
pursue more education and returning to our current team working on the Git
ecosystem. Garima will be focused mostly on core Git, so get used to seeing
her on the list!

She's starting with a couple smaller series to get her feet wet, but then
is working on some deep dives into performance features. Look forward to
those!

> CC: stolee@gmail.com, avarab@gmail.com, garimasigit@gmail.com

GitGitGadget is picky about the casing of "Cc:" so I have CC'd these people.

Thanks,
-Stolee

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/1] commit-graph: add --[no-]progress to write and verify.
  2019-08-20 18:37 ` [PATCH 1/1] " Garima Singh via GitGitGadget
@ 2019-08-20 21:11   ` Junio C Hamano
  2019-08-20 21:13   ` Eric Sunshine
  1 sibling, 0 replies; 13+ messages in thread
From: Junio C Hamano @ 2019-08-20 21:11 UTC (permalink / raw)
  To: Garima Singh via GitGitGadget; +Cc: git, Garima Singh

"Garima Singh via GitGitGadget" <gitgitgadget@gmail.com> writes:

> From: Garima Singh <garima.singh@microsoft.com>
>
> Add --[no-]progress to git commit-graph write and verify.
> The progress feature was introduced in 7b0f229
> ("commit-graph write: add progress output", 2018-09-17) but
> the ability to opt-out was overlooked.

Nicely described.

> diff --git a/builtin/commit-graph.c b/builtin/commit-graph.c
> index 38027b83d9..71796910fc 100644
> --- a/builtin/commit-graph.c
> +++ b/builtin/commit-graph.c
> @@ -6,17 +6,18 @@
>  #include "repository.h"
>  #include "commit-graph.h"
>  #include "object-store.h"
> +#include "unistd.h"

Please do not contaminate *.c files with #include of system headers.

Often, various platforms require system include files in specific
order, and the project convention is to include them in
git-compat-util.h in the right order (with #ifdef and friends as
necessary).  *.c files are required to include git-compat-util.h (or
one of the well known headers that include git-compat-util.h as the
first one) as the first file.

In fact, "builtin.h" includes "git-compat-util.h" as the first
thing, and "git-compat-util.h" in turn includes unistd reasonably
early.  Do you really need to include it again here?

> @@ -48,16 +50,20 @@ static int graph_verify(int argc, const char **argv)
>  	int fd;
>  	struct stat st;
>  	int flags = 0;
> -
> +	int defaultProgressState = isatty(2);

As you can see from the naming of other variables, we do not do
camelCase variable names.

In fact you do not need this variable, do you?

>  	static struct option builtin_commit_graph_verify_options[] = {
>  		OPT_STRING(0, "object-dir", &opts.obj_dir,
>  			   N_("dir"),
>  			   N_("The object directory to store the graph")),
>  		OPT_BOOL(0, "shallow", &opts.shallow,
>  			 N_("if the commit-graph is split, only verify the tip file")),
> +		OPT_BOOL(0, "progress", &opts.progress, N_("force progress reporting")),
>  		OPT_END(),
>  	};
>  
> +	opts.progress = defaultProgressState;

... as you can assign isatty(2) to opts.progress here directly.

> @@ -154,8 +162,9 @@ static int graph_write(int argc, const char **argv)
>  	struct string_list *commit_hex = NULL;
>  	struct string_list lines;
>  	int result = 0;
> -	unsigned int flags = COMMIT_GRAPH_PROGRESS;
> -
> +	unsigned int flags = 0;
> +	int defaultProgressState = isatty(2);

Likewise.

> diff --git a/commit-graph.c b/commit-graph.c
> index fe954ab5f8..b10d47f99a 100644
> --- a/commit-graph.c
> +++ b/commit-graph.c
> @@ -1986,14 +1986,17 @@ int verify_commit_graph(struct repository *r, struct commit_graph *g, int flags)
>  	if (verify_commit_graph_error & ~VERIFY_COMMIT_GRAPH_ERROR_HASH)
>  		return verify_commit_graph_error;
>  
> -	progress = start_progress(_("Verifying commits in commit graph"),
> -				  g->num_commits);
> +	if (flags & COMMIT_GRAPH_PROGRESS)
> +		progress = start_progress(_("Verifying commits in commit graph"),
> +					g->num_commits);

Makes sense.

>  	for (i = 0; i < g->num_commits; i++) {
>  		struct commit *graph_commit, *odb_commit;
>  		struct commit_list *graph_parents, *odb_parents;
>  		uint32_t max_generation = 0;
>  
>  		display_progress(progress, i + 1);
> +
>  		hashcpy(cur_oid.hash, g->chunk_oid_lookup + g->hash_len * i);

Drop this change---I do not see a reason for the extra blank line here.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/1] commit-graph: add --[no-]progress to write and verify.
  2019-08-20 18:37 ` [PATCH 1/1] " Garima Singh via GitGitGadget
  2019-08-20 21:11   ` Junio C Hamano
@ 2019-08-20 21:13   ` Eric Sunshine
  2019-08-21 16:47     ` Junio C Hamano
  1 sibling, 1 reply; 13+ messages in thread
From: Eric Sunshine @ 2019-08-20 21:13 UTC (permalink / raw)
  To: Garima Singh via GitGitGadget; +Cc: Git List, Junio C Hamano, Garima Singh

On Tue, Aug 20, 2019 at 2:38 PM Garima Singh via GitGitGadget
<gitgitgadget@gmail.com> wrote:
> Add --[no-]progress to git commit-graph write and verify.
> The progress feature was introduced in 7b0f229
> ("commit-graph write: add progress output", 2018-09-17) but
> the ability to opt-out was overlooked.
>
> Signed-off-by: Garima Singh <garima.singh@microsoft.com>
> ---
> diff --git a/Documentation/git-commit-graph.txt b/Documentation/git-commit-graph.txt
> @@ -10,7 +10,7 @@ SYNOPSIS
>  'git commit-graph read' [--object-dir <dir>]
> -'git commit-graph verify' [--object-dir <dir>] [--shallow]
> +'git commit-graph verify' [--object-dir <dir>] [--shallow] [--[no-]progress]
>  'git commit-graph write' <options> [--object-dir <dir>]

This synopsis shows only 'verify' accepting --[no-]progress, however,
the "usage" message in commit-graph.c itself shows 'verify' and
'write' accepting the option.

> @@ -29,6 +29,8 @@ OPTIONS
> +--[no-]progress::
> +       Toggle whether to show progress or not.

This is misleading. The --progress option does not _toggle_ the
setting. The positive form explicitly enables it, and the negated form
explicitly disables it. Try to take inspiration for the wording of
this description by consulting other existing documentation. For
instance, from Documentation/merge-options.txt:

    Turn progress on/off explicitly. If neither is specified,
    progress is shown if standard error is connected to a terminal.

> diff --git a/builtin/commit-graph.c b/builtin/commit-graph.c
> @@ -6,17 +6,18 @@
>  static char const * const builtin_commit_graph_usage[] = {
> -       N_("git commit-graph verify [--object-dir <objdir>] [--shallow]"),
> -       N_("git commit-graph write [--object-dir <objdir>] [--append|--split] [--reachable|--stdin-packs|--stdin-commits] <split options>"),
> +       N_("git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"),
> +       N_("git commit-graph write [--object-dir <objdir>] [--append|--split] [--reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <split options>"),

This disagrees with the synopsis in the documentation, as mentioned above.

>  static int graph_verify(int argc, const char **argv)
> @@ -48,16 +50,20 @@ static int graph_verify(int argc, const char **argv)
>         int fd;
>         struct stat st;
>         int flags = 0;
> -
> +       int defaultProgressState = isatty(2);
> +

You have stray whitespace at the end of the "blank" line following the
new variable declaration, hence the odd-looking diff.

> @@ -154,8 +162,9 @@ static int graph_write(int argc, const char **argv)
> -       unsigned int flags = COMMIT_GRAPH_PROGRESS;
> -
> +       unsigned int flags = 0;
> +       int defaultProgressState = isatty(2);
> +

Ditto.

> diff --git a/commit-graph.c b/commit-graph.c
> @@ -1986,14 +1986,17 @@ int verify_commit_graph(struct repository *r, struct commit_graph *g, int flags)
>         if (verify_commit_graph_error & ~VERIFY_COMMIT_GRAPH_ERROR_HASH)
>                 return verify_commit_graph_error;
>
> -       progress = start_progress(_("Verifying commits in commit graph"),
> -                                 g->num_commits);
> +       if (flags & COMMIT_GRAPH_PROGRESS)
> +               progress = start_progress(_("Verifying commits in commit graph"),
> +                                       g->num_commits);

The progress reporting functions can safely handle a NULL pointer for
'progress'. In the original code 'progress' was assigned explicitly,
thus could not be NULL, However, in the revised code, it's not clear
from this snippet what the value of 'progress' is if
COMMIT_GRAPH_PROGRESS is not in 'flags'. If 'progress' is
uninitialized, then the behavior would be undefined. Looking at the
variable declaration, I see that it is indeed initialized to NULL, so
this code is safe. Okay.

>         for (i = 0; i < g->num_commits; i++) {
>                 struct commit *graph_commit, *odb_commit;
>                 struct commit_list *graph_parents, *odb_parents;
>                 uint32_t max_generation = 0;
>
>                 display_progress(progress, i + 1);
> +
>                 hashcpy(cur_oid.hash, g->chunk_oid_lookup + g->hash_len * i);

No need to make changes (such as inserting an unnecessary blank line)
unrelated to the stated purposed of the patch.

> diff --git a/t/t5318-commit-graph.sh b/t/t5318-commit-graph.sh
> @@ -116,6 +116,42 @@ test_expect_success 'Add more commits' '
> +test_expect_success 'commit-graph write progress off by default for stderr' '
> +       cd "$TRASH_DIRECTORY/full" &&
> +       git commit-graph write 2>err &&
> +       test_line_count = 0 err
> +'

Changing the working directory ('cd') outside of a subshell is heavily
discouraged in this test suite, however, since this particular script
is riddled with the 'cd "$TRASH_DIRECTORY/full"' idiom, this can
probably pass, however, it's not good to get into the habit of doing
it this way.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/1] commit-graph: add --[no-]progress to write and verify.
  2019-08-20 21:13   ` Eric Sunshine
@ 2019-08-21 16:47     ` Junio C Hamano
  0 siblings, 0 replies; 13+ messages in thread
From: Junio C Hamano @ 2019-08-21 16:47 UTC (permalink / raw)
  To: Eric Sunshine; +Cc: Garima Singh via GitGitGadget, Git List, Garima Singh

Eric Sunshine <sunshine@sunshineco.com> writes:

> This synopsis shows only 'verify' accepting --[no-]progress,
> however, ...
> This is misleading. The --progress option does not _toggle_ the
> setting. ...

Thanks for a careful review.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2 0/1] commit-graph: add --[no-]progress to write and verify
  2019-08-20 18:37 [PATCH 0/1] commit-graph: add --[no-]progress to write and verify Garima Singh via GitGitGadget
  2019-08-20 18:37 ` [PATCH 1/1] " Garima Singh via GitGitGadget
  2019-08-20 18:45 ` [PATCH 0/1] " Derrick Stolee
@ 2019-08-26 16:29 ` Garima Singh via GitGitGadget
  2019-08-26 16:29   ` [PATCH v2 1/1] " Garima Singh via GitGitGadget
  2019-09-10 14:00   ` [PATCH v2 0/1] " Garima Singh
  2 siblings, 2 replies; 13+ messages in thread
From: Garima Singh via GitGitGadget @ 2019-08-26 16:29 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano

Hey Git contributors! 

My name is Garima Singh and I work at Microsoft. I recently started working
closely with the Microsoft team contributing to the git client ecosystem. I
am very glad to have the opportunity to work with this community. I am new
to the world of git client development but I did work on the Git service
offering of Azure Developer Services for a few years. I am sure I will get
to learn a lot from all of you. 

Dr. Derrick Stolee helped me pick out my first task (Thanks Stolee!) He
mentioned an issue in the commit-graph builtin where git did not support
opting in and out of the progress output. This was bloating up the stderr
logs in VFS for Git. The progress feature was introduced in 7b0f229222
("commit-graph write: add progress output", 2018-09-17) but the ability to
opt-out was overlooked. This patch adds the --no-progress option so that
callers can control the amount of logging they receive. 

Looking forward to your review. Cheers! Garima Singh

CC: stolee@gmail.com, avarab@gmail.com, garimasigit@gmail.com

Garima Singh (1):
  commit-graph: add --[no-]progress to write and verify.

 Documentation/git-commit-graph.txt |  7 ++++--
 builtin/commit-graph.c             | 21 ++++++++++++-----
 commit-graph.c                     |  6 +++--
 t/t5318-commit-graph.sh            | 36 ++++++++++++++++++++++++++++++
 t/t5324-split-commit-graph.sh      |  2 +-
 5 files changed, 61 insertions(+), 11 deletions(-)


base-commit: 745f6812895b31c02b29bdfe4ae8e5498f776c26
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-315%2Fgarimasi514%2FcoreGit-commit-graph-progress-toggle-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-315/garimasi514/coreGit-commit-graph-progress-toggle-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/315

Range-diff vs v1:

 1:  da89f7dadb ! 1:  47cc99bd15 commit-graph: add --[no-]progress to write and verify.
     @@ -17,16 +17,19 @@
       [verse]
       'git commit-graph read' [--object-dir <dir>]
      -'git commit-graph verify' [--object-dir <dir>] [--shallow]
     +-'git commit-graph write' <options> [--object-dir <dir>]
      +'git commit-graph verify' [--object-dir <dir>] [--shallow] [--[no-]progress]
     - 'git commit-graph write' <options> [--object-dir <dir>]
     ++'git commit-graph write' <options> [--object-dir <dir>] [--[no-]progress]
       
       
     + DESCRIPTION
      @@
       	commit-graph file is expected to be in the `<dir>/info` directory and
       	the packfiles are expected to be in `<dir>/pack`.
       
      +--[no-]progress::
     -+	Toggle whether to show progress or not.
     ++	Turn progress on/off explicitly. If neither is specified, progress is 
     ++	shown if standard error is connected to a terminal.
       
       COMMANDS
       --------
     @@ -35,11 +38,6 @@
       --- a/builtin/commit-graph.c
       +++ b/builtin/commit-graph.c
      @@
     - #include "repository.h"
     - #include "commit-graph.h"
     - #include "object-store.h"
     -+#include "unistd.h"
     - 
       static char const * const builtin_commit_graph_usage[] = {
       	N_("git commit-graph [--object-dir <objdir>]"),
       	N_("git commit-graph read [--object-dir <objdir>]"),
     @@ -74,15 +72,6 @@
       
       static int graph_verify(int argc, const char **argv)
      @@
     - 	int fd;
     - 	struct stat st;
     - 	int flags = 0;
     --
     -+	int defaultProgressState = isatty(2);
     -+	
     - 	static struct option builtin_commit_graph_verify_options[] = {
     - 		OPT_STRING(0, "object-dir", &opts.obj_dir,
     - 			   N_("dir"),
       			   N_("The object directory to store the graph")),
       		OPT_BOOL(0, "shallow", &opts.shallow,
       			 N_("if the commit-graph is split, only verify the tip file")),
     @@ -90,8 +79,7 @@
       		OPT_END(),
       	};
       
     -+	opts.progress = defaultProgressState;
     -+	
     ++	opts.progress = isatty(2);
       	argc = parse_options(argc, argv, NULL,
       			     builtin_commit_graph_verify_options,
       			     builtin_commit_graph_verify_usage, 0);
     @@ -101,7 +89,7 @@
       		flags |= COMMIT_GRAPH_VERIFY_SHALLOW;
      -
      +	if (opts.progress)
     -+		flags |= COMMIT_GRAPH_PROGRESS;
     ++		flags |= COMMIT_GRAPH_WRITE_PROGRESS;
      +	
       	graph_name = get_commit_graph_filename(opts.obj_dir);
       	open_ok = open_commit_graph(graph_name, &fd, &st);
     @@ -110,14 +98,11 @@
       	struct string_list *commit_hex = NULL;
       	struct string_list lines;
       	int result = 0;
     --	unsigned int flags = COMMIT_GRAPH_PROGRESS;
     --
     -+	unsigned int flags = 0;
     -+	int defaultProgressState = isatty(2);
     -+	
     +-	enum commit_graph_write_flags flags = COMMIT_GRAPH_WRITE_PROGRESS;
     ++	enum commit_graph_write_flags flags = 0;
     + 
       	static struct option builtin_commit_graph_write_options[] = {
       		OPT_STRING(0, "object-dir", &opts.obj_dir,
     - 			N_("dir"),
      @@
       			N_("start walk at commits listed by stdin")),
       		OPT_BOOL(0, "append", &opts.append,
     @@ -130,16 +115,16 @@
       		OPT_END(),
       	};
       
     -+	opts.progress = defaultProgressState;
     ++	opts.progress = isatty(2);
       	split_opts.size_multiple = 2;
       	split_opts.max_commits = 0;
       	split_opts.expire_time = 0;
      @@
     - 		flags |= COMMIT_GRAPH_APPEND;
     + 		flags |= COMMIT_GRAPH_WRITE_APPEND;
       	if (opts.split)
     - 		flags |= COMMIT_GRAPH_SPLIT;
     + 		flags |= COMMIT_GRAPH_WRITE_SPLIT;
      +	if (opts.progress)
     -+		flags |= COMMIT_GRAPH_PROGRESS;
     ++		flags |= COMMIT_GRAPH_WRITE_PROGRESS;
       
       	read_replace_refs = 0;
       
     @@ -153,20 +138,13 @@
       
      -	progress = start_progress(_("Verifying commits in commit graph"),
      -				  g->num_commits);
     -+	if (flags & COMMIT_GRAPH_PROGRESS)
     ++	if (flags & COMMIT_GRAPH_WRITE_PROGRESS)
      +		progress = start_progress(_("Verifying commits in commit graph"),
      +					g->num_commits);
      +
       	for (i = 0; i < g->num_commits; i++) {
       		struct commit *graph_commit, *odb_commit;
       		struct commit_list *graph_parents, *odb_parents;
     - 		uint32_t max_generation = 0;
     - 
     - 		display_progress(progress, i + 1);
     -+
     - 		hashcpy(cur_oid.hash, g->chunk_oid_lookup + g->hash_len * i);
     - 
     - 		graph_commit = lookup_commit(r, &cur_oid);
      
       diff --git a/t/t5318-commit-graph.sh b/t/t5318-commit-graph.sh
       --- a/t/t5318-commit-graph.sh
     @@ -175,7 +153,7 @@
       	git repack
       '
       
     -+test_expect_success 'commit-graph write progress off by default for stderr' '
     ++test_expect_success 'commit-graph write progress off for redirected stderr' '
      +	cd "$TRASH_DIRECTORY/full" &&
      +	git commit-graph write 2>err &&
      +	test_line_count = 0 err
     @@ -193,7 +171,7 @@
      +	test_line_count = 0 err
      +'
      +
     -+test_expect_success 'commit-graph verify progress off by default for stderr' '
     ++test_expect_success 'commit-graph verify progress off for redirected stderr' '
      +	cd "$TRASH_DIRECTORY/full" &&
      +	git commit-graph verify 2>err &&
      +	test_line_count = 0 err

-- 
gitgitgadget

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2 1/1] commit-graph: add --[no-]progress to write and verify.
  2019-08-26 16:29 ` [PATCH v2 " Garima Singh via GitGitGadget
@ 2019-08-26 16:29   ` Garima Singh via GitGitGadget
  2019-09-12 20:40     ` Junio C Hamano
  2019-09-16 22:36     ` SZEDER Gábor
  2019-09-10 14:00   ` [PATCH v2 0/1] " Garima Singh
  1 sibling, 2 replies; 13+ messages in thread
From: Garima Singh via GitGitGadget @ 2019-08-26 16:29 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Garima Singh

From: Garima Singh <garima.singh@microsoft.com>

Add --[no-]progress to git commit-graph write and verify.
The progress feature was introduced in 7b0f229
("commit-graph write: add progress output", 2018-09-17) but
the ability to opt-out was overlooked.

Signed-off-by: Garima Singh <garima.singh@microsoft.com>
---
 Documentation/git-commit-graph.txt |  7 ++++--
 builtin/commit-graph.c             | 21 ++++++++++++-----
 commit-graph.c                     |  6 +++--
 t/t5318-commit-graph.sh            | 36 ++++++++++++++++++++++++++++++
 t/t5324-split-commit-graph.sh      |  2 +-
 5 files changed, 61 insertions(+), 11 deletions(-)

diff --git a/Documentation/git-commit-graph.txt b/Documentation/git-commit-graph.txt
index eb5e7865f0..ca0b1a683f 100644
--- a/Documentation/git-commit-graph.txt
+++ b/Documentation/git-commit-graph.txt
@@ -10,8 +10,8 @@ SYNOPSIS
 --------
 [verse]
 'git commit-graph read' [--object-dir <dir>]
-'git commit-graph verify' [--object-dir <dir>] [--shallow]
-'git commit-graph write' <options> [--object-dir <dir>]
+'git commit-graph verify' [--object-dir <dir>] [--shallow] [--[no-]progress]
+'git commit-graph write' <options> [--object-dir <dir>] [--[no-]progress]
 
 
 DESCRIPTION
@@ -29,6 +29,9 @@ OPTIONS
 	commit-graph file is expected to be in the `<dir>/info` directory and
 	the packfiles are expected to be in `<dir>/pack`.
 
+--[no-]progress::
+	Turn progress on/off explicitly. If neither is specified, progress is 
+	shown if standard error is connected to a terminal.
 
 COMMANDS
 --------
diff --git a/builtin/commit-graph.c b/builtin/commit-graph.c
index 57863619b7..faf349a6c1 100644
--- a/builtin/commit-graph.c
+++ b/builtin/commit-graph.c
@@ -10,13 +10,13 @@
 static char const * const builtin_commit_graph_usage[] = {
 	N_("git commit-graph [--object-dir <objdir>]"),
 	N_("git commit-graph read [--object-dir <objdir>]"),
-	N_("git commit-graph verify [--object-dir <objdir>] [--shallow]"),
-	N_("git commit-graph write [--object-dir <objdir>] [--append|--split] [--reachable|--stdin-packs|--stdin-commits] <split options>"),
+	N_("git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"),
+	N_("git commit-graph write [--object-dir <objdir>] [--append|--split] [--reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <split options>"),
 	NULL
 };
 
 static const char * const builtin_commit_graph_verify_usage[] = {
-	N_("git commit-graph verify [--object-dir <objdir>] [--shallow]"),
+	N_("git commit-graph verify [--object-dir <objdir>] [--shallow] [--[no-]progress]"),
 	NULL
 };
 
@@ -26,7 +26,7 @@ static const char * const builtin_commit_graph_read_usage[] = {
 };
 
 static const char * const builtin_commit_graph_write_usage[] = {
-	N_("git commit-graph write [--object-dir <objdir>] [--append|--split] [--reachable|--stdin-packs|--stdin-commits] <split options>"),
+	N_("git commit-graph write [--object-dir <objdir>] [--append|--split] [--reachable|--stdin-packs|--stdin-commits] [--[no-]progress] <split options>"),
 	NULL
 };
 
@@ -38,6 +38,7 @@ static struct opts_commit_graph {
 	int append;
 	int split;
 	int shallow;
+	int progress;
 } opts;
 
 static int graph_verify(int argc, const char **argv)
@@ -55,9 +56,11 @@ static int graph_verify(int argc, const char **argv)
 			   N_("The object directory to store the graph")),
 		OPT_BOOL(0, "shallow", &opts.shallow,
 			 N_("if the commit-graph is split, only verify the tip file")),
+		OPT_BOOL(0, "progress", &opts.progress, N_("force progress reporting")),
 		OPT_END(),
 	};
 
+	opts.progress = isatty(2);
 	argc = parse_options(argc, argv, NULL,
 			     builtin_commit_graph_verify_options,
 			     builtin_commit_graph_verify_usage, 0);
@@ -66,7 +69,9 @@ static int graph_verify(int argc, const char **argv)
 		opts.obj_dir = get_object_directory();
 	if (opts.shallow)
 		flags |= COMMIT_GRAPH_VERIFY_SHALLOW;
-
+	if (opts.progress)
+		flags |= COMMIT_GRAPH_WRITE_PROGRESS;
+	
 	graph_name = get_commit_graph_filename(opts.obj_dir);
 	open_ok = open_commit_graph(graph_name, &fd, &st);
 	if (!open_ok && errno != ENOENT)
@@ -154,7 +159,7 @@ static int graph_write(int argc, const char **argv)
 	struct string_list *commit_hex = NULL;
 	struct string_list lines;
 	int result = 0;
-	enum commit_graph_write_flags flags = COMMIT_GRAPH_WRITE_PROGRESS;
+	enum commit_graph_write_flags flags = 0;
 
 	static struct option builtin_commit_graph_write_options[] = {
 		OPT_STRING(0, "object-dir", &opts.obj_dir,
@@ -168,6 +173,7 @@ static int graph_write(int argc, const char **argv)
 			N_("start walk at commits listed by stdin")),
 		OPT_BOOL(0, "append", &opts.append,
 			N_("include all commits already in the commit-graph file")),
+		OPT_BOOL(0, "progress", &opts.progress, N_("force progress reporting")),
 		OPT_BOOL(0, "split", &opts.split,
 			N_("allow writing an incremental commit-graph file")),
 		OPT_INTEGER(0, "max-commits", &split_opts.max_commits,
@@ -179,6 +185,7 @@ static int graph_write(int argc, const char **argv)
 		OPT_END(),
 	};
 
+	opts.progress = isatty(2);
 	split_opts.size_multiple = 2;
 	split_opts.max_commits = 0;
 	split_opts.expire_time = 0;
@@ -195,6 +202,8 @@ static int graph_write(int argc, const char **argv)
 		flags |= COMMIT_GRAPH_WRITE_APPEND;
 	if (opts.split)
 		flags |= COMMIT_GRAPH_WRITE_SPLIT;
+	if (opts.progress)
+		flags |= COMMIT_GRAPH_WRITE_PROGRESS;
 
 	read_replace_refs = 0;
 
diff --git a/commit-graph.c b/commit-graph.c
index f2888c203b..2802f2ade6 100644
--- a/commit-graph.c
+++ b/commit-graph.c
@@ -1992,8 +1992,10 @@ int verify_commit_graph(struct repository *r, struct commit_graph *g, int flags)
 	if (verify_commit_graph_error & ~VERIFY_COMMIT_GRAPH_ERROR_HASH)
 		return verify_commit_graph_error;
 
-	progress = start_progress(_("Verifying commits in commit graph"),
-				  g->num_commits);
+	if (flags & COMMIT_GRAPH_WRITE_PROGRESS)
+		progress = start_progress(_("Verifying commits in commit graph"),
+					g->num_commits);
+
 	for (i = 0; i < g->num_commits; i++) {
 		struct commit *graph_commit, *odb_commit;
 		struct commit_list *graph_parents, *odb_parents;
diff --git a/t/t5318-commit-graph.sh b/t/t5318-commit-graph.sh
index ab3eccf0fa..df3fed3a08 100755
--- a/t/t5318-commit-graph.sh
+++ b/t/t5318-commit-graph.sh
@@ -124,6 +124,42 @@ test_expect_success 'Add more commits' '
 	git repack
 '
 
+test_expect_success 'commit-graph write progress off for redirected stderr' '
+	cd "$TRASH_DIRECTORY/full" &&
+	git commit-graph write 2>err &&
+	test_line_count = 0 err
+'
+
+test_expect_success 'commit-graph write force progress on for stderr' '
+	cd "$TRASH_DIRECTORY/full" &&
+	git commit-graph write --progress 2>err &&
+	test_file_not_empty err
+'
+
+test_expect_success 'commit-graph write with the --no-progress option' '
+	cd "$TRASH_DIRECTORY/full" &&
+	git commit-graph write --no-progress 2>err &&
+	test_line_count = 0 err
+'
+
+test_expect_success 'commit-graph verify progress off for redirected stderr' '
+	cd "$TRASH_DIRECTORY/full" &&
+	git commit-graph verify 2>err &&
+	test_line_count = 0 err
+'
+
+test_expect_success 'commit-graph verify force progress on for stderr' '
+	cd "$TRASH_DIRECTORY/full" &&
+	git commit-graph verify --progress 2>err &&
+	test_file_not_empty err
+'
+
+test_expect_success 'commit-graph verify with the --no-progress option' '
+	cd "$TRASH_DIRECTORY/full" &&
+	git commit-graph verify --no-progress 2>err &&
+	test_line_count = 0 err
+'
+
 # Current graph structure:
 #
 #   __M3___
diff --git a/t/t5324-split-commit-graph.sh b/t/t5324-split-commit-graph.sh
index 99f4ef4c19..4fc3fda9d6 100755
--- a/t/t5324-split-commit-graph.sh
+++ b/t/t5324-split-commit-graph.sh
@@ -319,7 +319,7 @@ test_expect_success 'add octopus merge' '
 	git merge commits/3 commits/4 &&
 	git branch merge/octopus &&
 	git commit-graph write --reachable --split &&
-	git commit-graph verify 2>err &&
+	git commit-graph verify --progress 2>err &&
 	test_line_count = 3 err &&
 	test_i18ngrep ! warning err &&
 	test_line_count = 3 $graphdir/commit-graph-chain
-- 
gitgitgadget

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 0/1] commit-graph: add --[no-]progress to write and verify
  2019-08-26 16:29 ` [PATCH v2 " Garima Singh via GitGitGadget
  2019-08-26 16:29   ` [PATCH v2 1/1] " Garima Singh via GitGitGadget
@ 2019-09-10 14:00   ` Garima Singh
  1 sibling, 0 replies; 13+ messages in thread
From: Garima Singh @ 2019-09-10 14:00 UTC (permalink / raw)
  To: Garima Singh via GitGitGadget, git; +Cc: Junio C Hamano

Ping :) Any more comments or concerns about this?

On 8/26/2019 12:29 PM, Garima Singh via GitGitGadget wrote:
> Hey Git contributors!
> 
> My name is Garima Singh and I work at Microsoft. I recently started working
> closely with the Microsoft team contributing to the git client ecosystem. I
> am very glad to have the opportunity to work with this community. I am new
> to the world of git client development but I did work on the Git service
> offering of Azure Developer Services for a few years. I am sure I will get
> to learn a lot from all of you.
> 
> Dr. Derrick Stolee helped me pick out my first task (Thanks Stolee!) He
> mentioned an issue in the commit-graph builtin where git did not support
> opting in and out of the progress output. This was bloating up the stderr
> logs in VFS for Git. The progress feature was introduced in 7b0f229222
> ("commit-graph write: add progress output", 2018-09-17) but the ability to
> opt-out was overlooked. This patch adds the --no-progress option so that
> callers can control the amount of logging they receive.
> 
> Looking forward to your review. Cheers! Garima Singh
> 
> CC: stolee@gmail.com, avarab@gmail.com, garimasigit@gmail.com
> 
> Garima Singh (1):
>    commit-graph: add --[no-]progress to write and verify.
> 
>   Documentation/git-commit-graph.txt |  7 ++++--
>   builtin/commit-graph.c             | 21 ++++++++++++-----
>   commit-graph.c                     |  6 +++--
>   t/t5318-commit-graph.sh            | 36 ++++++++++++++++++++++++++++++
>   t/t5324-split-commit-graph.sh      |  2 +-
>   5 files changed, 61 insertions(+), 11 deletions(-)
> 
> 
> base-commit: 745f6812895b31c02b29bdfe4ae8e5498f776c26
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-315%2Fgarimasi514%2FcoreGit-commit-graph-progress-toggle-v2
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-315/garimasi514/coreGit-commit-graph-progress-toggle-v2
> Pull-Request: https://github.com/gitgitgadget/git/pull/315
> 
> Range-diff vs v1:
> 
>   1:  da89f7dadb ! 1:  47cc99bd15 commit-graph: add --[no-]progress to write and verify.
>       @@ -17,16 +17,19 @@
>         [verse]
>         'git commit-graph read' [--object-dir <dir>]
>        -'git commit-graph verify' [--object-dir <dir>] [--shallow]
>       +-'git commit-graph write' <options> [--object-dir <dir>]
>        +'git commit-graph verify' [--object-dir <dir>] [--shallow] [--[no-]progress]
>       - 'git commit-graph write' <options> [--object-dir <dir>]
>       ++'git commit-graph write' <options> [--object-dir <dir>] [--[no-]progress]
>         
>         
>       + DESCRIPTION
>        @@
>         	commit-graph file is expected to be in the `<dir>/info` directory and
>         	the packfiles are expected to be in `<dir>/pack`.
>         
>        +--[no-]progress::
>       -+	Toggle whether to show progress or not.
>       ++	Turn progress on/off explicitly. If neither is specified, progress is
>       ++	shown if standard error is connected to a terminal.
>         
>         COMMANDS
>         --------
>       @@ -35,11 +38,6 @@
>         --- a/builtin/commit-graph.c
>         +++ b/builtin/commit-graph.c
>        @@
>       - #include "repository.h"
>       - #include "commit-graph.h"
>       - #include "object-store.h"
>       -+#include "unistd.h"
>       -
>         static char const * const builtin_commit_graph_usage[] = {
>         	N_("git commit-graph [--object-dir <objdir>]"),
>         	N_("git commit-graph read [--object-dir <objdir>]"),
>       @@ -74,15 +72,6 @@
>         
>         static int graph_verify(int argc, const char **argv)
>        @@
>       - 	int fd;
>       - 	struct stat st;
>       - 	int flags = 0;
>       --
>       -+	int defaultProgressState = isatty(2);
>       -+	
>       - 	static struct option builtin_commit_graph_verify_options[] = {
>       - 		OPT_STRING(0, "object-dir", &opts.obj_dir,
>       - 			   N_("dir"),
>         			   N_("The object directory to store the graph")),
>         		OPT_BOOL(0, "shallow", &opts.shallow,
>         			 N_("if the commit-graph is split, only verify the tip file")),
>       @@ -90,8 +79,7 @@
>         		OPT_END(),
>         	};
>         
>       -+	opts.progress = defaultProgressState;
>       -+	
>       ++	opts.progress = isatty(2);
>         	argc = parse_options(argc, argv, NULL,
>         			     builtin_commit_graph_verify_options,
>         			     builtin_commit_graph_verify_usage, 0);
>       @@ -101,7 +89,7 @@
>         		flags |= COMMIT_GRAPH_VERIFY_SHALLOW;
>        -
>        +	if (opts.progress)
>       -+		flags |= COMMIT_GRAPH_PROGRESS;
>       ++		flags |= COMMIT_GRAPH_WRITE_PROGRESS;
>        +	
>         	graph_name = get_commit_graph_filename(opts.obj_dir);
>         	open_ok = open_commit_graph(graph_name, &fd, &st);
>       @@ -110,14 +98,11 @@
>         	struct string_list *commit_hex = NULL;
>         	struct string_list lines;
>         	int result = 0;
>       --	unsigned int flags = COMMIT_GRAPH_PROGRESS;
>       --
>       -+	unsigned int flags = 0;
>       -+	int defaultProgressState = isatty(2);
>       -+	
>       +-	enum commit_graph_write_flags flags = COMMIT_GRAPH_WRITE_PROGRESS;
>       ++	enum commit_graph_write_flags flags = 0;
>       +
>         	static struct option builtin_commit_graph_write_options[] = {
>         		OPT_STRING(0, "object-dir", &opts.obj_dir,
>       - 			N_("dir"),
>        @@
>         			N_("start walk at commits listed by stdin")),
>         		OPT_BOOL(0, "append", &opts.append,
>       @@ -130,16 +115,16 @@
>         		OPT_END(),
>         	};
>         
>       -+	opts.progress = defaultProgressState;
>       ++	opts.progress = isatty(2);
>         	split_opts.size_multiple = 2;
>         	split_opts.max_commits = 0;
>         	split_opts.expire_time = 0;
>        @@
>       - 		flags |= COMMIT_GRAPH_APPEND;
>       + 		flags |= COMMIT_GRAPH_WRITE_APPEND;
>         	if (opts.split)
>       - 		flags |= COMMIT_GRAPH_SPLIT;
>       + 		flags |= COMMIT_GRAPH_WRITE_SPLIT;
>        +	if (opts.progress)
>       -+		flags |= COMMIT_GRAPH_PROGRESS;
>       ++		flags |= COMMIT_GRAPH_WRITE_PROGRESS;
>         
>         	read_replace_refs = 0;
>         
>       @@ -153,20 +138,13 @@
>         
>        -	progress = start_progress(_("Verifying commits in commit graph"),
>        -				  g->num_commits);
>       -+	if (flags & COMMIT_GRAPH_PROGRESS)
>       ++	if (flags & COMMIT_GRAPH_WRITE_PROGRESS)
>        +		progress = start_progress(_("Verifying commits in commit graph"),
>        +					g->num_commits);
>        +
>         	for (i = 0; i < g->num_commits; i++) {
>         		struct commit *graph_commit, *odb_commit;
>         		struct commit_list *graph_parents, *odb_parents;
>       - 		uint32_t max_generation = 0;
>       -
>       - 		display_progress(progress, i + 1);
>       -+
>       - 		hashcpy(cur_oid.hash, g->chunk_oid_lookup + g->hash_len * i);
>       -
>       - 		graph_commit = lookup_commit(r, &cur_oid);
>        
>         diff --git a/t/t5318-commit-graph.sh b/t/t5318-commit-graph.sh
>         --- a/t/t5318-commit-graph.sh
>       @@ -175,7 +153,7 @@
>         	git repack
>         '
>         
>       -+test_expect_success 'commit-graph write progress off by default for stderr' '
>       ++test_expect_success 'commit-graph write progress off for redirected stderr' '
>        +	cd "$TRASH_DIRECTORY/full" &&
>        +	git commit-graph write 2>err &&
>        +	test_line_count = 0 err
>       @@ -193,7 +171,7 @@
>        +	test_line_count = 0 err
>        +'
>        +
>       -+test_expect_success 'commit-graph verify progress off by default for stderr' '
>       ++test_expect_success 'commit-graph verify progress off for redirected stderr' '
>        +	cd "$TRASH_DIRECTORY/full" &&
>        +	git commit-graph verify 2>err &&
>        +	test_line_count = 0 err
> 

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 1/1] commit-graph: add --[no-]progress to write and verify.
  2019-08-26 16:29   ` [PATCH v2 1/1] " Garima Singh via GitGitGadget
@ 2019-09-12 20:40     ` Junio C Hamano
  2019-09-16 22:36     ` SZEDER Gábor
  1 sibling, 0 replies; 13+ messages in thread
From: Junio C Hamano @ 2019-09-12 20:40 UTC (permalink / raw)
  To: Garima Singh via GitGitGadget; +Cc: git, Garima Singh

"Garima Singh via GitGitGadget" <gitgitgadget@gmail.com> writes:

> diff --git a/Documentation/git-commit-graph.txt b/Documentation/git-commit-graph.txt
> index eb5e7865f0..ca0b1a683f 100644
> --- a/Documentation/git-commit-graph.txt
> +++ b/Documentation/git-commit-graph.txt
> @@ -10,8 +10,8 @@ SYNOPSIS
>  --------
>  [verse]
>  'git commit-graph read' [--object-dir <dir>]
> -'git commit-graph verify' [--object-dir <dir>] [--shallow]
> -'git commit-graph write' <options> [--object-dir <dir>]
> +'git commit-graph verify' [--object-dir <dir>] [--shallow] [--[no-]progress]
> +'git commit-graph write' <options> [--object-dir <dir>] [--[no-]progress]

This is not a problem with this patch, but it is disturbing to see
<options> and other concrete "--option" listed explicitly.  It could
be that "--object-dir <dir>" is so important an option that deserves
to be singled out while other random options can be left to individual
option's description, but in that case, would "--progress" be equally
important (if anything, as an option that is purely about appearance,
I would expect it to be with a lot lower importance)?

I guess with a preparatory clean-up patch to deal with the <options>
part, the result of applying this patch would not look so bad.
Perhaps renaming <options> to <write-specific-options> and moving it
to the end of the line might be sufficient.  I dunno.  At least we'd
need to make sure that it is clear to readers what options are
allowed where we wrote <options> above.

> @@ -29,6 +29,9 @@ OPTIONS
>  	commit-graph file is expected to be in the `<dir>/info` directory and
>  	the packfiles are expected to be in `<dir>/pack`.
>  
> +--[no-]progress::
> +	Turn progress on/off explicitly. If neither is specified, progress is 

Trailing whitespace.

> +	shown if standard error is connected to a terminal.
>   ...
> +	if (opts.progress)
> +		flags |= COMMIT_GRAPH_WRITE_PROGRESS;
> +	

Trailing whitespace.

> diff --git a/commit-graph.c b/commit-graph.c
> index f2888c203b..2802f2ade6 100644
> --- a/commit-graph.c
> +++ b/commit-graph.c
> @@ -1992,8 +1992,10 @@ int verify_commit_graph(struct repository *r, struct commit_graph *g, int flags)
>  	if (verify_commit_graph_error & ~VERIFY_COMMIT_GRAPH_ERROR_HASH)
>  		return verify_commit_graph_error;
>  
> -	progress = start_progress(_("Verifying commits in commit graph"),
> -				  g->num_commits);
> +	if (flags & COMMIT_GRAPH_WRITE_PROGRESS)
> +		progress = start_progress(_("Verifying commits in commit graph"),
> +					g->num_commits);
> +

This is correct, but it feels funny that it is sufficient to
castrate start_progress() and we do not have to muck with existing
calls to show and stop progress output.  We rely on progress being
NULL for that to work, and existing code initializes the variable
to NULL, so we are OK.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 1/1] commit-graph: add --[no-]progress to write and verify.
  2019-08-26 16:29   ` [PATCH v2 1/1] " Garima Singh via GitGitGadget
  2019-09-12 20:40     ` Junio C Hamano
@ 2019-09-16 22:36     ` SZEDER Gábor
  2019-09-17 10:47       ` Derrick Stolee
  1 sibling, 1 reply; 13+ messages in thread
From: SZEDER Gábor @ 2019-09-16 22:36 UTC (permalink / raw)
  To: Garima Singh via GitGitGadget
  Cc: git, Junio C Hamano, Garima Singh, Derrick Stolee

On Mon, Aug 26, 2019 at 09:29:58AM -0700, Garima Singh via GitGitGadget wrote:
> From: Garima Singh <garima.singh@microsoft.com>
> 
> Add --[no-]progress to git commit-graph write and verify.
> The progress feature was introduced in 7b0f229
> ("commit-graph write: add progress output", 2018-09-17) but
> the ability to opt-out was overlooked.

> diff --git a/t/t5324-split-commit-graph.sh b/t/t5324-split-commit-graph.sh
> index 99f4ef4c19..4fc3fda9d6 100755
> --- a/t/t5324-split-commit-graph.sh
> +++ b/t/t5324-split-commit-graph.sh
> @@ -319,7 +319,7 @@ test_expect_success 'add octopus merge' '
>  	git merge commits/3 commits/4 &&
>  	git branch merge/octopus &&
>  	git commit-graph write --reachable --split &&
> -	git commit-graph verify 2>err &&
> +	git commit-graph verify --progress 2>err &&

Why is it necessary to use '--progress' here?  It should not be
necessary, because the commit message doesn't mention that it changed
the default behavior of 'git commit-graph verify'...

>  	test_line_count = 3 err &&

Having said that, this test should not check the number of progress
lines in the first place; see the recent discussion:

https://public-inbox.org/git/ec14865f-98cb-5e1a-b580-8b6fddaa6217@gmail.com/

>  	test_i18ngrep ! warning err &&
>  	test_line_count = 3 $graphdir/commit-graph-chain
> -- 
> gitgitgadget

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 1/1] commit-graph: add --[no-]progress to write and verify.
  2019-09-16 22:36     ` SZEDER Gábor
@ 2019-09-17 10:47       ` Derrick Stolee
  2019-09-17 12:22         ` SZEDER Gábor
  0 siblings, 1 reply; 13+ messages in thread
From: Derrick Stolee @ 2019-09-17 10:47 UTC (permalink / raw)
  To: SZEDER Gábor, Garima Singh via GitGitGadget
  Cc: git, Junio C Hamano, Garima Singh


On 9/16/2019 6:36 PM, SZEDER Gábor wrote:
> On Mon, Aug 26, 2019 at 09:29:58AM -0700, Garima Singh via GitGitGadget wrote:
>> From: Garima Singh <garima.singh@microsoft.com>
>>
>> Add --[no-]progress to git commit-graph write and verify.
>> The progress feature was introduced in 7b0f229
>> ("commit-graph write: add progress output", 2018-09-17) but
>> the ability to opt-out was overlooked.
> 
>> diff --git a/t/t5324-split-commit-graph.sh b/t/t5324-split-commit-graph.sh
>> index 99f4ef4c19..4fc3fda9d6 100755
>> --- a/t/t5324-split-commit-graph.sh
>> +++ b/t/t5324-split-commit-graph.sh
>> @@ -319,7 +319,7 @@ test_expect_success 'add octopus merge' '
>>  	git merge commits/3 commits/4 &&
>>  	git branch merge/octopus &&
>>  	git commit-graph write --reachable --split &&
>> -	git commit-graph verify 2>err &&
>> +	git commit-graph verify --progress 2>err &&
> 
> Why is it necessary to use '--progress' here?  It should not be
> necessary, because the commit message doesn't mention that it changed
> the default behavior of 'git commit-graph verify'...

It does change the default when stderr is not a terminal window. If we
were not redirecting to a file, this change would not be necessary.
 
>>  	test_line_count = 3 err &&
> 
> Having said that, this test should not check the number of progress
> lines in the first place; see the recent discussion:
> 
> https://public-inbox.org/git/ec14865f-98cb-5e1a-b580-8b6fddaa6217@gmail.com/

True, this is an old issue. I think it never got corrected because
your reply sounded like the issue doesn't exist in the normal test
suite, only in a private branch where you changed the behavior of
GIT_TEST_GETTEXT_POISON.

If we still think that should be fixed, it should not be a part of
this series, but should be a separate one that focuses on just
those changes.

Thanks,
-Stolee

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 1/1] commit-graph: add --[no-]progress to write and verify.
  2019-09-17 10:47       ` Derrick Stolee
@ 2019-09-17 12:22         ` SZEDER Gábor
  0 siblings, 0 replies; 13+ messages in thread
From: SZEDER Gábor @ 2019-09-17 12:22 UTC (permalink / raw)
  To: Derrick Stolee
  Cc: Garima Singh via GitGitGadget, git, Junio C Hamano, Garima Singh

On Tue, Sep 17, 2019 at 06:47:38AM -0400, Derrick Stolee wrote:
> 
> On 9/16/2019 6:36 PM, SZEDER Gábor wrote:
> > On Mon, Aug 26, 2019 at 09:29:58AM -0700, Garima Singh via GitGitGadget wrote:
> >> From: Garima Singh <garima.singh@microsoft.com>
> >>
> >> Add --[no-]progress to git commit-graph write and verify.
> >> The progress feature was introduced in 7b0f229
> >> ("commit-graph write: add progress output", 2018-09-17) but
> >> the ability to opt-out was overlooked.
> > 
> >> diff --git a/t/t5324-split-commit-graph.sh b/t/t5324-split-commit-graph.sh
> >> index 99f4ef4c19..4fc3fda9d6 100755
> >> --- a/t/t5324-split-commit-graph.sh
> >> +++ b/t/t5324-split-commit-graph.sh
> >> @@ -319,7 +319,7 @@ test_expect_success 'add octopus merge' '
> >>  	git merge commits/3 commits/4 &&
> >>  	git branch merge/octopus &&
> >>  	git commit-graph write --reachable --split &&
> >> -	git commit-graph verify 2>err &&
> >> +	git commit-graph verify --progress 2>err &&
> > 
> > Why is it necessary to use '--progress' here?  It should not be
> > necessary, because the commit message doesn't mention that it changed
> > the default behavior of 'git commit-graph verify'...
> 
> It does change the default when stderr is not a terminal window. If we
> were not redirecting to a file, this change would not be necessary.

OK, yesterday I overlooked that the patch added this line:

  +       opts.progress = isatty(2);

So, the first question is whether that behavior change is desired; I
don't really have an opinion.  But if it is desired, then it should be
changed in a separate patch, explaining why it is desired, I would
think.

> >>  	test_line_count = 3 err &&
> > 
> > Having said that, this test should not check the number of progress
> > lines in the first place; see the recent discussion:
> > 
> > https://public-inbox.org/git/ec14865f-98cb-5e1a-b580-8b6fddaa6217@gmail.com/
> 
> True, this is an old issue. I think it never got corrected because
> your reply sounded like the issue doesn't exist in the normal test
> suite,

Well, the way I see it the root issue is that the test checks things
that it shouldn't.

> only in a private branch where you changed the behavior of
> GIT_TEST_GETTEXT_POISON.
> 
> If we still think that should be fixed, it should not be a part of
> this series, but should be a separate one that focuses on just
> those changes.

Yeah, it should rather go on top of 'ds/commit-graph-octopus-fix'.


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2019-09-17 12:22 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-20 18:37 [PATCH 0/1] commit-graph: add --[no-]progress to write and verify Garima Singh via GitGitGadget
2019-08-20 18:37 ` [PATCH 1/1] " Garima Singh via GitGitGadget
2019-08-20 21:11   ` Junio C Hamano
2019-08-20 21:13   ` Eric Sunshine
2019-08-21 16:47     ` Junio C Hamano
2019-08-20 18:45 ` [PATCH 0/1] " Derrick Stolee
2019-08-26 16:29 ` [PATCH v2 " Garima Singh via GitGitGadget
2019-08-26 16:29   ` [PATCH v2 1/1] " Garima Singh via GitGitGadget
2019-09-12 20:40     ` Junio C Hamano
2019-09-16 22:36     ` SZEDER Gábor
2019-09-17 10:47       ` Derrick Stolee
2019-09-17 12:22         ` SZEDER Gábor
2019-09-10 14:00   ` [PATCH v2 0/1] " Garima Singh

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).