git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/10] teach --progress to transport-related builtins
@ 2010-02-24 12:50 Tay Ray Chuan
  2010-02-24 12:50 ` [PATCH v2 01/10] Documentation/git-clone: mention progress in -v Tay Ray Chuan
                   ` (9 more replies)
  0 siblings, 10 replies; 11+ messages in thread
From: Tay Ray Chuan @ 2010-02-24 12:50 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Junio C Hamano, Jeff King, Sebastian Thiel

This patch series adds --progress to:

  - git-fetch
  - git-pull
  - git-push

Changes from v1:
  - rebased on git/next and resolved a conflict with the recent
    refactoring of print_push_status() in transports.

  - add a new patch for git-clone's documentation that mentions
    the effect of the -v/--verbose option on progress reporting.

    This should have been done with 5a518ad (clone: use --progress to
    force progress reporting), as per Miklos's suggestion
    (<20091227012032.GE25474@genesis.frugalware.org>).

  - put verbosity options (-v and -q) in a common area for the
    documentation for git-pull, as per Junio's suggestion
    (<7vhbpe5jvo.fsf@alter.siamese.dyndns.org>).

  - teach --progress to git-fetch and git-pull in one patch instead of
    two previously; after all, git-pull is a wrapper of git-fetch.

Contents:

[PATCH v2 01/10] Documentation/git-clone: mention progress in -v
[PATCH v2 02/10] Documentation/git-pull: put verbosity options before merge/fetch ones
[PATCH v2 03/10] Documentation/git-push: put --quiet before --verbose
[PATCH v2 04/10] fetch: refactor verbosity option handling into transport.[ch]
[PATCH v2 05/10] push: support multiple levels of verbosity
[PATCH v2 06/10] clone: support multiple levels of verbosity
[PATCH v2 07/10] transport->progress: use flag authoritatively
[PATCH v2 08/10] push: learn --progress
[PATCH v2 09/10] fetch and pull: learn --progress
[PATCH v2 10/10] transport: update flags to be in running order

 Documentation/fetch-options.txt |    9 ++++++++-
 Documentation/git-clone.txt     |    3 ++-
 Documentation/git-pull.txt      |   10 ++++++++++
 Documentation/git-push.txt      |   15 +++++++++++----
 Documentation/merge-options.txt |    2 ++
 builtin-clone.c                 |   19 ++++++-------------
 builtin-fetch.c                 |    7 +++----
 builtin-push.c                  |   11 ++++++++---
 git-pull.sh                     |    6 ++++--
 transport-helper.c              |    4 +---
 transport.c                     |   31 ++++++++++++++++++++++++++-----
 transport.h                     |   15 ++++++++++-----
 12 files changed, 91 insertions(+), 41 deletions(-)

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

* [PATCH v2 01/10] Documentation/git-clone: mention progress in -v
  2010-02-24 12:50 [PATCH v2 00/10] teach --progress to transport-related builtins Tay Ray Chuan
@ 2010-02-24 12:50 ` Tay Ray Chuan
  2010-02-24 12:50 ` [PATCH v2 02/10] Documentation/git-pull: put verbosity options before merge/fetch ones Tay Ray Chuan
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Tay Ray Chuan @ 2010-02-24 12:50 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Junio C Hamano, Jeff King, Sebastian Thiel

After 5a518ad (clone: use --progress to force progress reporting),
-v/--verbose did not affect whether progress status was reported to
stderr, and users accustomed to using -v to do so since 21188b1
(Implement git clone -v) may be confused.

Mitigate such risks by stating -v does not affect progress in the
documentation.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---

New in v2.

This should have been done with 5a518ad (clone: use --progress to
force progress reporting), as per Miklos's suggestion
(<20091227012032.GE25474@genesis.frugalware.org>).

 Documentation/git-clone.txt |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/Documentation/git-clone.txt b/Documentation/git-clone.txt
index 88ea624..75b9848 100644
--- a/Documentation/git-clone.txt
+++ b/Documentation/git-clone.txt
@@ -102,7 +102,8 @@ objects from the source repository into a pack in the cloned repository.

 --verbose::
 -v::
-	Run verbosely.
+	Run verbosely. Does not affect the reporting of progress status
+	to the standard error stream.

 --progress::
 	Progress status is reported on the standard error stream
--
1.7.0.20.gcb44ed

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

* [PATCH v2 02/10] Documentation/git-pull: put verbosity options before merge/fetch ones
  2010-02-24 12:50 [PATCH v2 00/10] teach --progress to transport-related builtins Tay Ray Chuan
  2010-02-24 12:50 ` [PATCH v2 01/10] Documentation/git-clone: mention progress in -v Tay Ray Chuan
@ 2010-02-24 12:50 ` Tay Ray Chuan
  2010-02-24 12:50 ` [PATCH v2 03/10] Documentation/git-push: put --quiet before --verbose Tay Ray Chuan
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Tay Ray Chuan @ 2010-02-24 12:50 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Junio C Hamano, Jeff King, Sebastian Thiel

After 3f7a9b5 (Documentation/git-pull.txt: Add subtitles above included
option files, Thu Oct 22 2009), the -q/-v options were mentioned only
for the merge options section, giving the impression that git-fetch did
not take those arguments.

Follow 90e4311 (git-pull: do not mention --quiet and --verbose twice,
Mon Sep 7 2009) and hide -q/-v for merge options, while mentioning -q/-v
before the merge- and fetch-specific options.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---

Changes from v1:
  - put verbosity options (-v and -q) in a common area for the
    documentation for git-pull, as per Junio's suggestion
    (<7vhbpe5jvo.fsf@alter.siamese.dyndns.org>).

 Documentation/git-pull.txt      |    8 ++++++++
 Documentation/merge-options.txt |    2 ++
 2 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/Documentation/git-pull.txt b/Documentation/git-pull.txt
index 31f42ea..d47f9dd 100644
--- a/Documentation/git-pull.txt
+++ b/Documentation/git-pull.txt
@@ -31,6 +31,14 @@ in a state that is hard to back out of in the case of a conflict.
 OPTIONS
 -------

+-q::
+--quiet::
+	Pass --quiet to git-fetch and git-merge.
+
+-v::
+--verbose::
+	Pass --verbose to git-fetch and git-merge.
+
 Options related to merging
 ~~~~~~~~~~~~~~~~~~~~~~~~~~

diff --git a/Documentation/merge-options.txt b/Documentation/merge-options.txt
index 3b83dba..37ce9a1 100644
--- a/Documentation/merge-options.txt
+++ b/Documentation/merge-options.txt
@@ -67,6 +67,7 @@ option can be used to override --squash.
 	Synonyms to --stat and --no-stat; these are deprecated and will be
 	removed in the future.

+ifndef::git-pull[]
 -q::
 --quiet::
 	Operate quietly.
@@ -74,6 +75,7 @@ option can be used to override --squash.
 -v::
 --verbose::
 	Be verbose.
+endif::git-pull[]

 -X <option>::
 --strategy-option=<option>::
--
1.7.0.20.gcb44ed

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

* [PATCH v2 03/10] Documentation/git-push: put --quiet before --verbose
  2010-02-24 12:50 [PATCH v2 00/10] teach --progress to transport-related builtins Tay Ray Chuan
  2010-02-24 12:50 ` [PATCH v2 01/10] Documentation/git-clone: mention progress in -v Tay Ray Chuan
  2010-02-24 12:50 ` [PATCH v2 02/10] Documentation/git-pull: put verbosity options before merge/fetch ones Tay Ray Chuan
@ 2010-02-24 12:50 ` Tay Ray Chuan
  2010-02-24 12:50 ` [PATCH v2 04/10] fetch: refactor verbosity option handling into transport.[ch] Tay Ray Chuan
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Tay Ray Chuan @ 2010-02-24 12:50 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Junio C Hamano, Jeff King, Sebastian Thiel

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---
 Documentation/git-push.txt |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt
index 49b6bd9..ddb78eb 100644
--- a/Documentation/git-push.txt
+++ b/Documentation/git-push.txt
@@ -146,15 +146,15 @@ useful if you write an alias or script around 'git push'.
 	receiver share many of the same objects in common. The default is
 	\--thin.
 
--v::
---verbose::
-	Run verbosely.
-
 -q::
 --quiet::
 	Suppress all output, including the listing of updated refs,
 	unless an error occurs.
 
+-v::
+--verbose::
+	Run verbosely.
+
 include::urls-remotes.txt[]
 
 OUTPUT
-- 
1.7.0.20.gcb44ed

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

* [PATCH v2 04/10] fetch: refactor verbosity option handling into transport.[ch]
  2010-02-24 12:50 [PATCH v2 00/10] teach --progress to transport-related builtins Tay Ray Chuan
                   ` (2 preceding siblings ...)
  2010-02-24 12:50 ` [PATCH v2 03/10] Documentation/git-push: put --quiet before --verbose Tay Ray Chuan
@ 2010-02-24 12:50 ` Tay Ray Chuan
  2010-02-24 12:50 ` [PATCH v2 05/10] push: support multiple levels of verbosity Tay Ray Chuan
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Tay Ray Chuan @ 2010-02-24 12:50 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Junio C Hamano, Jeff King, Sebastian Thiel

transport_set_verbosity() is now provided to transport users.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---
 builtin-fetch.c |    5 +----
 transport.c     |    8 ++++++++
 transport.h     |    1 +
 3 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/builtin-fetch.c b/builtin-fetch.c
index d3b9d8a..a7c7e67 100644
--- a/builtin-fetch.c
+++ b/builtin-fetch.c
@@ -823,10 +823,7 @@ static int fetch_one(struct remote *remote, int argc, const char **argv)
 		die("Where do you want to fetch from today?");
 
 	transport = transport_get(remote, NULL);
-	if (verbosity >= 2)
-		transport->verbose = verbosity <= 3 ? verbosity : 3;
-	if (verbosity < 0)
-		transport->verbose = -1;
+	transport_set_verbosity(transport, verbosity);
 	if (upload_pack)
 		set_option(TRANS_OPT_UPLOADPACK, upload_pack);
 	if (keep)
diff --git a/transport.c b/transport.c
index 1a360cf..54f5ede 100644
--- a/transport.c
+++ b/transport.c
@@ -1012,6 +1012,14 @@ int transport_set_option(struct transport *transport,
 	return 1;
 }
 
+void transport_set_verbosity(struct transport *transport, int verbosity)
+{
+	if (verbosity >= 2)
+		transport->verbose = verbosity <= 3 ? verbosity : 3;
+	if (verbosity < 0)
+		transport->verbose = -1;
+}
+
 int transport_push(struct transport *transport,
 		   int refspec_nr, const char **refspec, int flags,
 		   int *nonfastforward)
diff --git a/transport.h b/transport.h
index 096f6e9..5a5ce3a 100644
--- a/transport.h
+++ b/transport.h
@@ -129,6 +129,7 @@ struct transport *transport_get(struct remote *, const char *);
  **/
 int transport_set_option(struct transport *transport, const char *name,
 			 const char *value);
+void transport_set_verbosity(struct transport *transport, int verbosity);
 
 int transport_push(struct transport *connection,
 		   int refspec_nr, const char **refspec, int flags,
-- 
1.7.0.20.gcb44ed

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

* [PATCH v2 05/10] push: support multiple levels of verbosity
  2010-02-24 12:50 [PATCH v2 00/10] teach --progress to transport-related builtins Tay Ray Chuan
                   ` (3 preceding siblings ...)
  2010-02-24 12:50 ` [PATCH v2 04/10] fetch: refactor verbosity option handling into transport.[ch] Tay Ray Chuan
@ 2010-02-24 12:50 ` Tay Ray Chuan
  2010-02-24 12:50 ` [PATCH v2 06/10] clone: " Tay Ray Chuan
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Tay Ray Chuan @ 2010-02-24 12:50 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Junio C Hamano, Jeff King, Sebastian Thiel

Remove the flags TRANSPORT_PUSH_QUIET and TRANSPORT_PUSH_VERBOSE; use
transport->verbose instead to determine verbosity for pushing.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---
 builtin-push.c     |    9 ++++++---
 transport-helper.c |    1 -
 transport.c        |    8 ++++----
 transport.h        |    2 --
 4 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/builtin-push.c b/builtin-push.c
index 5633f0a..0082dad 100644
--- a/builtin-push.c
+++ b/builtin-push.c
@@ -17,6 +17,7 @@ static const char * const push_usage[] = {
 static int thin;
 static int deleterefs;
 static const char *receivepack;
+static int verbosity;
 
 static const char **refspec;
 static int refspec_nr;
@@ -105,13 +106,16 @@ static int push_with_options(struct transport *transport, int flags)
 {
 	int err;
 	int nonfastforward;
+
+	transport_set_verbosity(transport, verbosity);
+
 	if (receivepack)
 		transport_set_option(transport,
 				     TRANS_OPT_RECEIVEPACK, receivepack);
 	if (thin)
 		transport_set_option(transport, TRANS_OPT_THIN, "yes");
 
-	if (flags & TRANSPORT_PUSH_VERBOSE)
+	if (verbosity > 0)
 		fprintf(stderr, "Pushing to %s\n", transport->url);
 	err = transport_push(transport, refspec_nr, refspec, flags,
 			     &nonfastforward);
@@ -204,8 +208,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)
 	int rc;
 	const char *repo = NULL;	/* default repository */
 	struct option options[] = {
-		OPT_BIT('q', "quiet", &flags, "be quiet", TRANSPORT_PUSH_QUIET),
-		OPT_BIT('v', "verbose", &flags, "be verbose", TRANSPORT_PUSH_VERBOSE),
+		OPT__VERBOSITY(&verbosity),
 		OPT_STRING( 0 , "repo", &repo, "repository", "repository"),
 		OPT_BIT( 0 , "all", &flags, "push all refs", TRANSPORT_PUSH_ALL),
 		OPT_BIT( 0 , "mirror", &flags, "mirror all refs",
diff --git a/transport-helper.c b/transport-helper.c
index f822972..b868ea4 100644
--- a/transport-helper.c
+++ b/transport-helper.c
@@ -576,7 +576,6 @@ static int push_refs(struct transport *transport,
 	if (buf.len == 0)
 		return 0;
 
-	transport->verbose = flags & TRANSPORT_PUSH_VERBOSE ? 1 : 0;
 	standard_options(transport);
 
 	if (flags & TRANSPORT_PUSH_DRY_RUN) {
diff --git a/transport.c b/transport.c
index 54f5ede..f29fd6c 100644
--- a/transport.c
+++ b/transport.c
@@ -786,8 +786,8 @@ static int git_transport_push(struct transport *transport, struct ref *remote_re
 	args.send_mirror = !!(flags & TRANSPORT_PUSH_MIRROR);
 	args.force_update = !!(flags & TRANSPORT_PUSH_FORCE);
 	args.use_thin_pack = data->options.thin;
-	args.verbose = !!(flags & TRANSPORT_PUSH_VERBOSE);
-	args.quiet = !!(flags & TRANSPORT_PUSH_QUIET);
+	args.verbose = (transport->verbose > 0);
+	args.quiet = (transport->verbose < 0);
 	args.dry_run = !!(flags & TRANSPORT_PUSH_DRY_RUN);
 
 	ret = send_pack(&args, data->fd, data->conn, remote_refs,
@@ -1038,8 +1038,8 @@ int transport_push(struct transport *transport,
 			transport->get_refs_list(transport, 1);
 		struct ref *local_refs = get_local_heads();
 		int match_flags = MATCH_REFS_NONE;
-		int verbose = flags & TRANSPORT_PUSH_VERBOSE;
-		int quiet = flags & TRANSPORT_PUSH_QUIET;
+		int verbose = (transport->verbose > 0);
+		int quiet = (transport->verbose < 0);
 		int porcelain = flags & TRANSPORT_PUSH_PORCELAIN;
 		int pretend = flags & TRANSPORT_PUSH_DRY_RUN;
 		int ret, err;
diff --git a/transport.h b/transport.h
index 5a5ce3a..d5973ee 100644
--- a/transport.h
+++ b/transport.h
@@ -94,9 +94,7 @@ struct transport {
 #define TRANSPORT_PUSH_FORCE 2
 #define TRANSPORT_PUSH_DRY_RUN 4
 #define TRANSPORT_PUSH_MIRROR 8
-#define TRANSPORT_PUSH_VERBOSE 16
 #define TRANSPORT_PUSH_PORCELAIN 32
-#define TRANSPORT_PUSH_QUIET 64
 #define TRANSPORT_PUSH_SET_UPSTREAM 128
 #define TRANSPORT_SUMMARY_WIDTH (2 * DEFAULT_ABBREV + 3)
 
-- 
1.7.0.20.gcb44ed

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

* [PATCH v2 06/10] clone: support multiple levels of verbosity
  2010-02-24 12:50 [PATCH v2 00/10] teach --progress to transport-related builtins Tay Ray Chuan
                   ` (4 preceding siblings ...)
  2010-02-24 12:50 ` [PATCH v2 05/10] push: support multiple levels of verbosity Tay Ray Chuan
@ 2010-02-24 12:50 ` Tay Ray Chuan
  2010-02-24 12:50 ` [PATCH v2 07/10] transport->progress: use flag authoritatively Tay Ray Chuan
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Tay Ray Chuan @ 2010-02-24 12:50 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Junio C Hamano, Jeff King, Sebastian Thiel

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---
 builtin-clone.c |   16 ++++++----------
 1 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/builtin-clone.c b/builtin-clone.c
index 58bacbd..959fe4b 100644
--- a/builtin-clone.c
+++ b/builtin-clone.c
@@ -37,18 +37,17 @@ static const char * const builtin_clone_usage[] = {
 	NULL
 };
 
-static int option_quiet, option_no_checkout, option_bare, option_mirror;
+static int option_no_checkout, option_bare, option_mirror;
 static int option_local, option_no_hardlinks, option_shared, option_recursive;
 static char *option_template, *option_reference, *option_depth;
 static char *option_origin = NULL;
 static char *option_branch = NULL;
 static char *option_upload_pack = "git-upload-pack";
-static int option_verbose;
+static int option_verbosity;
 static int option_progress;
 
 static struct option builtin_clone_options[] = {
-	OPT__QUIET(&option_quiet),
-	OPT__VERBOSE(&option_verbose),
+	OPT__VERBOSITY(&option_verbosity),
 	OPT_BOOLEAN(0, "progress", &option_progress,
 			"force progress reporting"),
 	OPT_BOOLEAN('n', "no-checkout", &option_no_checkout,
@@ -462,7 +461,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
 		die("could not create leading directories of '%s'", git_dir);
 	set_git_dir(make_absolute_path(git_dir));
 
-	init_db(option_template, option_quiet ? INIT_DB_QUIET : 0);
+	init_db(option_template, (option_verbosity < 0) ? INIT_DB_QUIET : 0);
 
 	/*
 	 * At this point, the config exists, so we do not need the
@@ -526,10 +525,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
 			transport_set_option(transport, TRANS_OPT_DEPTH,
 					     option_depth);
 
-		if (option_quiet)
-			transport->verbose = -1;
-		else if (option_verbose)
-			transport->verbose = 1;
+		transport_set_verbosity(transport, option_verbosity);
 
 		if (option_progress)
 			transport->progress = 1;
@@ -641,7 +637,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
 		opts.update = 1;
 		opts.merge = 1;
 		opts.fn = oneway_merge;
-		opts.verbose_update = !option_quiet;
+		opts.verbose_update = (option_verbosity > 0);
 		opts.src_index = &the_index;
 		opts.dst_index = &the_index;
 
-- 
1.7.0.20.gcb44ed

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

* [PATCH v2 07/10] transport->progress: use flag authoritatively
  2010-02-24 12:50 [PATCH v2 00/10] teach --progress to transport-related builtins Tay Ray Chuan
                   ` (5 preceding siblings ...)
  2010-02-24 12:50 ` [PATCH v2 06/10] clone: " Tay Ray Chuan
@ 2010-02-24 12:50 ` Tay Ray Chuan
  2010-02-24 12:50 ` [PATCH v2 08/10] push: learn --progress Tay Ray Chuan
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Tay Ray Chuan @ 2010-02-24 12:50 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Junio C Hamano, Jeff King, Sebastian Thiel

Set transport->progress in transport.c::transport_set_verbosity() after
checking for the appropriate conditions (eg. --progress, isatty(2)),
and thereafter use it without having to check again.

The rules used are as follows (processing aborts when a rule is
satisfied):

  1. Report progress, if force_progress is 1 (ie. --progress).
  2. Don't report progress, if verbosity < 0 (ie. -q/--quiet).
  3. Report progress if isatty(2) is 1.

This changes progress reporting behaviour such that if both --progress
and --quiet are specified, progress is reported.

In two areas, the logic to determine whether to *not* show progress is
changed to simply use the negation of transport->progress. This changes
behaviour in some ways (see previous paragraph for details).

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---
 builtin-clone.c    |    5 +----
 builtin-fetch.c    |    2 +-
 builtin-push.c     |    2 +-
 transport-helper.c |    3 +--
 transport.c        |   17 +++++++++++++++--
 transport.h        |   10 ++++++++--
 6 files changed, 27 insertions(+), 12 deletions(-)

diff --git a/builtin-clone.c b/builtin-clone.c
index 959fe4b..05f8fb4 100644
--- a/builtin-clone.c
+++ b/builtin-clone.c
@@ -525,10 +525,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
 			transport_set_option(transport, TRANS_OPT_DEPTH,
 					     option_depth);
 
-		transport_set_verbosity(transport, option_verbosity);
-
-		if (option_progress)
-			transport->progress = 1;
+		transport_set_verbosity(transport, option_verbosity, option_progress);
 
 		if (option_upload_pack)
 			transport_set_option(transport, TRANS_OPT_UPLOADPACK,
diff --git a/builtin-fetch.c b/builtin-fetch.c
index a7c7e67..bc3fcf3 100644
--- a/builtin-fetch.c
+++ b/builtin-fetch.c
@@ -823,7 +823,7 @@ static int fetch_one(struct remote *remote, int argc, const char **argv)
 		die("Where do you want to fetch from today?");
 
 	transport = transport_get(remote, NULL);
-	transport_set_verbosity(transport, verbosity);
+	transport_set_verbosity(transport, verbosity, 0);
 	if (upload_pack)
 		set_option(TRANS_OPT_UPLOADPACK, upload_pack);
 	if (keep)
diff --git a/builtin-push.c b/builtin-push.c
index 0082dad..dce3152 100644
--- a/builtin-push.c
+++ b/builtin-push.c
@@ -107,7 +107,7 @@ static int push_with_options(struct transport *transport, int flags)
 	int err;
 	int nonfastforward;
 
-	transport_set_verbosity(transport, verbosity);
+	transport_set_verbosity(transport, verbosity, 0);
 
 	if (receivepack)
 		transport_set_option(transport,
diff --git a/transport-helper.c b/transport-helper.c
index b868ea4..2638781 100644
--- a/transport-helper.c
+++ b/transport-helper.c
@@ -279,9 +279,8 @@ static void standard_options(struct transport *t)
 	char buf[16];
 	int n;
 	int v = t->verbose;
-	int no_progress = v < 0 || (!t->progress && !isatty(2));
 
-	set_helper_option(t, "progress", !no_progress ? "true" : "false");
+	set_helper_option(t, "progress", t->progress ? "true" : "false");
 
 	n = snprintf(buf, sizeof(buf), "%d", v + 1);
 	if (n >= sizeof(buf))
diff --git a/transport.c b/transport.c
index f29fd6c..6d85447 100644
--- a/transport.c
+++ b/transport.c
@@ -526,7 +526,7 @@ static int fetch_refs_via_pack(struct transport *transport,
 	args.include_tag = data->options.followtags;
 	args.verbose = (transport->verbose > 0);
 	args.quiet = (transport->verbose < 0);
-	args.no_progress = args.quiet || (!transport->progress && !isatty(2));
+	args.no_progress = !transport->progress;
 	args.depth = data->options.depth;
 
 	for (i = 0; i < nr_heads; i++)
@@ -913,6 +913,8 @@ struct transport *transport_get(struct remote *remote, const char *url)
 	const char *helper;
 	struct transport *ret = xcalloc(1, sizeof(*ret));
 
+	ret->progress = isatty(2);
+
 	if (!remote)
 		die("No remote provided to transport_get()");
 
@@ -1012,12 +1014,23 @@ int transport_set_option(struct transport *transport,
 	return 1;
 }
 
-void transport_set_verbosity(struct transport *transport, int verbosity)
+void transport_set_verbosity(struct transport *transport, int verbosity,
+	int force_progress)
 {
 	if (verbosity >= 2)
 		transport->verbose = verbosity <= 3 ? verbosity : 3;
 	if (verbosity < 0)
 		transport->verbose = -1;
+
+	/**
+	 * Rules used to determine whether to report progress (processing aborts
+	 * when a rule is satisfied):
+	 *
+	 *   1. Report progress, if force_progress is 1 (ie. --progress).
+	 *   2. Don't report progress, if verbosity < 0 (ie. -q/--quiet ).
+	 *   3. Report progress if isatty(2) is 1.
+	 **/
+	transport->progress = force_progress || (verbosity >= 0 && isatty(2));
 }
 
 int transport_push(struct transport *transport,
diff --git a/transport.h b/transport.h
index d5973ee..531731e 100644
--- a/transport.h
+++ b/transport.h
@@ -80,7 +80,12 @@ struct transport {
 	int (*disconnect)(struct transport *connection);
 	char *pack_lockfile;
 	signed verbose : 3;
-	/* Force progress even if stderr is not a tty */
+	/**
+	 * Transports should not set this directly, and should use this
+	 * value without having to check isatty(2), -q/--quiet
+	 * (transport->verbose < 0), etc. - checking has already been done
+	 * in transport_set_verbosity().
+	 **/
 	unsigned progress : 1;
 	/*
 	 * If transport is at least potentially smart, this points to
@@ -127,7 +132,8 @@ struct transport *transport_get(struct remote *, const char *);
  **/
 int transport_set_option(struct transport *transport, const char *name,
 			 const char *value);
-void transport_set_verbosity(struct transport *transport, int verbosity);
+void transport_set_verbosity(struct transport *transport, int verbosity,
+	int force_progress);
 
 int transport_push(struct transport *connection,
 		   int refspec_nr, const char **refspec, int flags,
-- 
1.7.0.20.gcb44ed

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

* [PATCH v2 08/10] push: learn --progress
  2010-02-24 12:50 [PATCH v2 00/10] teach --progress to transport-related builtins Tay Ray Chuan
                   ` (6 preceding siblings ...)
  2010-02-24 12:50 ` [PATCH v2 07/10] transport->progress: use flag authoritatively Tay Ray Chuan
@ 2010-02-24 12:50 ` Tay Ray Chuan
  2010-02-24 12:50 ` [PATCH v2 09/10] fetch and pull: " Tay Ray Chuan
  2010-02-24 12:50 ` [PATCH v2 10/10] transport: update flags to be in running order Tay Ray Chuan
  9 siblings, 0 replies; 11+ messages in thread
