* [PATCH 00/22] Kill the_index part 5 @ 2018-11-10 5:46 Nguyễn Thái Ngọc Duy 2018-11-10 5:46 ` [PATCH v2] format-patch: respect --stat in cover letter's diffstat Nguyễn Thái Ngọc Duy ` (3 more replies) 0 siblings, 4 replies; 8+ messages in thread From: Nguyễn Thái Ngọc Duy @ 2018-11-10 5:46 UTC (permalink / raw) To: git; +Cc: Nguyễn Thái Ngọc Duy I lied about part 5 being final. This series contains most of my WIP series [2] except sha1-name.c, read-cache.c and merge-recursive.c because there will be conflicts on 'pu' so they will be in part 6. At least this only results in two small conflicts in sequencer.c. I did start pushing the_repository out of library code [1] in the bottom half of this series. There aren't big surprises except that cache-tree API now take _both_ struct repository and struct index_state. The reason is cache-tree can work on temporary indexes and repo->index is about $GIT_DIR/index. [1] Stefan and I make a good team. He keeps adding the_repository. I keep removing. We both hold hands leading commit counts (with Brian just a bit behind frantically replacing sha1 with oid to keep up). Meanwhile Junio is crying in the corner because of too many conflicts. :-D [2] https://public-inbox.org/git/20181019145237.16079-1-pclouds@gmail.com/ Nguyễn Thái Ngọc Duy (22): wt-status.c: remove implicit dependency on the_index wt-status.c: remove implicit dependency the_repository list-objects-filter.c: remove implicit dependency on the_index list-objects.c: reduce the_repository references notes-merge.c: remove implicit dependency on the_index notes-merge.c: remove implicit dependency the_repository transport.c: remove implicit dependency on the_index sequencer.c: remove implicit dependency on the_index sequencer.c: remove implicit dependency on the_repository blame.c: remove implicit dependency the_repository bisect.c: remove the_repository reference branch.c: remove the_repository reference bundle.c: remove the_repository references cache-tree.c: remove the_repository references delta-islands.c: remove the_repository references diff-lib.c: remove the_repository references line-log.c: remove the_repository reference notes-cache.c: remove the_repository references pack-check.c: remove the_repository references pack-*.c: remove the_repository references rerere.c: remove the_repository references rebase-interactive.c: remove the_repository references bisect.c | 48 ++-- bisect.h | 5 +- blame.c | 39 +-- branch.c | 21 +- branch.h | 8 +- builtin/am.c | 4 +- builtin/bisect--helper.c | 2 +- builtin/branch.c | 6 +- builtin/bundle.c | 7 +- builtin/checkout.c | 5 +- builtin/commit.c | 8 +- builtin/fsck.c | 3 +- builtin/merge-ours.c | 2 +- builtin/merge.c | 2 +- builtin/notes.c | 2 +- builtin/pack-objects.c | 6 +- builtin/pull.c | 3 +- builtin/push.c | 3 +- builtin/read-tree.c | 4 +- builtin/rebase--interactive.c | 19 +- builtin/rebase.c | 13 +- builtin/rerere.c | 10 +- builtin/reset.c | 4 +- builtin/revert.c | 8 +- bundle.c | 26 +- bundle.h | 9 +- cache-tree.c | 26 +- cache-tree.h | 4 +- combine-diff.c | 2 +- delta-islands.c | 24 +- delta-islands.h | 9 +- diff-lib.c | 7 +- diff.c | 12 +- diff.h | 5 +- diffcore-pickaxe.c | 4 +- grep.c | 2 +- line-log.c | 2 +- list-objects-filter.c | 10 +- list-objects-filter.h | 2 + list-objects.c | 13 +- notes-cache.c | 12 +- notes-cache.h | 6 +- notes-merge.c | 16 +- notes-merge.h | 5 +- pack-bitmap-write.c | 6 +- pack-bitmap.c | 13 +- pack-bitmap.h | 3 +- pack-check.c | 9 +- pack-objects.c | 6 +- pack-objects.h | 5 +- pack.h | 4 +- read-cache.c | 2 +- rebase-interactive.c | 6 +- rebase-interactive.h | 5 +- ref-filter.c | 2 +- rerere.c | 26 +- rerere.h | 6 +- sequencer.c | 453 +++++++++++++++++++--------------- sequencer.h | 27 +- transport.c | 9 +- transport.h | 3 +- unpack-trees.c | 2 +- userdiff.c | 5 +- userdiff.h | 4 +- wt-status.c | 94 ++++--- wt-status.h | 21 +- 66 files changed, 650 insertions(+), 489 deletions(-) -- 2.19.1.1231.g84aef82467 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2] format-patch: respect --stat in cover letter's diffstat 2018-11-10 5:46 [PATCH 00/22] Kill the_index part 5 Nguyễn Thái Ngọc Duy @ 2018-11-10 5:46 ` Nguyễn Thái Ngọc Duy 2018-11-12 10:24 ` Laszlo Ersek 2018-11-10 5:46 ` [PATCH 01/22] wt-status.c: remove implicit dependency on the_index Nguyễn Thái Ngọc Duy ` (2 subsequent siblings) 3 siblings, 1 reply; 8+ messages in thread From: Nguyễn Thái Ngọc Duy @ 2018-11-10 5:46 UTC (permalink / raw) To: git; +Cc: Nguyễn Thái Ngọc Duy, Laszlo Ersek, Leif Lindholm Commit 43662b23ab (format-patch: keep cover-letter diffstat wrapped in 72 columns - 2018-01-24) uncondtionally sets stat width to 72 when generating diffstat for the cover letter, ignoring --stat from command line. But it should only do so when stat width is still default (i.e. stat_width == 0). In order to fix this, we should only set stat_width if stat_width is zero. But it will never be. Commit 071dd0ba43 (format-patch: reduce patch diffstat width to 72 - 2018-02-01) makes sure that default stat width will be 72 (ignoring $COLUMNS, but could still be overriden by --stat). So all we need to do here is drop the assignment. Reported-by: Laszlo Ersek <lersek@redhat.com> Helped-by: Leif Lindholm <leif.lindholm@linaro.org> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> --- builtin/log.c | 2 -- t/t4052-stat-output.sh | 48 +++++++++++++++++++++++++++++------------- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/builtin/log.c b/builtin/log.c index 061d4fd864..1a39c6e52a 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -1009,8 +1009,6 @@ static void show_diffstat(struct rev_info *rev, memcpy(&opts, &rev->diffopt, sizeof(opts)); opts.output_format = DIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT; - opts.stat_width = MAIL_DEFAULT_WRAP; - diff_setup_done(&opts); diff_tree_oid(get_commit_tree_oid(origin), diff --git a/t/t4052-stat-output.sh b/t/t4052-stat-output.sh index 6e2cf933f7..28c053849a 100755 --- a/t/t4052-stat-output.sh +++ b/t/t4052-stat-output.sh @@ -44,42 +44,50 @@ show --stat log -1 --stat EOF -while read cmd args +cat >expect.60 <<-'EOF' + ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + +EOF +cat >expect.6030 <<-'EOF' + ...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + +EOF +cat >expect2.60 <<-'EOF' + ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + + ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + +EOF +cat >expect2.6030 <<-'EOF' + ...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + + ...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + +EOF +while read expect cmd args do - cat >expect <<-'EOF' - ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + - EOF test_expect_success "$cmd --stat=width: a long name is given more room when the bar is short" ' git $cmd $args --stat=40 >output && grep " | " output >actual && - test_cmp expect actual + test_cmp $expect.60 actual ' test_expect_success "$cmd --stat-width=width with long name" ' git $cmd $args --stat-width=40 >output && grep " | " output >actual && - test_cmp expect actual + test_cmp $expect.60 actual ' - cat >expect <<-'EOF' - ...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + - EOF test_expect_success "$cmd --stat=...,name-width with long name" ' git $cmd $args --stat=60,30 >output && grep " | " output >actual && - test_cmp expect actual + test_cmp $expect.6030 actual ' test_expect_success "$cmd --stat-name-width with long name" ' git $cmd $args --stat-name-width=30 >output && grep " | " output >actual && - test_cmp expect actual + test_cmp $expect.6030 actual ' done <<\EOF -format-patch -1 --stdout -diff HEAD^ HEAD --stat -show --stat -log -1 --stat +expect2 format-patch --cover-letter -1 --stdout +expect diff HEAD^ HEAD --stat +expect show --stat +expect log -1 --stat EOF @@ -95,6 +103,16 @@ test_expect_success 'preparation for big change tests' ' git commit -m message abcd ' +cat >expect72 <<'EOF' + abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +EOF +test_expect_success "format-patch --cover-letter ignores COLUMNS (big change)" ' + COLUMNS=200 git format-patch -1 --stdout --cover-letter >output && + grep " | " output >actual && + test_cmp expect72 actual +' + cat >expect72 <<'EOF' abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ EOF -- 2.19.1.1005.gac84295441 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2] format-patch: respect --stat in cover letter's diffstat 2018-11-10 5:46 ` [PATCH v2] format-patch: respect --stat in cover letter's diffstat Nguyễn Thái Ngọc Duy @ 2018-11-12 10:24 ` Laszlo Ersek 0 siblings, 0 replies; 8+ messages in thread From: Laszlo Ersek @ 2018-11-12 10:24 UTC (permalink / raw) To: Nguyễn Thái Ngọc Duy, git; +Cc: Leif Lindholm On 11/10/18 06:46, Nguyễn Thái Ngọc Duy wrote: > Commit 43662b23ab (format-patch: keep cover-letter diffstat wrapped in > 72 columns - 2018-01-24) uncondtionally sets stat width to 72 when > generating diffstat for the cover letter, ignoring --stat from command > line. But it should only do so when stat width is still default > (i.e. stat_width == 0). > > In order to fix this, we should only set stat_width if stat_width is > zero. But it will never be. Commit 071dd0ba43 (format-patch: reduce > patch diffstat width to 72 - 2018-02-01) makes sure that default stat > width will be 72 (ignoring $COLUMNS, but could still be overriden by > --stat). So all we need to do here is drop the assignment. > > Reported-by: Laszlo Ersek <lersek@redhat.com> > Helped-by: Leif Lindholm <leif.lindholm@linaro.org> > Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> > --- > builtin/log.c | 2 -- > t/t4052-stat-output.sh | 48 +++++++++++++++++++++++++++++------------- > 2 files changed, 33 insertions(+), 17 deletions(-) * This submission should have been posted as v3, not v2. V2 was posted at https://public-inbox.org/git/20181107164953.24965-1-pclouds@gmail.com/ * Comparing the patch emails, the only difference is that this version renames "expect.40" to "expect.60". This should have been mentioned in a cover letter, or in the Notes section of the current submission. * In my response to the (original) v2 posting, at https://public-inbox.org/git/f0f95dd0-1a9e-01d0-70f4-3c6d5450df70@redhat.com/ I stated that I didn't try to run the test suite, and gave my T-b (under the circumstances described there). Given that the change in v3 (= this submission) is limited to the test case, I think my T-b should have been carried forward. Thanks Laszlo > diff --git a/builtin/log.c b/builtin/log.c > index 061d4fd864..1a39c6e52a 100644 > --- a/builtin/log.c > +++ b/builtin/log.c > @@ -1009,8 +1009,6 @@ static void show_diffstat(struct rev_info *rev, > > memcpy(&opts, &rev->diffopt, sizeof(opts)); > opts.output_format = DIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT; > - opts.stat_width = MAIL_DEFAULT_WRAP; > - > diff_setup_done(&opts); > > diff_tree_oid(get_commit_tree_oid(origin), > diff --git a/t/t4052-stat-output.sh b/t/t4052-stat-output.sh > index 6e2cf933f7..28c053849a 100755 > --- a/t/t4052-stat-output.sh > +++ b/t/t4052-stat-output.sh > @@ -44,42 +44,50 @@ show --stat > log -1 --stat > EOF > > -while read cmd args > +cat >expect.60 <<-'EOF' > + ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + > +EOF > +cat >expect.6030 <<-'EOF' > + ...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + > +EOF > +cat >expect2.60 <<-'EOF' > + ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + > + ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + > +EOF > +cat >expect2.6030 <<-'EOF' > + ...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + > + ...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + > +EOF > +while read expect cmd args > do > - cat >expect <<-'EOF' > - ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + > - EOF > test_expect_success "$cmd --stat=width: a long name is given more room when the bar is short" ' > git $cmd $args --stat=40 >output && > grep " | " output >actual && > - test_cmp expect actual > + test_cmp $expect.60 actual > ' > > test_expect_success "$cmd --stat-width=width with long name" ' > git $cmd $args --stat-width=40 >output && > grep " | " output >actual && > - test_cmp expect actual > + test_cmp $expect.60 actual > ' > > - cat >expect <<-'EOF' > - ...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + > - EOF > test_expect_success "$cmd --stat=...,name-width with long name" ' > git $cmd $args --stat=60,30 >output && > grep " | " output >actual && > - test_cmp expect actual > + test_cmp $expect.6030 actual > ' > > test_expect_success "$cmd --stat-name-width with long name" ' > git $cmd $args --stat-name-width=30 >output && > grep " | " output >actual && > - test_cmp expect actual > + test_cmp $expect.6030 actual > ' > done <<\EOF > -format-patch -1 --stdout > -diff HEAD^ HEAD --stat > -show --stat > -log -1 --stat > +expect2 format-patch --cover-letter -1 --stdout > +expect diff HEAD^ HEAD --stat > +expect show --stat > +expect log -1 --stat > EOF > > > @@ -95,6 +103,16 @@ test_expect_success 'preparation for big change tests' ' > git commit -m message abcd > ' > > +cat >expect72 <<'EOF' > + abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > + abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > +EOF > +test_expect_success "format-patch --cover-letter ignores COLUMNS (big change)" ' > + COLUMNS=200 git format-patch -1 --stdout --cover-letter >output && > + grep " | " output >actual && > + test_cmp expect72 actual > +' > + > cat >expect72 <<'EOF' > abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > EOF > ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 01/22] wt-status.c: remove implicit dependency on the_index 2018-11-10 5:46 [PATCH 00/22] Kill the_index part 5 Nguyễn Thái Ngọc Duy 2018-11-10 5:46 ` [PATCH v2] format-patch: respect --stat in cover letter's diffstat Nguyễn Thái Ngọc Duy @ 2018-11-10 5:46 ` Nguyễn Thái Ngọc Duy 2018-11-10 5:46 ` [PATCH 02/22] wt-status.c: remove implicit dependency the_repository Nguyễn Thái Ngọc Duy 2018-11-10 5:46 ` [PATCH 03/22] list-objects-filter.c: remove implicit dependency on the_index Nguyễn Thái Ngọc Duy 3 siblings, 0 replies; 8+ messages in thread From: Nguyễn Thái Ngọc Duy @ 2018-11-10 5:46 UTC (permalink / raw) To: git; +Cc: Nguyễn Thái Ngọc Duy Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> --- builtin/commit.c | 2 +- builtin/pull.c | 3 +- builtin/rebase.c | 7 +++-- sequencer.c | 8 ++--- wt-status.c | 76 +++++++++++++++++++++++++++--------------------- wt-status.h | 17 +++++++---- 6 files changed, 66 insertions(+), 47 deletions(-) diff --git a/builtin/commit.c b/builtin/commit.c index 074bd9a551..6637a928a7 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -185,7 +185,7 @@ static void determine_whence(struct wt_status *s) static void status_init_config(struct wt_status *s, config_fn_t fn) { - wt_status_prepare(s); + wt_status_prepare(the_repository, s); init_diff_ui_defaults(); git_config(fn, s); determine_whence(s); diff --git a/builtin/pull.c b/builtin/pull.c index c21aa276f1..6026ce1a69 100644 --- a/builtin/pull.c +++ b/builtin/pull.c @@ -888,7 +888,8 @@ int cmd_pull(int argc, const char **argv, const char *prefix) die(_("Updating an unborn branch with changes added to the index.")); if (!autostash) - require_clean_work_tree(N_("pull with rebase"), + require_clean_work_tree(the_repository, + N_("pull with rebase"), _("please commit or stash them."), 1, 0); if (get_rebase_fork_point(&rebase_fork_point, repo, *refspecs)) diff --git a/builtin/rebase.c b/builtin/rebase.c index 0ee06aa363..b9eb958454 100644 --- a/builtin/rebase.c +++ b/builtin/rebase.c @@ -983,7 +983,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix) &lock_file); rollback_lock_file(&lock_file); - if (has_unstaged_changes(1)) { + if (has_unstaged_changes(the_repository, 1)) { puts(_("You must edit all merge conflicts and then\n" "mark them as resolved using git add")); exit(1); @@ -1351,7 +1351,8 @@ int cmd_rebase(int argc, const char **argv, const char *prefix) update_index_if_able(&the_index, &lock_file); rollback_lock_file(&lock_file); - if (has_unstaged_changes(1) || has_uncommitted_changes(1)) { + if (has_unstaged_changes(the_repository, 1) || + has_uncommitted_changes(the_repository, 1)) { const char *autostash = state_dir_path("autostash", &options); struct child_process stash = CHILD_PROCESS_INIT; @@ -1397,7 +1398,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix) } } - if (require_clean_work_tree("rebase", + if (require_clean_work_tree(the_repository, "rebase", _("Please commit or stash them."), 1, 1)) { ret = 1; goto cleanup; diff --git a/sequencer.c b/sequencer.c index 9e1ab3a2a7..0b8f18fd36 100644 --- a/sequencer.c +++ b/sequencer.c @@ -2773,7 +2773,7 @@ static int do_exec(const char *command_line) if (discard_cache() < 0 || read_cache() < 0) return error(_("could not read index")); - dirty = require_clean_work_tree("rebase", NULL, 1, 1); + dirty = require_clean_work_tree(the_repository, "rebase", NULL, 1, 1); if (status) { warning(_("execution failed: %s\n%s" @@ -3714,10 +3714,10 @@ static int commit_staged_changes(struct replay_opts *opts, unsigned int flags = ALLOW_EMPTY | EDIT_MSG; unsigned int final_fixup = 0, is_clean; - if (has_unstaged_changes(1)) + if (has_unstaged_changes(the_repository, 1)) return error(_("cannot rebase: You have unstaged changes.")); - is_clean = !has_uncommitted_changes(0); + is_clean = !has_uncommitted_changes(the_repository, 0); if (file_exists(rebase_path_amend())) { struct strbuf rev = STRBUF_INIT; @@ -4847,7 +4847,7 @@ int complete_action(struct replay_opts *opts, unsigned flags, if (checkout_onto(opts, onto_name, oid_to_hex(&oid), orig_head)) return -1; ; - if (require_clean_work_tree("rebase", "", 1, 1)) + if (require_clean_work_tree(the_repository, "rebase", "", 1, 1)) return -1; return sequencer_continue(opts); diff --git a/wt-status.c b/wt-status.c index 187568a112..6d401b2c24 100644 --- a/wt-status.c +++ b/wt-status.c @@ -119,9 +119,10 @@ static void status_printf_more(struct wt_status *s, const char *color, va_end(ap); } -void wt_status_prepare(struct wt_status *s) +void wt_status_prepare(struct repository *r, struct wt_status *s) { memset(s, 0, sizeof(*s)); + s->repo = r; memcpy(s->color_palette, default_wt_status_colors, sizeof(default_wt_status_colors)); s->show_untracked_files = SHOW_NORMAL_UNTRACKED_FILES; @@ -494,19 +495,19 @@ static void wt_status_collect_changed_cb(struct diff_queue_struct *q, } } -static int unmerged_mask(const char *path) +static int unmerged_mask(struct index_state *istate, const char *path) { int pos, mask; const struct cache_entry *ce; - pos = cache_name_pos(path, strlen(path)); + pos = index_name_pos(istate, path, strlen(path)); if (0 <= pos) return 0; mask = 0; pos = -pos-1; - while (pos < active_nr) { - ce = active_cache[pos++]; + while (pos < istate->cache_nr) { + ce = istate->cache[pos++]; if (strcmp(ce->name, path) || !ce_stage(ce)) break; mask |= (1 << (ce_stage(ce) - 1)); @@ -566,7 +567,8 @@ static void wt_status_collect_updated_cb(struct diff_queue_struct *q, s->committable = 1; break; case DIFF_STATUS_UNMERGED: - d->stagemask = unmerged_mask(p->two->path); + d->stagemask = unmerged_mask(s->repo->index, + p->two->path); /* * Don't bother setting {mode,oid}_{head,index} since the print * code will output the stage values directly and not use the @@ -585,7 +587,7 @@ static void wt_status_collect_changes_worktree(struct wt_status *s) { struct rev_info rev; - repo_init_revisions(the_repository, &rev, NULL); + repo_init_revisions(s->repo, &rev, NULL); setup_revisions(0, NULL, &rev, NULL); rev.diffopt.output_format |= DIFF_FORMAT_CALLBACK; rev.diffopt.flags.dirty_submodules = 1; @@ -610,7 +612,7 @@ static void wt_status_collect_changes_index(struct wt_status *s) struct rev_info rev; struct setup_revision_opt opt; - repo_init_revisions(the_repository, &rev, NULL); + repo_init_revisions(s->repo, &rev, NULL); memset(&opt, 0, sizeof(opt)); opt.def = s->is_initial ? empty_tree_oid_hex() : s->reference; setup_revisions(0, NULL, &rev, &opt); @@ -643,14 +645,15 @@ static void wt_status_collect_changes_index(struct wt_status *s) static void wt_status_collect_changes_initial(struct wt_status *s) { + struct index_state *istate = s->repo->index; int i; - for (i = 0; i < active_nr; i++) { + for (i = 0; i < istate->cache_nr; i++) { struct string_list_item *it; struct wt_status_change_data *d; - const struct cache_entry *ce = active_cache[i]; + const struct cache_entry *ce = istate->cache[i]; - if (!ce_path_match(&the_index, ce, &s->pathspec, NULL)) + if (!ce_path_match(istate, ce, &s->pathspec, NULL)) continue; if (ce_intent_to_add(ce)) continue; @@ -684,6 +687,7 @@ static void wt_status_collect_untracked(struct wt_status *s) int i; struct dir_struct dir; uint64_t t_begin = getnanotime(); + struct index_state *istate = s->repo->index; if (!s->show_untracked_files) return; @@ -698,25 +702,25 @@ static void wt_status_collect_untracked(struct wt_status *s) if (s->show_ignored_mode == SHOW_MATCHING_IGNORED) dir.flags |= DIR_SHOW_IGNORED_TOO_MODE_MATCHING; } else { - dir.untracked = the_index.untracked; + dir.untracked = istate->untracked; } setup_standard_excludes(&dir); - fill_directory(&dir, &the_index, &s->pathspec); + fill_directory(&dir, istate, &s->pathspec); for (i = 0; i < dir.nr; i++) { struct dir_entry *ent = dir.entries[i]; - if (cache_name_is_other(ent->name, ent->len) && - dir_path_match(&the_index, ent, &s->pathspec, 0, NULL)) + if (index_name_is_other(istate, ent->name, ent->len) && + dir_path_match(istate, ent, &s->pathspec, 0, NULL)) string_list_insert(&s->untracked, ent->name); free(ent); } for (i = 0; i < dir.ignored_nr; i++) { struct dir_entry *ent = dir.ignored[i]; - if (cache_name_is_other(ent->name, ent->len) && - dir_path_match(&the_index, ent, &s->pathspec, 0, NULL)) + if (index_name_is_other(istate, ent->name, ent->len) && + dir_path_match(istate, ent, &s->pathspec, 0, NULL)) string_list_insert(&s->ignored, ent->name); free(ent); } @@ -1009,7 +1013,7 @@ static void wt_longstatus_print_verbose(struct wt_status *s) int dirty_submodules; const char *c = color(WT_STATUS_HEADER, s); - repo_init_revisions(the_repository, &rev, NULL); + repo_init_revisions(s->repo, &rev, NULL); rev.diffopt.flags.allow_textconv = 1; rev.diffopt.ita_invisible_in_index = 1; @@ -1326,7 +1330,7 @@ static void show_rebase_in_progress(struct wt_status *s, _(" (use \"git rebase --abort\" to check out the original branch)")); } } else if (s->state.rebase_in_progress || - !stat(git_path_merge_msg(the_repository), &st)) { + !stat(git_path_merge_msg(s->repo), &st)) { print_rebase_state(s, color); if (s->hints) status_printf_ln(s, color, @@ -2135,6 +2139,7 @@ static void wt_porcelain_v2_print_unmerged_entry( struct wt_status *s) { struct wt_status_change_data *d = it->util; + struct index_state *istate = s->repo->index; const struct cache_entry *ce; struct strbuf buf_index = STRBUF_INIT; const char *path_index = NULL; @@ -2173,11 +2178,11 @@ static void wt_porcelain_v2_print_unmerged_entry( */ memset(stages, 0, sizeof(stages)); sum = 0; - pos = cache_name_pos(it->string, strlen(it->string)); + pos = index_name_pos(istate, it->string, strlen(it->string)); assert(pos < 0); pos = -pos-1; - while (pos < active_nr) { - ce = active_cache[pos++]; + while (pos < istate->cache_nr) { + ce = istate->cache[pos++]; stage = ce_stage(ce); if (strcmp(ce->name, it->string) || !stage) break; @@ -2302,12 +2307,12 @@ void wt_status_print(struct wt_status *s) /** * Returns 1 if there are unstaged changes, 0 otherwise. */ -int has_unstaged_changes(int ignore_submodules) +int has_unstaged_changes(struct repository *r, int ignore_submodules) { struct rev_info rev_info; int result; - repo_init_revisions(the_repository, &rev_info, NULL); + repo_init_revisions(r, &rev_info, NULL); if (ignore_submodules) { rev_info.diffopt.flags.ignore_submodules = 1; rev_info.diffopt.flags.override_submodule_config = 1; @@ -2321,15 +2326,16 @@ int has_unstaged_changes(int ignore_submodules) /** * Returns 1 if there are uncommitted changes, 0 otherwise. */ -int has_uncommitted_changes(int ignore_submodules) +int has_uncommitted_changes(struct repository *r, + int ignore_submodules) { struct rev_info rev_info; int result; - if (is_cache_unborn()) + if (is_index_unborn(r->index)) return 0; - repo_init_revisions(the_repository, &rev_info, NULL); + repo_init_revisions(r, &rev_info, NULL); if (ignore_submodules) rev_info.diffopt.flags.ignore_submodules = 1; rev_info.diffopt.flags.quick = 1; @@ -2340,7 +2346,7 @@ int has_uncommitted_changes(int ignore_submodules) * We have no head (or it's corrupt); use the empty tree, * which will complain if the index is non-empty. */ - struct tree *tree = lookup_tree(the_repository, the_hash_algo->empty_tree); + struct tree *tree = lookup_tree(r, the_hash_algo->empty_tree); add_pending_object(&rev_info, &tree->object, ""); } @@ -2353,24 +2359,28 @@ int has_uncommitted_changes(int ignore_submodules) * If the work tree has unstaged or uncommitted changes, dies with the * appropriate message. */ -int require_clean_work_tree(const char *action, const char *hint, int ignore_submodules, int gently) +int require_clean_work_tree(struct repository *r, + const char *action, + const char *hint, + int ignore_submodules, + int gently) { struct lock_file lock_file = LOCK_INIT; int err = 0, fd; fd = hold_locked_index(&lock_file, 0); - refresh_cache(REFRESH_QUIET); + refresh_index(r->index, REFRESH_QUIET, NULL, NULL, NULL); if (0 <= fd) - update_index_if_able(&the_index, &lock_file); + update_index_if_able(r->index, &lock_file); rollback_lock_file(&lock_file); - if (has_unstaged_changes(ignore_submodules)) { + if (has_unstaged_changes(r, ignore_submodules)) { /* TRANSLATORS: the action is e.g. "pull with rebase" */ error(_("cannot %s: You have unstaged changes."), _(action)); err = 1; } - if (has_uncommitted_changes(ignore_submodules)) { + if (has_uncommitted_changes(r, ignore_submodules)) { if (err) error(_("additionally, your index contains uncommitted changes.")); else diff --git a/wt-status.h b/wt-status.h index 1fcf93afbf..8375e816fb 100644 --- a/wt-status.h +++ b/wt-status.h @@ -7,6 +7,7 @@ #include "pathspec.h" #include "remote.h" +struct repository; struct worktree; enum color_wt_status { @@ -83,6 +84,7 @@ struct wt_status_state { }; struct wt_status { + struct repository *repo; int is_initial; char *branch; const char *reference; @@ -128,7 +130,7 @@ struct wt_status { size_t wt_status_locate_end(const char *s, size_t len); void wt_status_add_cut_line(FILE *fp); -void wt_status_prepare(struct wt_status *s); +void wt_status_prepare(struct repository *r, struct wt_status *s); void wt_status_print(struct wt_status *s); void wt_status_collect(struct wt_status *s); void wt_status_collect_free_buffers(struct wt_status *s); @@ -144,9 +146,14 @@ __attribute__((format (printf, 3, 4))) void status_printf(struct wt_status *s, const char *color, const char *fmt, ...); /* The following functions expect that the caller took care of reading the index. */ -int has_unstaged_changes(int ignore_submodules); -int has_uncommitted_changes(int ignore_submodules); -int require_clean_work_tree(const char *action, const char *hint, - int ignore_submodules, int gently); +int has_unstaged_changes(struct repository *repo, + int ignore_submodules); +int has_uncommitted_changes(struct repository *repo, + int ignore_submodules); +int require_clean_work_tree(struct repository *repo, + const char *action, + const char *hint, + int ignore_submodules, + int gently); #endif /* STATUS_H */ -- 2.19.1.1231.g84aef82467 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 02/22] wt-status.c: remove implicit dependency the_repository 2018-11-10 5:46 [PATCH 00/22] Kill the_index part 5 Nguyễn Thái Ngọc Duy 2018-11-10 5:46 ` [PATCH v2] format-patch: respect --stat in cover letter's diffstat Nguyễn Thái Ngọc Duy 2018-11-10 5:46 ` [PATCH 01/22] wt-status.c: remove implicit dependency on the_index Nguyễn Thái Ngọc Duy @ 2018-11-10 5:46 ` Nguyễn Thái Ngọc Duy 2018-11-10 5:46 ` [PATCH 03/22] list-objects-filter.c: remove implicit dependency on the_index Nguyễn Thái Ngọc Duy 3 siblings, 0 replies; 8+ messages in thread From: Nguyễn Thái Ngọc Duy @ 2018-11-10 5:46 UTC (permalink / raw) To: git; +Cc: Nguyễn Thái Ngọc Duy Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> --- ref-filter.c | 2 +- wt-status.c | 18 ++++++++++-------- wt-status.h | 4 +++- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/ref-filter.c b/ref-filter.c index 0c45ed9d94..c4eaf30313 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -1413,7 +1413,7 @@ char *get_head_description(void) struct strbuf desc = STRBUF_INIT; struct wt_status_state state; memset(&state, 0, sizeof(state)); - wt_status_get_state(&state, 1); + wt_status_get_state(the_repository, &state, 1); if (state.rebase_in_progress || state.rebase_interactive_in_progress) { if (state.branch) diff --git a/wt-status.c b/wt-status.c index 6d401b2c24..e582c54238 100644 --- a/wt-status.c +++ b/wt-status.c @@ -755,7 +755,7 @@ void wt_status_collect(struct wt_status *s) wt_status_collect_changes_index(s); wt_status_collect_untracked(s); - wt_status_get_state(&s->state, s->branch && !strcmp(s->branch, "HEAD")); + wt_status_get_state(s->repo, &s->state, s->branch && !strcmp(s->branch, "HEAD")); if (s->state.merge_in_progress && !has_unmerged(s)) s->committable = 1; } @@ -1482,7 +1482,8 @@ static int grab_1st_switch(struct object_id *ooid, struct object_id *noid, return 1; } -static void wt_status_get_detached_from(struct wt_status_state *state) +static void wt_status_get_detached_from(struct repository *r, + struct wt_status_state *state) { struct grab_1st_switch_cbdata cb; struct commit *commit; @@ -1499,7 +1500,7 @@ static void wt_status_get_detached_from(struct wt_status_state *state) /* sha1 is a commit? match without further lookup */ (oideq(&cb.noid, &oid) || /* perhaps sha1 is a tag, try to dereference to a commit */ - ((commit = lookup_commit_reference_gently(the_repository, &oid, 1)) != NULL && + ((commit = lookup_commit_reference_gently(r, &oid, 1)) != NULL && oideq(&cb.noid, &commit->object.oid)))) { const char *from = ref; if (!skip_prefix(from, "refs/tags/", &from)) @@ -1556,30 +1557,31 @@ int wt_status_check_bisect(const struct worktree *wt, return 0; } -void wt_status_get_state(struct wt_status_state *state, +void wt_status_get_state(struct repository *r, + struct wt_status_state *state, int get_detached_from) { struct stat st; struct object_id oid; - if (!stat(git_path_merge_head(the_repository), &st)) { + if (!stat(git_path_merge_head(r), &st)) { state->merge_in_progress = 1; } else if (wt_status_check_rebase(NULL, state)) { ; /* all set */ - } else if (!stat(git_path_cherry_pick_head(the_repository), &st) && + } else if (!stat(git_path_cherry_pick_head(r), &st) && !get_oid("CHERRY_PICK_HEAD", &oid)) { state->cherry_pick_in_progress = 1; oidcpy(&state->cherry_pick_head_oid, &oid); } wt_status_check_bisect(NULL, state); - if (!stat(git_path_revert_head(the_repository), &st) && + if (!stat(git_path_revert_head(r), &st) && !get_oid("REVERT_HEAD", &oid)) { state->revert_in_progress = 1; oidcpy(&state->revert_head_oid, &oid); } if (get_detached_from) - wt_status_get_detached_from(state); + wt_status_get_detached_from(r, state); } static void wt_longstatus_print_state(struct wt_status *s) diff --git a/wt-status.h b/wt-status.h index 8375e816fb..3a95975032 100644 --- a/wt-status.h +++ b/wt-status.h @@ -134,7 +134,9 @@ void wt_status_prepare(struct repository *r, struct wt_status *s); void wt_status_print(struct wt_status *s); void wt_status_collect(struct wt_status *s); void wt_status_collect_free_buffers(struct wt_status *s); -void wt_status_get_state(struct wt_status_state *state, int get_detached_from); +void wt_status_get_state(struct repository *repo, + struct wt_status_state *state, + int get_detached_from); int wt_status_check_rebase(const struct worktree *wt, struct wt_status_state *state); int wt_status_check_bisect(const struct worktree *wt, -- 2.19.1.1231.g84aef82467 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 03/22] list-objects-filter.c: remove implicit dependency on the_index 2018-11-10 5:46 [PATCH 00/22] Kill the_index part 5 Nguyễn Thái Ngọc Duy ` (2 preceding siblings ...) 2018-11-10 5:46 ` [PATCH 02/22] wt-status.c: remove implicit dependency the_repository Nguyễn Thái Ngọc Duy @ 2018-11-10 5:46 ` Nguyễn Thái Ngọc Duy 3 siblings, 0 replies; 8+ messages in thread From: Nguyễn Thái Ngọc Duy @ 2018-11-10 5:46 UTC (permalink / raw) To: git; +Cc: Nguyễn Thái Ngọc Duy While at there, since we have access to struct repository now, eliminate the only the_repository reference in this file. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> --- list-objects-filter.c | 10 +++++++--- list-objects-filter.h | 2 ++ list-objects.c | 9 ++++++--- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/list-objects-filter.c b/list-objects-filter.c index 765f3df3b0..a62624a1ce 100644 --- a/list-objects-filter.c +++ b/list-objects-filter.c @@ -34,6 +34,7 @@ struct filter_blobs_none_data { }; static enum list_objects_filter_result filter_blobs_none( + struct repository *r, enum list_objects_filter_situation filter_situation, struct object *obj, const char *pathname, @@ -88,6 +89,7 @@ struct filter_trees_none_data { }; static enum list_objects_filter_result filter_trees_none( + struct repository *r, enum list_objects_filter_situation filter_situation, struct object *obj, const char *pathname, @@ -144,6 +146,7 @@ struct filter_blobs_limit_data { }; static enum list_objects_filter_result filter_blobs_limit( + struct repository *r, enum list_objects_filter_situation filter_situation, struct object *obj, const char *pathname, @@ -171,7 +174,7 @@ static enum list_objects_filter_result filter_blobs_limit( assert(obj->type == OBJ_BLOB); assert((obj->flags & SEEN) == 0); - t = oid_object_info(the_repository, &obj->oid, &object_length); + t = oid_object_info(r, &obj->oid, &object_length); if (t != OBJ_BLOB) { /* probably OBJ_NONE */ /* * We DO NOT have the blob locally, so we cannot @@ -249,6 +252,7 @@ struct filter_sparse_data { }; static enum list_objects_filter_result filter_sparse( + struct repository *r, enum list_objects_filter_situation filter_situation, struct object *obj, const char *pathname, @@ -268,7 +272,7 @@ static enum list_objects_filter_result filter_sparse( dtype = DT_DIR; val = is_excluded_from_list(pathname, strlen(pathname), filename, &dtype, &filter_data->el, - &the_index); + r->index); if (val < 0) val = filter_data->array_frame[filter_data->nr].defval; @@ -331,7 +335,7 @@ static enum list_objects_filter_result filter_sparse( dtype = DT_REG; val = is_excluded_from_list(pathname, strlen(pathname), filename, &dtype, &filter_data->el, - &the_index); + r->index); if (val < 0) val = frame->defval; if (val > 0) { diff --git a/list-objects-filter.h b/list-objects-filter.h index 52b4a84da9..1d45a4ad57 100644 --- a/list-objects-filter.h +++ b/list-objects-filter.h @@ -4,6 +4,7 @@ struct list_objects_filter_options; struct object; struct oidset; +struct repository; /* * During list-object traversal we allow certain objects to be @@ -60,6 +61,7 @@ enum list_objects_filter_situation { }; typedef enum list_objects_filter_result (*filter_object_fn)( + struct repository *r, enum list_objects_filter_situation filter_situation, struct object *obj, const char *pathname, diff --git a/list-objects.c b/list-objects.c index c41cc80db5..0cfd646026 100644 --- a/list-objects.c +++ b/list-objects.c @@ -55,7 +55,8 @@ static void process_blob(struct traversal_context *ctx, pathlen = path->len; strbuf_addstr(path, name); if ((obj->flags & NOT_USER_GIVEN) && ctx->filter_fn) - r = ctx->filter_fn(LOFS_BLOB, obj, + r = ctx->filter_fn(ctx->revs->repo, + LOFS_BLOB, obj, path->buf, &path->buf[pathlen], ctx->filter_data); if (r & LOFR_MARK_SEEN) @@ -175,7 +176,8 @@ static void process_tree(struct traversal_context *ctx, strbuf_addstr(base, name); if ((obj->flags & NOT_USER_GIVEN) && ctx->filter_fn) - r = ctx->filter_fn(LOFS_BEGIN_TREE, obj, + r = ctx->filter_fn(ctx->revs->repo, + LOFS_BEGIN_TREE, obj, base->buf, &base->buf[baselen], ctx->filter_data); if (r & LOFR_MARK_SEEN) @@ -191,7 +193,8 @@ static void process_tree(struct traversal_context *ctx, process_tree_contents(ctx, tree, base); if ((obj->flags & NOT_USER_GIVEN) && ctx->filter_fn) { - r = ctx->filter_fn(LOFS_END_TREE, obj, + r = ctx->filter_fn(ctx->revs->repo, + LOFS_END_TREE, obj, base->buf, &base->buf[baselen], ctx->filter_data); if (r & LOFR_MARK_SEEN) -- 2.19.1.1231.g84aef82467 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH] format-patch: respect --stat when explicitly specified @ 2018-11-06 10:48 Leif Lindholm 2018-11-07 16:49 ` [PATCH v2] format-patch: respect --stat in cover letter's diffstat Nguyễn Thái Ngọc Duy 0 siblings, 1 reply; 8+ messages in thread From: Leif Lindholm @ 2018-11-06 10:48 UTC (permalink / raw) To: git; +Cc: Laszlo Ersek, Nguyễn Thái Ngọc Duy, Junio C Hamano Commit 43662b23abbd ("format-patch: keep cover-letter diffstat wrapped in 72 columns") made format-patch keep the diffstat to within 72 characters. However, it does this even when --stat is explicitly set on the command line. Make it possible to explicitly override the new mechanism, using --stat, matching the functionality before this change. This also matches the output in the case of non-cover-letter files. Cc: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Cc: Junio C Hamano <gitster@pobox.com> Reported-by: Laszlo Ersek <lersek@redhat.com> Signed-off-by: Leif Lindholm <leif.lindholm@linaro.org> --- Note: In TianoCore we have LotsOfGloriousFilesNamedInReallyLongCamelCase, so our official submission guidelines specify the use of --stat. builtin/log.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/builtin/log.c b/builtin/log.c index 061d4fd86..07e6ae2c1 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -1009,7 +1009,8 @@ static void show_diffstat(struct rev_info *rev, memcpy(&opts, &rev->diffopt, sizeof(opts)); opts.output_format = DIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT; - opts.stat_width = MAIL_DEFAULT_WRAP; + if (rev->diffopt.stat_width == -1) + opts.stat_width = MAIL_DEFAULT_WRAP; diff_setup_done(&opts); -- 2.11.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2] format-patch: respect --stat in cover letter's diffstat 2018-11-06 10:48 [PATCH] format-patch: respect --stat when explicitly specified Leif Lindholm @ 2018-11-07 16:49 ` Nguyễn Thái Ngọc Duy 2018-11-07 22:21 ` Laszlo Ersek 0 siblings, 1 reply; 8+ messages in thread From: Nguyễn Thái Ngọc Duy @ 2018-11-07 16:49 UTC (permalink / raw) To: leif.lindholm; +Cc: git, gitster, lersek, pclouds Commit 43662b23ab (format-patch: keep cover-letter diffstat wrapped in 72 columns - 2018-01-24) uncondtionally sets stat width to 72 when generating diffstat for the cover letter, ignoring --stat from command line. But it should only do so when stat width is still default (i.e. stat_width == 0). In order to fix this, we should only set stat_width if stat_width is zero. But it will never be. Commit 071dd0ba43 (format-patch: reduce patch diffstat width to 72 - 2018-02-01) makes sure that default stat width will be 72 (ignoring $COLUMNS, but could still be overriden by --stat). So all we need to do here is drop the assignment. Reported-by: Laszlo Ersek <lersek@redhat.com> Helped-by: Leif Lindholm <leif.lindholm@linaro.org> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> --- builtin/log.c | 2 -- t/t4052-stat-output.sh | 48 +++++++++++++++++++++++++++++------------- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/builtin/log.c b/builtin/log.c index 061d4fd864..1a39c6e52a 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -1009,8 +1009,6 @@ static void show_diffstat(struct rev_info *rev, memcpy(&opts, &rev->diffopt, sizeof(opts)); opts.output_format = DIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT; - opts.stat_width = MAIL_DEFAULT_WRAP; - diff_setup_done(&opts); diff_tree_oid(get_commit_tree_oid(origin), diff --git a/t/t4052-stat-output.sh b/t/t4052-stat-output.sh index 6e2cf933f7..b1ce0d9b97 100755 --- a/t/t4052-stat-output.sh +++ b/t/t4052-stat-output.sh @@ -44,42 +44,50 @@ show --stat log -1 --stat EOF -while read cmd args +cat >expect.40 <<-'EOF' + ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + +EOF +cat >expect.6030 <<-'EOF' + ...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + +EOF +cat >expect2.40 <<-'EOF' + ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + + ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + +EOF +cat >expect2.6030 <<-'EOF' + ...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + + ...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + +EOF +while read expect cmd args do - cat >expect <<-'EOF' - ...aaaaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + - EOF test_expect_success "$cmd --stat=width: a long name is given more room when the bar is short" ' git $cmd $args --stat=40 >output && grep " | " output >actual && - test_cmp expect actual + test_cmp $expect.40 actual ' test_expect_success "$cmd --stat-width=width with long name" ' git $cmd $args --stat-width=40 >output && grep " | " output >actual && - test_cmp expect actual + test_cmp $expect.40 actual ' - cat >expect <<-'EOF' - ...aaaaaaaaaaaaaaaaaaaaaaaaaaa | 1 + - EOF test_expect_success "$cmd --stat=...,name-width with long name" ' git $cmd $args --stat=60,30 >output && grep " | " output >actual && - test_cmp expect actual + test_cmp $expect.6030 actual ' test_expect_success "$cmd --stat-name-width with long name" ' git $cmd $args --stat-name-width=30 >output && grep " | " output >actual && - test_cmp expect actual + test_cmp $expect.6030 actual ' done <<\EOF -format-patch -1 --stdout -diff HEAD^ HEAD --stat -show --stat -log -1 --stat +expect2 format-patch --cover-letter -1 --stdout +expect diff HEAD^ HEAD --stat +expect show --stat +expect log -1 --stat EOF @@ -95,6 +103,16 @@ test_expect_success 'preparation for big change tests' ' git commit -m message abcd ' +cat >expect72 <<'EOF' + abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +EOF +test_expect_success "format-patch --cover-letter ignores COLUMNS (big change)" ' + COLUMNS=200 git format-patch -1 --stdout --cover-letter >output && + grep " | " output >actual && + test_cmp expect72 actual +' + cat >expect72 <<'EOF' abcd | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ EOF -- 2.19.1.1005.gac84295441 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2] format-patch: respect --stat in cover letter's diffstat 2018-11-07 16:49 ` [PATCH v2] format-patch: respect --stat in cover letter's diffstat Nguyễn Thái Ngọc Duy @ 2018-11-07 22:21 ` Laszlo Ersek 0 siblings, 0 replies; 8+ messages in thread From: Laszlo Ersek @ 2018-11-07 22:21 UTC (permalink / raw) To: Nguyễn Thái Ngọc Duy, leif.lindholm; +Cc: git, gitster On 11/07/18 17:49, Nguyễn Thái Ngọc Duy wrote: > Commit 43662b23ab (format-patch: keep cover-letter diffstat wrapped in > 72 columns - 2018-01-24) uncondtionally sets stat width to 72 when > generating diffstat for the cover letter, ignoring --stat from command > line. But it should only do so when stat width is still default > (i.e. stat_width == 0). > > In order to fix this, we should only set stat_width if stat_width is > zero. But it will never be. Commit 071dd0ba43 (format-patch: reduce > patch diffstat width to 72 - 2018-02-01) makes sure that default stat > width will be 72 (ignoring $COLUMNS, but could still be overriden by > --stat). So all we need to do here is drop the assignment. > > Reported-by: Laszlo Ersek <lersek@redhat.com> > Helped-by: Leif Lindholm <leif.lindholm@linaro.org> > Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> > --- > builtin/log.c | 2 -- > t/t4052-stat-output.sh | 48 +++++++++++++++++++++++++++++------------- > 2 files changed, 33 insertions(+), 17 deletions(-) > > diff --git a/builtin/log.c b/builtin/log.c > index 061d4fd864..1a39c6e52a 100644 > --- a/builtin/log.c > +++ b/builtin/log.c > @@ -1009,8 +1009,6 @@ static void show_diffstat(struct rev_info *rev, > > memcpy(&opts, &rev->diffopt, sizeof(opts)); > opts.output_format = DIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT; > - opts.stat_width = MAIL_DEFAULT_WRAP; > - > diff_setup_done(&opts); > > diff_tree_oid(get_commit_tree_oid(origin), Because I plan to use the patch on top of v2.19.1 (until the next major release, v2.20, is made), that's also where I applied and tested the patch. With master @ a4b8ab5363a3, this patch targets show_diffstat(). At v2.19.1, commit fa5b7ea670f4 ("format-patch: allow additional generated content in make_cover_letter()", 2018-07-23) had not occurred yet, so there the subject code still lived in make_cover_letter(). On my end, git-am has applied the hunk to make_cover_letter() seamlessly. I tested the patch with "--stat=1000 --stat-graph-width=20", formatting an edk2 series that contained commit 1ed6498c4a02 ("UefiCpuPkg/CommonFeature: Skip locking when the feature is disabled", 2018-11-07). The long pathname "UefiCpuPkg/Library/CpuCommonFeaturesLib/FeatureControl.c" is no longer truncated in the cumulative diffstat, in the cover letter. Tested-by: Laszlo Ersek <lersek@redhat.com> > diff --git a/t/t4052-stat-output.sh b/t/t4052-stat-output.sh > [...] I didn't try to run the test suite (I wasn't conscious of it anyway); I built & installed git with nice make -j4 prefix=... all doc info nice make prefix=... install install-doc install-html install-info I also wasn't watching the make log. So if those make targets don't include the test suite, then I didn't exercise the new test case. Thank you! Laszlo ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2018-11-12 10:24 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-11-10 5:46 [PATCH 00/22] Kill the_index part 5 Nguyễn Thái Ngọc Duy 2018-11-10 5:46 ` [PATCH v2] format-patch: respect --stat in cover letter's diffstat Nguyễn Thái Ngọc Duy 2018-11-12 10:24 ` Laszlo Ersek 2018-11-10 5:46 ` [PATCH 01/22] wt-status.c: remove implicit dependency on the_index Nguyễn Thái Ngọc Duy 2018-11-10 5:46 ` [PATCH 02/22] wt-status.c: remove implicit dependency the_repository Nguyễn Thái Ngọc Duy 2018-11-10 5:46 ` [PATCH 03/22] list-objects-filter.c: remove implicit dependency on the_index Nguyễn Thái Ngọc Duy -- strict thread matches above, loose matches on Subject: below -- 2018-11-06 10:48 [PATCH] format-patch: respect --stat when explicitly specified Leif Lindholm 2018-11-07 16:49 ` [PATCH v2] format-patch: respect --stat in cover letter's diffstat Nguyễn Thái Ngọc Duy 2018-11-07 22:21 ` Laszlo Ersek
Code repositories for project(s) associated with this public inbox https://80x24.org/mirrors/git.git 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 read-only IMAP folder(s) and NNTP newsgroup(s).