On Sun, Oct 19, 2008 at 8:33 PM, Tuncer Ayaz <tuncer.ayaz@xxxxxxxxx> wrote: > On Sun, Oct 19, 2008 at 8:17 PM, Tuncer Ayaz <tuncer.ayaz@xxxxxxxxx> wrote: >> After fixing clone -q I noticed that pull -q 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 already needs one or two >> adjustments 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 >> >> This is the next attempt trying to incorporate Junio's >> suggestions and I'm not sure about the following: >> 1) having the same option callback function in both modules >> 2) my adaption of the following two lines from >> builtin-fetch.c to the new verbosity option: >> if (verbosity == VERBOSE) >> transport->verbose = 1; >> if (verbosity == QUIET) >> transport->verbose = -1; >> 3) my usage of OPTION_CALLBACK. therefore please >> correct me if I did it wrong or my cb fun has an >> obvious defect. it may very well have one :) > > it doesn't work as I expected when you supply -q and -v. > I have to redo it, I guess. Junio, what do you think? if I call "git pull -q -v" or "git pull -v -q" verbosity will be VERBOSE. is that ok or should I make sure that the last one overrides verbosity? >> Signed-off-by: Tuncer Ayaz <tuncer.ayaz@xxxxxxxxx> >> --- >> Documentation/merge-options.txt | 8 ++++++++ >> builtin-fetch.c | 35 +++++++++++++++++++++++++---------- >> builtin-merge.c | 36 +++++++++++++++++++++++++++++------- >> git-pull.sh | 10 ++++++++-- >> 4 files changed, 70 insertions(+), 19 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..717e833 100644 >> --- a/builtin-fetch.c >> +++ b/builtin-fetch.c >> @@ -22,16 +22,31 @@ enum { >> TAGS_SET = 2 >> }; >> >> -static int append, force, keep, update_head_ok, verbose, quiet; >> +static int append, force, keep, update_head_ok; >> static int tags = TAGS_DEFAULT; >> static const char *depth; >> static const char *upload_pack; >> static struct strbuf default_rla = STRBUF_INIT; >> static struct transport *transport; >> +static enum { QUIET, NORMAL, VERBOSE } verbosity = NORMAL; >> + >> +static int option_parse_verbosity(const struct option *opt, >> + const char *arg, int unset) >> +{ >> + if (!strcmp("quiet", opt->long_name)) >> + verbosity = QUIET; >> + else if (!strcmp("verbose", opt->long_name)) >> + verbosity = VERBOSE; >> + return 0; >> +} >> >> static struct option builtin_fetch_options[] = { >> - OPT__QUIET(&quiet), >> - OPT__VERBOSE(&verbose), >> + { OPTION_CALLBACK, 'q', "quiet", NULL, NULL, >> + "operate quietly", >> + PARSE_OPT_NOARG, option_parse_verbosity }, >> + { OPTION_CALLBACK, 'v', "verbose", NULL, NULL, >> + "be verbose", >> + PARSE_OPT_NOARG, option_parse_verbosity }, >> OPT_BOOLEAN('a', "append", &append, >> "append to .git/FETCH_HEAD instead of overwriting"), >> OPT_STRING(0, "upload-pack", &upload_pack, "PATH", >> @@ -192,7 +207,6 @@ static int s_update_ref(const char *action, >> >> static int update_local_ref(struct ref *ref, >> const char *remote, >> - int verbose, >> char *display) >> { >> struct commit *current = NULL, *updated; >> @@ -210,7 +224,7 @@ static int update_local_ref(struct ref *ref, >> die("object %s not found", sha1_to_hex(ref->new_sha1)); >> >> if (!hashcmp(ref->old_sha1, ref->new_sha1)) { >> - if (verbose) >> + if (verbosity == VERBOSE) >> sprintf(display, "= %-*s %-*s -> %s", SUMMARY_WIDTH, >> "[up to date]", REFCOL_WIDTH, remote, >> pretty_ref); >> @@ -366,18 +380,19 @@ static int store_updated_refs(const char *url, const char *remote_name, >> note); >> >> if (ref) >> - rc |= update_local_ref(ref, what, verbose, note); >> + rc |= update_local_ref(ref, what, note); >> else >> sprintf(note, "* %-*s %-*s -> FETCH_HEAD", >> SUMMARY_WIDTH, *kind ? kind : "branch", >> REFCOL_WIDTH, *what ? what : "HEAD"); >> if (*note) { >> - if (!shown_url) { >> + if (verbosity > QUIET && !shown_url) { >> fprintf(stderr, "From %.*s\n", >> url_len, url); >> shown_url = 1; >> } >> - fprintf(stderr, " %s\n", note); >> + if (verbosity > QUIET) >> + fprintf(stderr, " %s\n", note); >> } >> } >> fclose(fp); >> @@ -622,9 +637,9 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) >> remote = remote_get(argv[0]); >> >> transport = transport_get(remote, remote->url[0]); >> - if (verbose >= 2) >> + if (verbosity == VERBOSE) >> transport->verbose = 1; >> - if (quiet) >> + if (verbosity == QUIET) >> transport->verbose = -1; >> if (upload_pack) >> set_option(TRANS_OPT_UPLOADPACK, upload_pack); >> diff --git a/builtin-merge.c b/builtin-merge.c >> index 5e2b7f1..6966831 100644 >> --- a/builtin-merge.c >> +++ b/builtin-merge.c >> @@ -50,6 +50,7 @@ static unsigned char head[20], stash[20]; >> static struct strategy **use_strategies; >> static size_t use_strategies_nr, use_strategies_alloc; >> static const char *branch; >> +static enum { QUIET, NORMAL, VERBOSE } verbosity = NORMAL; >> >> static struct strategy all_strategy[] = { >> { "recursive", DEFAULT_TWOHEAD | NO_TRIVIAL }, >> @@ -151,7 +152,23 @@ static int option_parse_n(const struct option *opt, >> return 0; >> } >> >> +static int option_parse_verbosity(const struct option *opt, >> + const char *arg, int unset) >> +{ >> + if (!strcmp("quiet", opt->long_name)) >> + verbosity = QUIET; >> + else if (!strcmp("verbose", opt->long_name)) >> + verbosity = VERBOSE; >> + return 0; >> +} >> + >> static struct option builtin_merge_options[] = { >> + { OPTION_CALLBACK, 'q', "quiet", NULL, NULL, >> + "operate quietly", >> + PARSE_OPT_NOARG, option_parse_verbosity }, >> + { OPTION_CALLBACK, 'v', "verbose", NULL, NULL, >> + "be verbose", >> + PARSE_OPT_NOARG, option_parse_verbosity }, >> { OPTION_CALLBACK, 'n', NULL, NULL, NULL, >> "do not show a diffstat at the end of the merge", >> PARSE_OPT_NOARG, option_parse_n }, >> @@ -249,7 +266,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 (verbosity > QUIET) >> + printf("%s%s\n", squash ? " (nothing to squash)" : "", msg); >> drop_save(); >> } >> >> @@ -330,14 +348,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 (verbosity > 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 (verbosity > QUIET && !merge_msg.len) >> printf("No merge message -- not updating HEAD\n"); >> else { >> const char *argv_gc_auto[] = { "gc", "--auto", NULL }; >> @@ -871,6 +890,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 (verbosity > QUIET) >> + show_diffstat = 0; >> >> if (squash) { >> if (!allow_fast_forward) >> @@ -1012,10 +1033,11 @@ int cmd_merge(int argc, const char **argv, const char *prefix) >> >> strcpy(hex, find_unique_abbrev(head, DEFAULT_ABBREV)); >> >> - printf("Updating %s..%s\n", >> - hex, >> - find_unique_abbrev(remoteheads->item->object.sha1, >> - DEFAULT_ABBREV)); >> + if (verbosity > QUIET) >> + printf("Updating %s..%s\n", >> + hex, >> + find_unique_abbrev(remoteheads->item->object.sha1, >> + DEFAULT_ABBREV)); >> strbuf_addstr(&msg, "Fast forward"); >> if (have_message) >> strbuf_addstr(&msg, >> diff --git a/git-pull.sh b/git-pull.sh >> index 75c3610..8e25d44 100755 >> --- a/git-pull.sh >> +++ b/git-pull.sh >> @@ -16,6 +16,7 @@ cd_to_toplevel >> test -z "$(git ls-files -u)" || >> die "You are in the middle of a conflicted merge." >> >> +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/||") >> @@ -23,6 +24,10 @@ 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 +126,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 +186,6 @@ 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