From: Tay Ray Chuan @ 2010-02-24 12:50 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Junio C Hamano, Jeff King, Sebastian Thiel

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---
 Documentation/git-push.txt |    9 ++++++++-
 builtin-push.c             |    4 +++-
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt
index ddb78eb..59dc8b1 100644
--- a/Documentation/git-push.txt
+++ b/Documentation/git-push.txt
@@ -149,12 +149,19 @@ useful if you write an alias or script around 'git push'.
 -q::
 --quiet::
 	Suppress all output, including the listing of updated refs,
-	unless an error occurs.
+	unless an error occurs. Progress is not reported to the standard
+	error stream.
 
 -v::
 --verbose::
 	Run verbosely.
 
+--progress::
+	Progress status is reported on the standard error stream
+	by default when it is attached to a terminal, unless -q
+	is specified. This flag forces progress status even if the
+	standard error stream is not directed to a terminal.
+
 include::urls-remotes.txt[]
 
 OUTPUT
diff --git a/builtin-push.c b/builtin-push.c
index dce3152..ba9fe49 100644
--- a/builtin-push.c
+++ b/builtin-push.c
@@ -18,6 +18,7 @@ static int thin;
 static int deleterefs;
 static const char *receivepack;
 static int verbosity;
+static int progress;
 
 static const char **refspec;
 static int refspec_nr;
@@ -107,7 +108,7 @@ static int push_with_options(struct transport *transport, int flags)
 	int err;
 	int nonfastforward;
 
-	transport_set_verbosity(transport, verbosity, 0);
+	transport_set_verbosity(transport, verbosity, progress);
 
 	if (receivepack)
 		transport_set_option(transport,
@@ -223,6 +224,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)
 		OPT_STRING( 0 , "exec", &receivepack, "receive-pack", "receive pack program"),
 		OPT_BIT('u', "set-upstream", &flags, "set upstream for git pull/status",
 			TRANSPORT_PUSH_SET_UPSTREAM),
+		OPT_BOOLEAN(0, "progress", &progress, "force progress reporting"),
 		OPT_END()
 	};
 
-- 
1.7.0.20.gcb44ed

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

* [PATCH v2 09/10] fetch and pull: learn --progress
  2010-02-24 12:50 [PATCH v2 00/10] teach --progress to transport-related builtins Tay Ray Chuan
                   ` (7 preceding siblings ...)
  2010-02-24 12:50 ` [PATCH v2 08/10] push: learn --progress Tay Ray Chuan
@ 2010-02-24 12:50 ` Tay Ray Chuan
  2010-02-24 12:50 ` [PATCH v2 10/10] transport: update flags to be in running order Tay Ray Chuan
  9 siblings, 0 replies; 11+ messages in thread
From: Tay Ray Chuan @ 2010-02-24 12:50 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Junio C Hamano, Jeff King, Sebastian Thiel

Note that in the documentation for git-pull, documentation for the
--progress option is displayed under the "Options related to fetching"
subtitle via fetch-options.txt.

Also, update the documentation of the -q/--quiet option for git-pull to
mention its effect on progress reporting during fetching.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---

Changes from v1:
  - teach --progress to git-fetch and git-pull in one patch instead of
    two previously; after all, git-pull is a wrapper of git-fetch.

 Documentation/fetch-options.txt |    9 ++++++++-
 Documentation/git-pull.txt      |    4 +++-
 builtin-fetch.c                 |    4 +++-
 git-pull.sh                     |    6 ++++--
 4 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt
index fe716b2..044ec88 100644
--- a/Documentation/fetch-options.txt
+++ b/Documentation/fetch-options.txt
@@ -78,9 +78,16 @@ ifndef::git-pull[]
 -q::
 --quiet::
 	Pass --quiet to git-fetch-pack and silence any other internally
-	used git commands.
+	used git commands. Progress is not reported to the standard error
+	stream.

 -v::
 --verbose::
 	Be verbose.
 endif::git-pull[]
+
+--progress::
+	Progress status is reported on the standard error stream
+	by default when it is attached to a terminal, unless -q
+	is specified. This flag forces progress status even if the
+	standard error stream is not directed to a terminal.
diff --git a/Documentation/git-pull.txt b/Documentation/git-pull.txt
index d47f9dd..ab4de10 100644
--- a/Documentation/git-pull.txt
+++ b/Documentation/git-pull.txt
@@ -33,7 +33,9 @@ OPTIONS

 -q::
 --quiet::
-	Pass --quiet to git-fetch and git-merge.
+	This is passed to both underlying git-fetch to squelch reporting of
+	during transfer, and underlying git-merge to squelch output during
+	merging.

 -v::
 --verbose::
diff --git a/builtin-fetch.c b/builtin-fetch.c
index bc3fcf3..00fded2 100644
--- a/builtin-fetch.c
+++ b/builtin-fetch.c
@@ -28,6 +28,7 @@ enum {
 };

 static int all, append, dry_run, force, keep, multiple, prune, update_head_ok, verbosity;
+static int progress;
 static int tags = TAGS_DEFAULT;
 static const char *depth;
 static const char *upload_pack;
@@ -57,6 +58,7 @@ static struct option builtin_fetch_options[] = {
 	OPT_BOOLEAN('k', "keep", &keep, "keep downloaded pack"),
 	OPT_BOOLEAN('u', "update-head-ok", &update_head_ok,
 		    "allow updating of HEAD ref"),
+	OPT_BOOLEAN(0, "progress", &progress, "force progress reporting"),
 	OPT_STRING(0, "depth", &depth, "DEPTH",
 		   "deepen history of shallow clone"),
 	OPT_END()
@@ -823,7 +825,7 @@ static int fetch_one(struct remote *remote, int argc, const char **argv)
 		die("Where do you want to fetch from today?");

 	transport = transport_get(remote, NULL);
-	transport_set_verbosity(transport, verbosity, 0);
+	transport_set_verbosity(transport, verbosity, progress);
 	if (upload_pack)
 		set_option(TRANS_OPT_UPLOADPACK, upload_pack);
 	if (keep)
diff --git a/git-pull.sh b/git-pull.sh
index 38331a8..d45b50c 100755
--- a/git-pull.sh
+++ b/git-pull.sh
@@ -38,7 +38,7 @@ test -z "$(git ls-files -u)" || die_conflict
 test -f "$GIT_DIR/MERGE_HEAD" && die_merge

 strategy_args= diffstat= no_commit= squash= no_ff= ff_only=
-log_arg= verbosity=
+log_arg= verbosity= progress=
 merge_args=
 curr_branch=$(git symbolic-ref -q HEAD)
 curr_branch_short=$(echo "$curr_branch" | sed "s|refs/heads/||")
@@ -50,6 +50,8 @@ do
 		verbosity="$verbosity -q" ;;
 	-v|--verbose)
 		verbosity="$verbosity -v" ;;
+	--progress)
+		progress=--progress ;;
 	-n|--no-stat|--no-summary)
 		diffstat=--no-stat ;;
 	--stat|--summary)
@@ -214,7 +216,7 @@ test true = "$rebase" && {
 	done
 }
 orig_head=$(git rev-parse -q --verify HEAD)
-git fetch $verbosity --update-head-ok "$@" || exit 1
+git fetch $verbosity $progress --update-head-ok "$@" || exit 1

 curr_head=$(git rev-parse -q --verify HEAD)
 if test -n "$orig_head" && test "$curr_head" != "$orig_head"
--
1.7.0.20.gcb44ed

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

* [PATCH v2 10/10] transport: update flags to be in running order
  2010-02-24 12:50 [PATCH v2 00/10] teach --progress to transport-related builtins Tay Ray Chuan
                   ` (8 preceding siblings ...)
  2010-02-24 12:50 ` [PATCH v2 09/10] fetch and pull: " Tay Ray Chuan
@ 2010-02-24 12:50 ` Tay Ray Chuan
  9 siblings, 0 replies; 11+ messages in thread
From: Tay Ray Chuan @ 2010-02-24 12:50 UTC (permalink / raw)
  To: Git Mailing List; +Cc: Junio C Hamano, Jeff King, Sebastian Thiel

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---

Changes from v1:
  - Rebased on git/next and resolved a conflict with the recent
    refactoring of print_push_status() in transports.

 transport.h |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/transport.h b/transport.h
index 531731e..c61aacf 100644
--- a/transport.h
+++ b/transport.h
@@ -99,8 +99,8 @@ struct transport {
 #define TRANSPORT_PUSH_FORCE 2
 #define TRANSPORT_PUSH_DRY_RUN 4
 #define TRANSPORT_PUSH_MIRROR 8
-#define TRANSPORT_PUSH_PORCELAIN 32
-#define TRANSPORT_PUSH_SET_UPSTREAM 128
+#define TRANSPORT_PUSH_PORCELAIN 16
+#define TRANSPORT_PUSH_SET_UPSTREAM 32
 #define TRANSPORT_SUMMARY_WIDTH (2 * DEFAULT_ABBREV + 3)

 /* Returns a transport suitable for the url */
--
1.7.0.20.gcb44ed

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

end of thread, other threads:[~2010-02-24 12:51 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-02-24 12:50 [PATCH v2 00/10] teach --progress to transport-related builtins Tay Ray Chuan
2010-02-24 12:50 ` [PATCH v2 01/10] Documentation/git-clone: mention progress in -v Tay Ray Chuan
2010-02-24 12:50 ` [PATCH v2 02/10] Documentation/git-pull: put verbosity options before merge/fetch ones Tay Ray Chuan
2010-02-24 12:50 ` [PATCH v2 03/10] Documentation/git-push: put --quiet before --verbose Tay Ray Chuan
2010-02-24 12:50 ` [PATCH v2 04/10] fetch: refactor verbosity option handling into transport.[ch] Tay Ray Chuan
2010-02-24 12:50 ` [PATCH v2 05/10] push: support multiple levels of verbosity Tay Ray Chuan
2010-02-24 12:50 ` [PATCH v2 06/10] clone: " Tay Ray Chuan
2010-02-24 12:50 ` [PATCH v2 07/10] transport->progress: use flag authoritatively Tay Ray Chuan
2010-02-24 12:50 ` [PATCH v2 08/10] push: learn --progress Tay Ray Chuan
2010-02-24 12:50 ` [PATCH v2 09/10] fetch and pull: " Tay Ray Chuan
2010-02-24 12:50 ` [PATCH v2 10/10] transport: update flags to be in running order Tay Ray Chuan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).