usage: add set_warn_routine()
[gitweb.git] / apply.c
diff --git a/apply.c b/apply.c
index ce09ed9cc9045a3bff4ccc100c222e75492ab834..a9384390f17f1aaa2a6b635122db9897ef348283 100644 (file)
--- a/apply.c
+++ b/apply.c
@@ -125,8 +125,11 @@ int check_apply_state(struct apply_state *state, int force_apply)
                        return error(_("--3way outside a repository"));
                state->check_index = 1;
        }
-       if (state->apply_with_reject)
-               state->apply = state->apply_verbosely = 1;
+       if (state->apply_with_reject) {
+               state->apply = 1;
+               if (state->apply_verbosity == verbosity_normal)
+                       state->apply_verbosity = verbosity_verbose;
+       }
        if (!force_apply && (state->diffstat || state->numstat || state->summary || state->check || state->fake_ancestor))
                state->apply = 0;
        if (state->check_index && is_not_gitdir)
@@ -1620,8 +1623,9 @@ static void record_ws_error(struct apply_state *state,
                return;
 
        err = whitespace_error_string(result);
-       fprintf(stderr, "%s:%d: %s.\n%.*s\n",
-               state->patch_input_file, linenr, err, len, line);
+       if (state->apply_verbosity > verbosity_silent)
+               fprintf(stderr, "%s:%d: %s.\n%.*s\n",
+                       state->patch_input_file, linenr, err, len, line);
        free(err);
 }
 
@@ -1816,7 +1820,7 @@ static int parse_single_patch(struct apply_state *state,
                return error(_("new file %s depends on old contents"), patch->new_name);
        if (0 < patch->is_delete && newlines)
                return error(_("deleted file %s still has contents"), patch->old_name);
-       if (!patch->is_delete && !newlines && context)
+       if (!patch->is_delete && !newlines && context && state->apply_verbosity > verbosity_silent)
                fprintf_ln(stderr,
                           _("** warning: "
                             "file %s becomes empty but is not deleted"),
@@ -2911,7 +2915,7 @@ static int apply_one_fragment(struct apply_state *state,
                        /* Ignore it, we already handled it */
                        break;
                default:
-                       if (state->apply_verbosely)
+                       if (state->apply_verbosity > verbosity_normal)
                                error(_("invalid start of line: '%c'"), first);
                        applied_pos = -1;
                        goto out;
@@ -3026,7 +3030,7 @@ static int apply_one_fragment(struct apply_state *state,
                                state->apply = 0;
                }
 
-               if (state->apply_verbosely && applied_pos != pos) {
+               if (state->apply_verbosity > verbosity_normal && applied_pos != pos) {
                        int offset = applied_pos - pos;
                        if (state->apply_in_reverse)
                                offset = 0 - offset;
@@ -3041,14 +3045,14 @@ static int apply_one_fragment(struct apply_state *state,
                 * Warn if it was necessary to reduce the number
                 * of context lines.
                 */
-               if ((leading != frag->leading) ||
-                   (trailing != frag->trailing))
+               if ((leading != frag->leading ||
+                    trailing != frag->trailing) && state->apply_verbosity > verbosity_silent)
                        fprintf_ln(stderr, _("Context reduced to (%ld/%ld)"
                                             " to apply fragment at %d"),
                                   leading, trailing, applied_pos+1);
                update_image(state, img, applied_pos, &preimage, &postimage);
        } else {
-               if (state->apply_verbosely)
+               if (state->apply_verbosity > verbosity_normal)
                        error(_("while searching for:\n%.*s"),
                              (int)(old - oldlines), oldlines);
        }
@@ -3539,7 +3543,8 @@ static int try_threeway(struct apply_state *state,
                 read_blob_object(&buf, pre_sha1, patch->old_mode))
                return error("repository lacks the necessary blob to fall back on 3-way merge.");
 
-       fprintf(stderr, "Falling back to three-way merge...\n");
+       if (state->apply_verbosity > verbosity_silent)
+               fprintf(stderr, "Falling back to three-way merge...\n");
 
        img = strbuf_detach(&buf, &len);
        prepare_image(&tmp_image, img, len, 1);
@@ -3569,7 +3574,9 @@ static int try_threeway(struct apply_state *state,
        status = three_way_merge(image, patch->new_name,
                                 pre_sha1, our_sha1, post_sha1);
        if (status < 0) {
-               fprintf(stderr, "Failed to fall back on three-way merge...\n");
+               if (state->apply_verbosity > verbosity_silent)
+                       fprintf(stderr,
+                               "Failed to fall back on three-way merge...\n");
                return status;
        }
 
@@ -3581,9 +3588,15 @@ static int try_threeway(struct apply_state *state,
                        hashcpy(patch->threeway_stage[0].hash, pre_sha1);
                hashcpy(patch->threeway_stage[1].hash, our_sha1);
                hashcpy(patch->threeway_stage[2].hash, post_sha1);
-               fprintf(stderr, "Applied patch to '%s' with conflicts.\n", patch->new_name);
+               if (state->apply_verbosity > verbosity_silent)
+                       fprintf(stderr,
+                               "Applied patch to '%s' with conflicts.\n",
+                               patch->new_name);
        } else {
-               fprintf(stderr, "Applied patch to '%s' cleanly.\n", patch->new_name);
+               if (state->apply_verbosity > verbosity_silent)
+                       fprintf(stderr,
+                               "Applied patch to '%s' cleanly.\n",
+                               patch->new_name);
        }
        return 0;
 }
@@ -3956,7 +3969,7 @@ static int check_patch_list(struct apply_state *state, struct patch *patch)
        prepare_fn_table(state, patch);
        while (patch) {
                int res;
-               if (state->apply_verbosely)
+               if (state->apply_verbosity > verbosity_normal)
                        say_patch_name(stderr,
                                       _("Checking patch %s..."), patch);
                res = check_patch(state, patch);
@@ -4472,7 +4485,7 @@ static int write_out_one_reject(struct apply_state *state, struct patch *patch)
        }
 
        if (!cnt) {
-               if (state->apply_verbosely)
+               if (state->apply_verbosity > verbosity_normal)
                        say_patch_name(stderr,
                                       _("Applied patch %s cleanly."), patch);
                return 0;
@@ -4489,7 +4502,8 @@ static int write_out_one_reject(struct apply_state *state, struct patch *patch)
                            "Applying patch %%s with %d rejects...",
                            cnt),
                    cnt);
-       say_patch_name(stderr, sb.buf, patch);
+       if (state->apply_verbosity > verbosity_silent)
+               say_patch_name(stderr, sb.buf, patch);
        strbuf_release(&sb);
 
        cnt = strlen(patch->new_name);
@@ -4516,10 +4530,12 @@ static int write_out_one_reject(struct apply_state *state, struct patch *patch)
             frag;
             cnt++, frag = frag->next) {
                if (!frag->rejected) {
-                       fprintf_ln(stderr, _("Hunk #%d applied cleanly."), cnt);
+                       if (state->apply_verbosity > verbosity_silent)
+                               fprintf_ln(stderr, _("Hunk #%d applied cleanly."), cnt);
                        continue;
                }
-               fprintf_ln(stderr, _("Rejected hunk #%d."), cnt);
+               if (state->apply_verbosity > verbosity_silent)
+                       fprintf_ln(stderr, _("Rejected hunk #%d."), cnt);
                fprintf(rej, "%.*s", frag->size, frag->patch);
                if (frag->patch[frag->size-1] != '\n')
                        fputc('\n', rej);
@@ -4568,8 +4584,10 @@ static int write_out_results(struct apply_state *state, struct patch *list)
                struct string_list_item *item;
 
                string_list_sort(&cpath);
-               for_each_string_list_item(item, &cpath)
-                       fprintf(stderr, "U %s\n", item->string);
+               if (state->apply_verbosity > verbosity_silent) {
+                       for_each_string_list_item(item, &cpath)
+                               fprintf(stderr, "U %s\n", item->string);
+               }
                string_list_clear(&cpath, 0);
 
                rerere(0);
@@ -4626,7 +4644,7 @@ static int apply_patch(struct apply_state *state,
                        listp = &patch->next;
                }
                else {
-                       if (state->apply_verbosely)
+                       if (state->apply_verbosity > verbosity_normal)
                                say_patch_name(stderr, _("Skipped patch '%s'."), patch);
                        free_patch(patch);
                        skipped_patch++;
@@ -4684,13 +4702,13 @@ static int apply_patch(struct apply_state *state,
                goto end;
        }
 
-       if (state->diffstat)
+       if (state->diffstat && state->apply_verbosity > verbosity_silent)
                stat_patch_list(state, list);
 
-       if (state->numstat)
+       if (state->numstat && state->apply_verbosity > verbosity_silent)
                numstat_patch_list(state, list);
 
-       if (state->summary)
+       if (state->summary && state->apply_verbosity > verbosity_silent)
                summary_patch_list(list);
 
 end: