Re: [PATCH v3 00/32] tree-walk: mostly replace "mode" with "enum object_type"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Mar 16, 2021 at 8:58 AM Ævar Arnfjörð Bjarmason
<avarab@xxxxxxxxx> wrote:
>
> The v2 of this series was broken as noted in
> https://lore.kernel.org/git/87blbjfqkh.fsf@xxxxxxxxxxxxxxxxxxx/
>
> Here's a fixed version. This should actually address all of Elijah's
> comments on v1 + v2.

Yep, this one looks good to me.  Thanks!

>
> It's up to 32 patches because I added some tests for the
> mostly-never-been-tested code being changed in 09/32.
>
> Ævar Arnfjörð Bjarmason (32):
>   diff.c: remove redundant canon_mode() call
>   notes & match-trees: use name_entry's "pathlen" member
>   cache.h: add a comment to object_type()
>   tree-walk.h: add object_type member to name_entry
>   tree-walk.c: migrate to using new "object_type" field when possible
>   fast-import tests: test for sorting dir/file foo v.s. foo.txt
>   mktree tests: test that "mode" is passed when sorting
>   diff tests: test that "mode" is passed when sorting
>   cache.h: have base_name_compare() take "is tree?", not "mode"
>   tree-walk.h users: switch object_type(...) to new .object_type
>   tree.h: format argument lists of read_tree_recursive() users
>   tree.h users: format argument lists in archive.c
>   archive: get rid of 'stage' parameter
>   tree.h API: make read_tree_fn_t take an "enum object_type"
>   tree-walk.h users: migrate "p->mode &&" pattern
>   tree-walk.h users: refactor chained "mode" if/else into switch
>   tree-walk.h users: migrate miscellaneous "mode" to "object_type"
>   merge-tree tests: test for the mode comparison in same_entry()
>   merge-ort: correct reference to test in 62fdec17a11
>   fsck.c: switch on "object_type" in fsck_walk_tree()
>   tree-walk.h users: use temporary variable(s) for "mode"
>   tree-walk.h API: formatting changes for subsequent commit
>   tree-walk.h API: rename get_tree_entry() to get_tree_entry_mode()
>   match-trees: use "tmp" for mode in shift_tree_by()
>   tree-walk.h API: add get_tree_entry_type()
>   tree-walk.h API: document and format tree_entry_extract()
>   tree-entry.h API: rename tree_entry_extract() to
>     tree_entry_extract_mode()
>   tree-walk.h API: add a tree_entry_extract_all() function
>   tree-walk.h API: add get_tree_entry_all()
>   tree-walk.h API: add a get_tree_entry_path() function
>   blame: emit a better error on 'git blame directory'
>   tree-walk.h API: add a tree_entry_extract_type() function
>
>  archive.c                       | 50 +++++++++---------
>  blame.c                         |  9 ++--
>  builtin/checkout.c              |  6 ++-
>  builtin/fast-import.c           | 12 +++--
>  builtin/grep.c                  |  6 +--
>  builtin/log.c                   |  7 +--
>  builtin/ls-files.c              |  6 ++-
>  builtin/ls-tree.c               | 14 +++---
>  builtin/merge-tree.c            | 30 +++++++----
>  builtin/mktree.c                |  4 +-
>  builtin/pack-objects.c          |  6 +--
>  builtin/reflog.c                |  3 +-
>  builtin/rm.c                    |  2 +-
>  builtin/update-index.c          |  6 ++-
>  cache-tree.c                    |  2 +-
>  cache.h                         | 11 ++--
>  combine-diff.c                  |  8 +--
>  delta-islands.c                 |  2 +-
>  diff.c                          |  2 +-
>  fsck.c                          | 23 ++++-----
>  http-push.c                     |  6 ++-
>  line-log.c                      |  2 +-
>  list-objects.c                  | 20 +++++---
>  match-trees.c                   | 52 +++++++++----------
>  merge-ort.c                     | 13 ++---
>  merge-recursive.c               | 33 ++++++------
>  notes.c                         | 14 +++---
>  object-name.c                   |  7 ++-
>  pack-bitmap-write.c             |  8 +--
>  read-cache.c                    | 16 +++---
>  revision.c                      | 12 +++--
>  t/t1450-fsck.sh                 | 66 ++++++++++++++++++++++++
>  t/t4300-merge-tree.sh           | 44 ++++++++++++++++
>  t/t8004-blame-with-conflicts.sh | 21 ++++++++
>  t/t9300-fast-import.sh          | 87 ++++++++++++++++++++++++++++++++
>  tree-diff.c                     | 30 +++++++----
>  tree-walk.c                     | 89 ++++++++++++++++++++++++---------
>  tree-walk.h                     | 63 ++++++++++++++++++++---
>  tree.c                          | 19 ++++---
>  tree.h                          |  5 +-
>  unpack-trees.c                  | 24 +++++----
>  walker.c                        | 22 ++++----
>  42 files changed, 618 insertions(+), 244 deletions(-)
>
> Range-diff:
>  1:  f9bbc30f69 =  1:  26bc38fbdd diff.c: remove redundant canon_mode() call
>  2:  187fc2c3e6 =  2:  8502cf8134 notes & match-trees: use name_entry's "pathlen" member
>  3:  311637c558 =  3:  68133fa6aa cache.h: add a comment to object_type()
>  4:  fecfe3d462 =  4:  9f714d6c01 tree-walk.h: add object_type member to name_entry
>  5:  db961ab5e8 =  5:  6dbf2b0a6a tree-walk.c: migrate to using new "object_type" field when possible
>  -:  ---------- >  6:  354a8e9a2a fast-import tests: test for sorting dir/file foo v.s. foo.txt
>  -:  ---------- >  7:  e2331df28e mktree tests: test that "mode" is passed when sorting
>  -:  ---------- >  8:  9e9486c2ea diff tests: test that "mode" is passed when sorting
>  6:  df2fc76161 !  9:  be5c713336 cache.h: have base_name_compare() take "is tree?", not "mode"
>     @@ Commit message
>          958ba6c96eb (Introduce "base_name_compare()" helper function,
>          2005-05-20).
>
>     +    None of these comparison functions used to have tests, but with
>     +    preceding commits some of them now do. I thought the remainder was
>     +    trivial enough to review without tests, and didn't want to spend more
>     +    time on them.
>     +
>          Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx>
>
>       ## builtin/fast-import.c ##
>      @@ builtin/fast-import.c: static int tecmp0 (const void *_a, const void *_b)
>     + {
>         struct tree_entry *a = *((struct tree_entry**)_a);
>         struct tree_entry *b = *((struct tree_entry**)_b);
>     ++  int istree_a = S_ISDIR(a->versions[0].mode);
>     ++  int istree_b = S_ISDIR(b->versions[0].mode);
>         return base_name_compare(
>      -          a->name->str_dat, a->name->str_len, a->versions[0].mode,
>      -          b->name->str_dat, b->name->str_len, b->versions[0].mode);
>     -+          a->name->str_dat, a->name->str_len, 1,
>     -+          b->name->str_dat, b->name->str_len, 1);
>     ++          a->name->str_dat, a->name->str_len, istree_a,
>     ++          b->name->str_dat, b->name->str_len, istree_b);
>       }
>
>       static int tecmp1 (const void *_a, const void *_b)
>     -@@ builtin/fast-import.c: static int tecmp1 (const void *_a, const void *_b)
>     + {
>         struct tree_entry *a = *((struct tree_entry**)_a);
>         struct tree_entry *b = *((struct tree_entry**)_b);
>     ++  int istree_a = S_ISDIR(a->versions[1].mode);
>     ++  int istree_b = S_ISDIR(b->versions[1].mode);
>         return base_name_compare(
>      -          a->name->str_dat, a->name->str_len, a->versions[1].mode,
>      -          b->name->str_dat, b->name->str_len, b->versions[1].mode);
>     -+          a->name->str_dat, a->name->str_len, 1,
>     -+          b->name->str_dat, b->name->str_len, 1);
>     ++          a->name->str_dat, a->name->str_len, istree_a,
>     ++          b->name->str_dat, b->name->str_len, istree_b);
>       }
>
>       static void mktree(struct tree_content *t, int v, struct strbuf *b)
>  7:  49d5da8c08 = 10:  43623edddf tree-walk.h users: switch object_type(...) to new .object_type
>  8:  c9d209d496 = 11:  030898f884 tree.h: format argument lists of read_tree_recursive() users
>  9:  a6d2660fe1 = 12:  0ce197950b tree.h users: format argument lists in archive.c
> 10:  15f7f89acc = 13:  051c9f32ac archive: get rid of 'stage' parameter
> 11:  7a71404ea3 = 14:  bc73994b4c tree.h API: make read_tree_fn_t take an "enum object_type"
> 12:  64dc9364ba = 15:  e2b0964228 tree-walk.h users: migrate "p->mode &&" pattern
> 13:  93ed3edbbd = 16:  29dbc4292e tree-walk.h users: refactor chained "mode" if/else into switch
> 14:  7aa48aa34c = 17:  ada6d05176 tree-walk.h users: migrate miscellaneous "mode" to "object_type"
> 15:  3ae81621dc = 18:  01860daa55 merge-tree tests: test for the mode comparison in same_entry()
> 16:  4249ad5c4d = 19:  e4be48fb50 merge-ort: correct reference to test in 62fdec17a11
> 17:  e5e17505dd = 20:  189d2550fb fsck.c: switch on "object_type" in fsck_walk_tree()
> 18:  3f0b884f1f = 21:  3b7b12e6f7 tree-walk.h users: use temporary variable(s) for "mode"
> 19:  174167613b = 22:  6c3a07a327 tree-walk.h API: formatting changes for subsequent commit
> 20:  ec76db613f = 23:  879eb3da2a tree-walk.h API: rename get_tree_entry() to get_tree_entry_mode()
> 21:  11e3494172 ! 24:  d2fa360ab9 tree-walk.h API users: use "tmp" for mode in shift_tree_by()
>     @@ Metadata
>      Author: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx>
>
>       ## Commit message ##
>     -    tree-walk.h API users: use "tmp" for mode in shift_tree_by()
>     +    match-trees: use "tmp" for mode in shift_tree_by()
>
>          Refactor code added in 85e51b783c3 (Make "subtree" part more
>          orthogonal to the rest of merge-recursive., 2008-06-30) to make it
> 22:  b31c106557 = 25:  cc50cfcf51 tree-walk.h API: add get_tree_entry_type()
> 23:  304d5d4d1a = 26:  f642a35482 tree-walk.h API: document and format tree_entry_extract()
> 24:  346453df35 = 27:  a0bcb59fa5 tree-entry.h API: rename tree_entry_extract() to tree_entry_extract_mode()
> 25:  dd012b661e = 28:  c7d4ba7734 tree-walk.h API: add a tree_entry_extract_all() function
> 26:  b6ee8410e3 = 29:  1d5421d67a tree-walk.h API: add get_tree_entry_all()
> 27:  5c98afd9e7 ! 30:  a3e1063ac4 tree-walk.h API: add a get_tree_entry_path() function
>     @@ Commit message
>          need neither the mode nor "enum object_type" parameters filled for
>          them.
>
>     -    There's callers here which doesn't need the "struct object_id" filled
>     -    either, and provides a throwaway variable for us.
>     +    There are callers here which don't need the "struct object_id" filled;
>     +    forcing callers to pass one just requires they create a throwaway
>     +    variable.
>
>          See the following commits for the introduction of such code that's
>          being modified here:
>
>     -     - shift_tree(): 68faf68938e (A new merge stragety 'subtree'.,
>     +     - shift_tree(): 68faf68938e (A new merge stragety[sic] 'subtree'.,
>              2007-02-15) for the shift_tree()
>
>           - tree_has_path(): 96e7ffbdc31 (merge-recursive: check for directory
> 28:  3e7e0f7eb8 ! 31:  da3dd6dd53 blame: emit a better error on 'git blame directory'
>     @@ Commit message
>
>              fatal: no such path 't' in HEAD
>
>     +    The main point of this test is to assert that we're not doing
>     +    something uniquely bad when in a conflicted merge. See
>     +    cd8ae20195 (git-blame shouldn't crash if run in an unmerged tree,
>     +    2007-10-18) and 9aeaab6811 (blame: allow "blame file" in the middle of
>     +    a conflicted merge, 2012-09-11) for the bug the t8004 test was
>     +    originally meant to address.
>     +
>     +    But when extending it let's grep out the specific error message for
>     +    good measure. Having to change it in the future (e.g. as part of my
>     +    parallel series to improve such 'OID does not match type' messages) is
>     +    a small price for ensuring it doesn't regress.
>     +
>          Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx>
>
>       ## blame.c ##
>     @@ t/t8004-blame-with-conflicts.sh: test_expect_success 'blame does not crash with
>      +  test_commit second &&
>      +  test_commit d/file &&
>      +  test_must_fail git blame d 2>expected &&
>     ++  grep "unsupported file type d" expected &&
>      +
>      +  git reset --hard second &&
>      +  >d &&
> 29:  ac1ccf1357 = 32:  80e5cb0b30 tree-walk.h API: add a tree_entry_extract_type() function
> --
> 2.31.0.256.gf0ddda3145
>




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux