Merge branch 'tc/transport-verbosity'
* tc/transport-verbosity: transport: update flags to be in running order fetch and pull: learn --progress push: learn --progress transport->progress: use flag authoritatively clone: support multiple levels of verbosity push: support multiple levels of verbosity fetch: refactor verbosity option handling into transport.[ch] Documentation/git-push: put --quiet before --verbose Documentation/git-pull: put verbosity options before merge/fetch ones Documentation/git-clone: mention progress in -v Conflicts: transport.h
This commit is contained in:
commit
53997a30f8
@ -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.
|
||||
|
@ -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
|
||||
|
@ -31,6 +31,16 @@ in a state that is hard to back out of in the case of a conflict.
|
||||
OPTIONS
|
||||
-------
|
||||
|
||||
-q::
|
||||
--quiet::
|
||||
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::
|
||||
Pass --verbose to git-fetch and git-merge.
|
||||
|
||||
Options related to merging
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
@ -146,14 +146,21 @@ useful if you write an alias or script around 'git push'.
|
||||
receiver share many of the same objects in common. The default is
|
||||
\--thin.
|
||||
|
||||
-q::
|
||||
--quiet::
|
||||
Suppress all output, including the listing of updated refs,
|
||||
unless an error occurs. Progress is not reported to the standard
|
||||
error stream.
|
||||
|
||||
-v::
|
||||
--verbose::
|
||||
Run verbosely.
|
||||
|
||||
-q::
|
||||
--quiet::
|
||||
Suppress all output, including the listing of updated refs,
|
||||
unless an error occurs.
|
||||
--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[]
|
||||
|
||||
|
@ -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>::
|
||||
|
@ -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,13 +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;
|
||||
|
||||
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,
|
||||
@ -641,7 +634,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;
|
||||
|
||||
|
@ -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()
|
||||
@ -845,10 +847,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, progress);
|
||||
if (upload_pack)
|
||||
set_option(TRANS_OPT_UPLOADPACK, upload_pack);
|
||||
if (keep)
|
||||
|
@ -17,6 +17,8 @@ static const char * const push_usage[] = {
|
||||
static int thin;
|
||||
static int deleterefs;
|
||||
static const char *receivepack;
|
||||
static int verbosity;
|
||||
static int progress;
|
||||
|
||||
static const char **refspec;
|
||||
static int refspec_nr;
|
||||
@ -105,13 +107,16 @@ static int push_with_options(struct transport *transport, int flags)
|
||||
{
|
||||
int err;
|
||||
int nonfastforward;
|
||||
|
||||
transport_set_verbosity(transport, verbosity, progress);
|
||||
|
||||
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 +209,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",
|
||||
@ -220,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()
|
||||
};
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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))
|
||||
@ -576,7 +575,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) {
|
||||
|
31
transport.c
31
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++)
|
||||
@ -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);
|
||||
args.porcelain = !!(flags & TRANSPORT_PUSH_PORCELAIN);
|
||||
|
||||
@ -929,6 +929,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()");
|
||||
|
||||
@ -1028,6 +1030,25 @@ int transport_set_option(struct transport *transport,
|
||||
return 1;
|
||||
}
|
||||
|
||||
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,
|
||||
int refspec_nr, const char **refspec, int flags,
|
||||
int *nonfastforward)
|
||||
@ -1046,8 +1067,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 push_ret, ret, err;
|
||||
|
16
transport.h
16
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
|
||||
@ -94,10 +99,9 @@ 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_PUSH_PORCELAIN 16
|
||||
#define TRANSPORT_PUSH_SET_UPSTREAM 32
|
||||
|
||||
#define TRANSPORT_SUMMARY_WIDTH (2 * DEFAULT_ABBREV + 3)
|
||||
|
||||
/* Returns a transport suitable for the url */
|
||||
@ -129,6 +133,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,
|
||||
int force_progress);
|
||||
|
||||
int transport_push(struct transport *connection,
|
||||
int refspec_nr, const char **refspec, int flags,
|
||||
|
Loading…
Reference in New Issue
Block a user