After fixing clone -q I noticed that pull -q is does not do what it's supposed to do and implemented --quiet/--verbose by adding it to builtin-merge and fixing two places in builtin-fetch. I have not touched/adjusted contrib/completion/git-completion.bash but can take a look if wanted. I think it needs one or two adjustions anyway caused by recent --OPTIONS changes in master. I've tested the following invocations with the below changes applied: $ git pull $ git pull -q $ git pull -v Signed-off-by: Tuncer Ayaz <tuncer.ayaz@xxxxxxxxx> --- Documentation/merge-options.txt | 8 ++++++ builtin-fetch.c | 5 ++- builtin-merge.c | 52 +++++++++++++++++++++++--------------- git-pull.sh | 10 +++++-- 4 files changed, 49 insertions(+), 26 deletions(-) diff --git a/Documentation/merge-options.txt b/Documentation/merge-options.txt index 007909a..427cdef 100644 --- a/Documentation/merge-options.txt +++ b/Documentation/merge-options.txt @@ -1,3 +1,11 @@ +-q:: +--quiet:: + Operate quietly. + +-v:: +--verbose:: + Be verbose. + --stat:: Show a diffstat at the end of the merge. The diffstat is also controlled by the configuration option merge.stat. diff --git a/builtin-fetch.c b/builtin-fetch.c index ee93d3a..b5c2885 100644 --- a/builtin-fetch.c +++ b/builtin-fetch.c @@ -372,12 +372,13 @@ static int store_updated_refs(const char *url, const char *remote_name, SUMMARY_WIDTH, *kind ? kind : "branch", REFCOL_WIDTH, *what ? what : "HEAD"); if (*note) { - if (!shown_url) { + if ((verbose || !quiet) && !shown_url) { fprintf(stderr, "From %.*s\n", url_len, url); shown_url = 1; } - fprintf(stderr, " %s\n", note); + if(verbose || !quiet) + fprintf(stderr, " %s\n", note); } } fclose(fp); diff --git a/builtin-merge.c b/builtin-merge.c index 38266ba..1f601d4 100644 --- a/builtin-merge.c +++ b/builtin-merge.c @@ -44,6 +44,7 @@ static const char * const builtin_merge_usage[] = { static int show_diffstat = 1, option_log, squash; static int option_commit = 1, allow_fast_forward = 1; static int allow_trivial = 1, have_message; +static int quiet, verbose; static struct strbuf merge_msg; static struct commit_list *remoteheads; static unsigned char head[20], stash[20]; @@ -101,7 +102,7 @@ static struct strategy *get_strategy(const char *name) struct cmdname *ent = main_cmds.names[i]; for (j = 0; j < ARRAY_SIZE(all_strategy); j++) if (!strncmp(ent->name, all_strategy[j].name, ent->len) - && !all_strategy[j].name[ent->len]) + && !all_strategy[j].name[ent->len]) found = 1; if (!found) add_cmdname(¬_strategies, ent->name, ent->len); @@ -152,6 +153,8 @@ static int option_parse_n(const struct option *opt, } static struct option builtin_merge_options[] = { + OPT__QUIET(&quiet), + OPT__VERBOSE(&verbose), { OPTION_CALLBACK, 'n', NULL, NULL, NULL, "do not show a diffstat at the end of the merge", PARSE_OPT_NOARG, option_parse_n }, @@ -250,7 +253,8 @@ static void restore_state(void) /* This is called when no merge was necessary. */ static void finish_up_to_date(const char *msg) { - printf("%s%s\n", squash ? " (nothing to squash)" : "", msg); + if(verbose || !quiet) + printf("%s%s\n", squash ? " (nothing to squash)" : "", msg); drop_save(); } @@ -262,7 +266,8 @@ static void squash_message(void) struct commit_list *j; int fd; - printf("Squash commit -- not updating HEAD\n"); + if(verbose || !quiet) + printf("Squash commit -- not updating HEAD\n"); fd = open(git_path("SQUASH_MSG"), O_WRONLY | O_CREAT, 0666); if (fd < 0) die("Could not write to %s", git_path("SQUASH_MSG")); @@ -282,18 +287,20 @@ static void squash_message(void) if (prepare_revision_walk(&rev)) die("revision walk setup failed"); - strbuf_init(&out, 0); - strbuf_addstr(&out, "Squashed commit of the following:\n"); - while ((commit = get_revision(&rev)) != NULL) { - strbuf_addch(&out, '\n'); - strbuf_addf(&out, "commit %s\n", - sha1_to_hex(commit->object.sha1)); - pretty_print_commit(rev.commit_format, commit, &out, rev.abbrev, - NULL, NULL, rev.date_mode, 0); + if(verbose || !quiet) { + strbuf_init(&out, 0); + strbuf_addstr(&out, "Squashed commit of the following:\n"); + while ((commit = get_revision(&rev)) != NULL) { + strbuf_addch(&out, '\n'); + strbuf_addf(&out, "commit %s\n", + sha1_to_hex(commit->object.sha1)); + pretty_print_commit(rev.commit_format, commit, &out, rev.abbrev, + NULL, NULL, rev.date_mode, 0); + } + write(fd, out.buf, out.len); + close(fd); + strbuf_release(&out); } - write(fd, out.buf, out.len); - close(fd); - strbuf_release(&out); } static int run_hook(const char *name) @@ -333,14 +340,15 @@ static void finish(const unsigned char *new_head, const char *msg) if (!msg) strbuf_addstr(&reflog_message, getenv("GIT_REFLOG_ACTION")); else { - printf("%s\n", msg); + if(verbose || !quiet) + printf("%s\n", msg); strbuf_addf(&reflog_message, "%s: %s", getenv("GIT_REFLOG_ACTION"), msg); } if (squash) { squash_message(); } else { - if (!merge_msg.len) + if ((verbose || !quiet) && !merge_msg.len) printf("No merge message -- not updating HEAD\n"); else { const char *argv_gc_auto[] = { "gc", "--auto", NULL }; @@ -877,6 +885,8 @@ int cmd_merge(int argc, const char **argv, const char *prefix) argc = parse_options(argc, argv, builtin_merge_options, builtin_merge_usage, 0); + if(!verbose && quiet) + show_diffstat = 0; if (squash) { if (!allow_fast_forward) @@ -1019,11 +1029,11 @@ int cmd_merge(int argc, const char **argv, const char *prefix) char hex[41]; strcpy(hex, find_unique_abbrev(head, DEFAULT_ABBREV)); - - printf("Updating %s..%s\n", - hex, - find_unique_abbrev(remoteheads->item->object.sha1, - DEFAULT_ABBREV)); + if(verbose || !quiet) + printf("Updating %s..%s\n", + hex, + find_unique_abbrev(remoteheads->item->object.sha1, + DEFAULT_ABBREV)); strbuf_init(&msg, 0); strbuf_addstr(&msg, "Fast forward"); if (have_message) diff --git a/git-pull.sh b/git-pull.sh index 75c3610..d84ceb5 100755 --- a/git-pull.sh +++ b/git-pull.sh @@ -16,13 +16,17 @@ cd_to_toplevel test -z "$(git ls-files -u)" || die "You are in the middle of a conflicted merge." -strategy_args= no_stat= no_commit= squash= no_ff= log_arg= +quiet= verbose= strategy_args= no_stat= no_commit= squash= no_ff= log_arg= curr_branch=$(git symbolic-ref -q HEAD) curr_branch_short=$(echo "$curr_branch" | sed "s|refs/heads/||") rebase=$(git config --bool branch.$curr_branch_short.rebase) while : do case "$1" in + -q|--quiet) + quiet=-q ;; + -v|--verbose) + verbose=-v ;; -n|--no-stat|--no-summary) no_stat=-n ;; --stat|--summary) @@ -121,7 +125,7 @@ test true = "$rebase" && { "refs/remotes/$origin/$reflist" 2>/dev/null)" } orig_head=$(git rev-parse --verify HEAD 2>/dev/null) -git fetch --update-head-ok "$@" || exit 1 +git fetch $verbose $quiet --update-head-ok "$@" || exit 1 curr_head=$(git rev-parse --verify HEAD 2>/dev/null) if test "$curr_head" != "$orig_head" @@ -181,5 +185,5 @@ merge_name=$(git fmt-merge-msg $log_arg <"$GIT_DIR/FETCH_HEAD") || exit test true = "$rebase" && exec git-rebase $strategy_args --onto $merge_head \ ${oldremoteref:-$merge_head} -exec git-merge $no_stat $no_commit $squash $no_ff $log_arg $strategy_args \ +exec git-merge $quiet $verbose $no_stat $no_commit $squash $no_ff $log_arg $strategy_args \ "$merge_name" HEAD $merge_head -- 1.6.0.2.GIT -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html