git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 06/29] cache.h: have base_name_compare() take "is tree?", not "mode"

From
Elijah Newren <newren@gmail.com>
Date
Mar 16, 2021, 05:49 UTC
Message-ID
<CABPp-BGE+e1er6qFuG90j9+eVG34O8TN=imX=jtcb+jbQjN1QQ@mail.gmail.com>
In-Reply-To
<20210316021312.13927-7-avarab@gmail.com>

On Mon, Mar 15, 2021 at 7:13 PM Ævar Arnfjörð Bjarmason <avarab@gmail.com> wrote:

Show 49 quoted lines
>
> Change the base_name_compare() API and the related df_name_compare()
> function to take a boolean argument indicating whether the entry is a
> tree or not, instead of having them call S_ISDIR(mode) on their own.
>
> This makes use of the new "object_type" field in the "name_entry".
>
> The API being modified here was originally added way back in
> 958ba6c96eb (Introduce "base_name_compare()" helper function,
> 2005-05-20).
>
> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
> ---
>  builtin/fast-import.c |  8 ++++----
>  builtin/mktree.c      |  4 ++--
>  cache.h               |  4 ++--
>  combine-diff.c        |  8 +++++---
>  match-trees.c         |  6 ++++--
>  merge-ort.c           |  4 ++--
>  merge-recursive.c     |  6 +++---
>  read-cache.c          | 16 ++++++++--------
>  tree-diff.c           |  7 +++++--
>  unpack-trees.c        | 15 ++++++++-------
>  10 files changed, 43 insertions(+), 35 deletions(-)
>
> diff --git a/builtin/fast-import.c b/builtin/fast-import.c
> index dd4d09ceceb..ce4613c1595 100644
> --- a/builtin/fast-import.c
> +++ b/builtin/fast-import.c
> @@ -1288,8 +1288,8 @@ 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);
>         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);
>  }
>
>  static int tecmp1 (const void *_a, const void *_b)
> @@ -1297,8 +1297,8 @@ 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);
>         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);
>  }

Um...these last two hunks have not changed since the last round. They introduce a nasty bug, as mentioned in my review last time and highlighted in my response on the cover letter. They need to be fixed, and more testcases verifying their correct operation should be added.

This is the kind of thing that makes me really scared about these refactorings; it's too easy to introduce changes that will write semi-broken objects in the wild, which we will then have to deal with for the rest of forever.

Show 246 quoted lines
>  static void mktree(struct tree_content *t, int v, struct strbuf *b)
> diff --git a/builtin/mktree.c b/builtin/mktree.c
> index 891991b00d6..2c1973229ac 100644
> --- a/builtin/mktree.c
> +++ b/builtin/mktree.c
> @@ -37,8 +37,8 @@ static int ent_compare(const void *a_, const void *b_)
>  {
>         struct treeent *a = *(struct treeent **)a_;
>         struct treeent *b = *(struct treeent **)b_;
> -       return base_name_compare(a->name, a->len, a->mode,
> -                                b->name, b->len, b->mode);
> +       return base_name_compare(a->name, a->len, S_ISDIR(a->mode),
> +                                b->name, b->len, S_ISDIR(b->mode));
>  }
>
>  static void write_tree(struct object_id *oid)
> diff --git a/cache.h b/cache.h
> index ae0c0bef5c2..e38b1e1688c 100644
> --- a/cache.h
> +++ b/cache.h
> @@ -1506,8 +1506,8 @@ int repo_interpret_branch_name(struct repository *r,
>
>  int validate_headref(const char *ref);
>
> -int base_name_compare(const char *name1, int len1, int mode1, const char *name2, int len2, int mode2);
> -int df_name_compare(const char *name1, int len1, int mode1, const char *name2, int len2, int mode2);
> +int base_name_compare(const char *name1, int len1, int istree1, const char *name2, int len2, int istree2);
> +int df_name_compare(const char *name1, int len1, int istree1, const char *name2, int len2, int istree2);
>  int name_compare(const char *name1, size_t len1, const char *name2, size_t len2);
>  int cache_name_stage_compare(const char *name1, int len1, int stage1, const char *name2, int len2, int stage2);
>
> diff --git a/combine-diff.c b/combine-diff.c
> index 9228aebc16b..ad7058a6f5d 100644
> --- a/combine-diff.c
> +++ b/combine-diff.c
> @@ -16,11 +16,13 @@
>  static int compare_paths(const struct combine_diff_path *one,
>                           const struct diff_filespec *two)
>  {
> -       if (!S_ISDIR(one->mode) && !S_ISDIR(two->mode))
> +       int istree_one = S_ISDIR(one->mode);
> +       int istree_two = S_ISDIR(two->mode);
> +       if (!istree_one && !istree_two)
>                 return strcmp(one->path, two->path);
>
> -       return base_name_compare(one->path, strlen(one->path), one->mode,
> -                                two->path, strlen(two->path), two->mode);
> +       return base_name_compare(one->path, strlen(one->path), istree_one,
> +                                two->path, strlen(two->path), istree_two);
>  }
>
>  static int filename_changed(char status)
> diff --git a/match-trees.c b/match-trees.c
> index 1011357ad0c..a28c19a62a5 100644
> --- a/match-trees.c
> +++ b/match-trees.c
> @@ -67,8 +67,10 @@ static void *fill_tree_desc_strict(struct tree_desc *desc,
>  static int base_name_entries_compare(const struct name_entry *a,
>                                      const struct name_entry *b)
>  {
> -       return base_name_compare(a->path, tree_entry_len(a), a->mode,
> -                                b->path, tree_entry_len(b), b->mode);
> +       int istree_a = (a->object_type == OBJ_TREE);
> +       int istree_b = (b->object_type == OBJ_TREE);
> +       return base_name_compare(a->path, tree_entry_len(a), istree_a,
> +                                b->path, tree_entry_len(b), istree_b);
>  }
>
>  /*
> diff --git a/merge-ort.c b/merge-ort.c
> index 603d30c5217..4075d13aaab 100644
> --- a/merge-ort.c
> +++ b/merge-ort.c
> @@ -2390,8 +2390,8 @@ static int tree_entry_order(const void *a_, const void *b_)
>
>         const struct merged_info *ami = a->util;
>         const struct merged_info *bmi = b->util;
> -       return base_name_compare(a->string, strlen(a->string), ami->result.mode,
> -                                b->string, strlen(b->string), bmi->result.mode);
> +       return base_name_compare(a->string, strlen(a->string), S_ISDIR(ami->result.mode),
> +                                b->string, strlen(b->string), S_ISDIR(bmi->result.mode));
>  }
>
>  static void write_tree(struct object_id *result_oid,
> diff --git a/merge-recursive.c b/merge-recursive.c
> index 3d9207455b3..1c9b08695a3 100644
> --- a/merge-recursive.c
> +++ b/merge-recursive.c
> @@ -554,12 +554,12 @@ static int string_list_df_name_compare(const char *one, const char *two)
>          *
>          * To achieve this, we sort with df_name_compare and provide
>          * the mode S_IFDIR so that D/F conflicts will sort correctly.
> -        * We use the mode S_IFDIR for everything else for simplicity,
> +        * We say we have a directory for everything else for simplicity,
>          * since in other cases any changes in their order due to
>          * sorting cause no problems for us.
>          */
> -       int cmp = df_name_compare(one, onelen, S_IFDIR,
> -                                 two, twolen, S_IFDIR);
> +       int cmp = df_name_compare(one, onelen, 1, two, twolen, 1);
> +
>         /*
>          * Now that 'foo' and 'foo/bar' compare equal, we have to make sure
>          * that 'foo' comes before 'foo/bar'.
> diff --git a/read-cache.c b/read-cache.c
> index 1e9a50c6c73..4257fbd8a08 100644
> --- a/read-cache.c
> +++ b/read-cache.c
> @@ -462,8 +462,8 @@ int ie_modified(struct index_state *istate,
>         return 0;
>  }
>
> -int base_name_compare(const char *name1, int len1, int mode1,
> -                     const char *name2, int len2, int mode2)
> +int base_name_compare(const char *name1, int len1, int istree1,
> +                     const char *name2, int len2, int istree2)
>  {
>         unsigned char c1, c2;
>         int len = len1 < len2 ? len1 : len2;
> @@ -474,9 +474,9 @@ int base_name_compare(const char *name1, int len1, int mode1,
>                 return cmp;
>         c1 = name1[len];
>         c2 = name2[len];
> -       if (!c1 && S_ISDIR(mode1))
> +       if (!c1 && istree1)
>                 c1 = '/';
> -       if (!c2 && S_ISDIR(mode2))
> +       if (!c2 && istree2)
>                 c2 = '/';
>         return (c1 < c2) ? -1 : (c1 > c2) ? 1 : 0;
>  }
> @@ -491,8 +491,8 @@ int base_name_compare(const char *name1, int len1, int mode1,
>   * This is used by routines that want to traverse the git namespace
>   * but then handle conflicting entries together when possible.
>   */
> -int df_name_compare(const char *name1, int len1, int mode1,
> -                   const char *name2, int len2, int mode2)
> +int df_name_compare(const char *name1, int len1, int istree1,
> +                   const char *name2, int len2, int istree2)
>  {
>         int len = len1 < len2 ? len1 : len2, cmp;
>         unsigned char c1, c2;
> @@ -504,10 +504,10 @@ int df_name_compare(const char *name1, int len1, int mode1,
>         if (len1 == len2)
>                 return 0;
>         c1 = name1[len];
> -       if (!c1 && S_ISDIR(mode1))
> +       if (!c1 && istree1)
>                 c1 = '/';
>         c2 = name2[len];
> -       if (!c2 && S_ISDIR(mode2))
> +       if (!c2 && istree2)
>                 c2 = '/';
>         if (c1 == '/' && !c2)
>                 return 0;
> diff --git a/tree-diff.c b/tree-diff.c
> index 7cebbb327e2..6ec180331fb 100644
> --- a/tree-diff.c
> +++ b/tree-diff.c
> @@ -50,6 +50,7 @@ static int tree_entry_pathcmp(struct tree_desc *t1, struct tree_desc *t2)
>  {
>         struct name_entry *e1, *e2;
>         int cmp;
> +       int istree_e1, istree_e2;
>
>         /* empty descriptors sort after valid tree entries */
>         if (!t1->size)
> @@ -58,9 +59,11 @@ static int tree_entry_pathcmp(struct tree_desc *t1, struct tree_desc *t2)
>                 return -1;
>
>         e1 = &t1->entry;
> +       istree_e1 = (e1->object_type == OBJ_TREE);
>         e2 = &t2->entry;
> -       cmp = base_name_compare(e1->path, tree_entry_len(e1), e1->mode,
> -                               e2->path, tree_entry_len(e2), e2->mode);
> +       istree_e2 = (e2->object_type == OBJ_TREE);
> +       cmp = base_name_compare(e1->path, tree_entry_len(e1), istree_e1,
> +                               e2->path, tree_entry_len(e2), istree_e2);
>         return cmp;
>  }
>
> diff --git a/unpack-trees.c b/unpack-trees.c
> index eb8fcda31ba..d9d573df986 100644
> --- a/unpack-trees.c
> +++ b/unpack-trees.c
> @@ -925,7 +925,7 @@ static int traverse_trees_recursive(int n, unsigned long dirmask,
>  static int do_compare_entry_piecewise(const struct cache_entry *ce,
>                                       const struct traverse_info *info,
>                                       const char *name, size_t namelen,
> -                                     unsigned mode)
> +                                     unsigned istree)
>  {
>         int pathlen, ce_len;
>         const char *ce_name;
> @@ -933,7 +933,7 @@ static int do_compare_entry_piecewise(const struct cache_entry *ce,
>         if (info->prev) {
>                 int cmp = do_compare_entry_piecewise(ce, info->prev,
>                                                      info->name, info->namelen,
> -                                                    info->mode);
> +                                                    S_ISDIR(info->mode));
>                 if (cmp)
>                         return cmp;
>         }
> @@ -947,13 +947,13 @@ static int do_compare_entry_piecewise(const struct cache_entry *ce,
>         ce_len -= pathlen;
>         ce_name = ce->name + pathlen;
>
> -       return df_name_compare(ce_name, ce_len, S_IFREG, name, namelen, mode);
> +       return df_name_compare(ce_name, ce_len, 0, name, namelen, istree);
>  }
>
>  static int do_compare_entry(const struct cache_entry *ce,
>                             const struct traverse_info *info,
>                             const char *name, size_t namelen,
> -                           unsigned mode)
> +                           unsigned istree)
>  {
>         int pathlen, ce_len;
>         const char *ce_name;
> @@ -965,7 +965,7 @@ static int do_compare_entry(const struct cache_entry *ce,
>          * it is quicker to use the precomputed version.
>          */
>         if (!info->traverse_path)
> -               return do_compare_entry_piecewise(ce, info, name, namelen, mode);
> +               return do_compare_entry_piecewise(ce, info, name, namelen, istree);
>
>         cmp = strncmp(ce->name, info->traverse_path, info->pathlen);
>         if (cmp)
> @@ -980,12 +980,13 @@ static int do_compare_entry(const struct cache_entry *ce,
>         ce_len -= pathlen;
>         ce_name = ce->name + pathlen;
>
> -       return df_name_compare(ce_name, ce_len, S_IFREG, name, namelen, mode);
> +       return df_name_compare(ce_name, ce_len, 0, name, namelen, istree);
>  }
>
>  static int compare_entry(const struct cache_entry *ce, const struct traverse_info *info, const struct name_entry *n)
>  {
> -       int cmp = do_compare_entry(ce, info, n->path, n->pathlen, n->mode);
> +       int istree = (n->object_type == OBJ_TREE);
> +       int cmp = do_compare_entry(ce, info, n->path, n->pathlen, istree);
>         if (cmp)
>                 return cmp;
>
> --
> 2.31.0.rc2.211.g1d0b8788b3
The isdir -> istree updates are nice; thanks.
Previous: Ævar Arnfjörð BjarmasonNext: Ævar Arnfjörð Bjarmason
Message 142 of 262 in “read_tree(): pass "int stage" as context to read_tree_recursive()”
  1. read_tree(): pass "int stage" as context to read_tree_recursive()Nguyễn Thái Ngọc Duy, Apr 18, 2009
  2. 0/7 Move the read_tree() function to its only userÆvar Arnfjörð Bjarmason, Mar 6, 2021
  3. Elijah NewrenMar 6, 2021
  4. 2/6 tree.c API: move read_tree() into builtin/ls-files.cÆvar Arnfjörð Bjarmason, Mar 8, 2021
  5. Junio C HamanoMar 8, 2021
  6. Junio C HamanoMar 12, 2021
  7. 1/6 ls-files tests: add meaningful --with-tree testsÆvar Arnfjörð Bjarmason, Mar 8, 2021
  8. 3/6 ls-files: don't needlessly pass around stage variableÆvar Arnfjörð Bjarmason, Mar 8, 2021
  9. Junio C HamanoMar 8, 2021
  10. 0/6 Move the read_tree() function to its only userÆvar Arnfjörð Bjarmason, Mar 8, 2021
  11. 02/30 notes & match-trees: use name_entry's "pathlen" memberÆvar Arnfjörð Bjarmason, Mar 8, 2021
  12. 00/30 tree-walk: mostly "mode" to "enum object_type"Ævar Arnfjörð Bjarmason, Mar 8, 2021
  13. Elijah NewrenMar 9, 2021
  14. Elijah NewrenMar 9, 2021
  15. Ævar Arnfjörð BjarmasonMar 9, 2021
  16. Elijah NewrenMar 12, 2021
  17. 02/29 notes & match-trees: use name_entry's "pathlen" memberÆvar Arnfjörð Bjarmason, Mar 16, 2021
  18. 00/29 tree-walk: mostly replace "mode" with "enum object_type"Ævar Arnfjörð Bjarmason, Mar 16, 2021
  19. Elijah NewrenMar 16, 2021
  20. Ævar Arnfjörð BjarmasonMar 16, 2021
  21. 01/32 diff.c: remove redundant canon_mode() callÆvar Arnfjörð Bjarmason, Mar 16, 2021
  22. 02/32 notes & match-trees: use name_entry's "pathlen" memberÆvar Arnfjörð Bjarmason, Mar 16, 2021
  23. 03/32 cache.h: add a comment to object_type()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  24. 00/32 tree-walk: mostly replace "mode" with "enum object_type"Ævar Arnfjörð Bjarmason, Mar 16, 2021
  25. Elijah NewrenMar 16, 2021
  26. 00/29 tree-walk: mostly replace "mode" with "enum object_type"Ævar Arnfjörð Bjarmason, Mar 21, 2021
  27. 01/29 notes & match-trees: use name_entry's "pathlen" memberÆvar Arnfjörð Bjarmason, Mar 21, 2021
  28. 02/29 cache.h: add a comment to object_type()Ævar Arnfjörð Bjarmason, Mar 21, 2021
  29. 05/29 fast-import tests: test for sorting dir/file foo v.s. foo.txtÆvar Arnfjörð Bjarmason, Mar 21, 2021
  30. 04/29 tree-walk.c: migrate to using new "object_type" field when possibleÆvar Arnfjörð Bjarmason, Mar 21, 2021
  31. 08/29 cache.h: have base_name_compare() take "is tree?", not "mode"Ævar Arnfjörð Bjarmason, Mar 21, 2021
  32. 09/29 tree-walk.h users: switch object_type(...) to new .object_typeÆvar Arnfjörð Bjarmason, Mar 21, 2021
  33. 15/29 merge-tree tests: test for the mode comparison in same_entry()Ævar Arnfjörð Bjarmason, Mar 21, 2021
  34. 06/29 mktree tests: test that "mode" is passed when sortingÆvar Arnfjörð Bjarmason, Mar 21, 2021
  35. 11/29 tree.h API: make read_tree_fn_t take an "enum object_type"Ævar Arnfjörð Bjarmason, Mar 21, 2021
  36. 03/29 tree-walk.h: add object_type member to name_entryÆvar Arnfjörð Bjarmason, Mar 21, 2021
  37. 13/29 tree-walk.h users: refactor chained "mode" if/else into switchÆvar Arnfjörð Bjarmason, Mar 21, 2021
  38. 14/29 tree-walk.h users: migrate miscellaneous "mode" to "object_type"Ævar Arnfjörð Bjarmason, Mar 21, 2021
  39. 12/29 tree-walk.h users: migrate "p->mode &&" patternÆvar Arnfjörð Bjarmason, Mar 21, 2021
  40. 10/29 tree.h: format argument lists of read_tree_recursive() usersÆvar Arnfjörð Bjarmason, Mar 21, 2021
  41. 18/29 tree-walk.h users: use temporary variable(s) for "mode"Ævar Arnfjörð Bjarmason, Mar 21, 2021
  42. 17/29 fsck.c: switch on "object_type" in fsck_walk_tree()Ævar Arnfjörð Bjarmason, Mar 21, 2021
  43. 07/29 diff tests: test that "mode" is passed when sortingÆvar Arnfjörð Bjarmason, Mar 21, 2021
  44. 16/29 merge-ort: correct reference to test in 62fdec17a11Ævar Arnfjörð Bjarmason, Mar 21, 2021
  45. 21/29 match-trees: use "tmp" for mode in shift_tree_by()Ævar Arnfjörð Bjarmason, Mar 21, 2021
  46. 19/29 tree-walk.h API: formatting changes for subsequent commitÆvar Arnfjörð Bjarmason, Mar 21, 2021
  47. 23/29 tree-walk.h API: document and format tree_entry_extract()Ævar Arnfjörð Bjarmason, Mar 21, 2021
  48. 22/29 tree-walk.h API: add get_tree_entry_type()Ævar Arnfjörð Bjarmason, Mar 21, 2021
  49. 20/29 tree-walk.h API: rename get_tree_entry() to get_tree_entry_mode()Ævar Arnfjörð Bjarmason, Mar 21, 2021
  50. 24/29 tree-entry.h API: rename tree_entry_extract() to tree_entry_extract_mode()Ævar Arnfjörð Bjarmason, Mar 21, 2021
  51. 28/29 blame: emit a better error on 'git blame directory'Ævar Arnfjörð Bjarmason, Mar 21, 2021
  52. 29/29 tree-walk.h API: add a tree_entry_extract_type() functionÆvar Arnfjörð Bjarmason, Mar 21, 2021
  53. 25/29 tree-walk.h API: add a tree_entry_extract_all() functionÆvar Arnfjörð Bjarmason, Mar 21, 2021
  54. 26/29 tree-walk.h API: add get_tree_entry_all()Ævar Arnfjörð Bjarmason, Mar 21, 2021
  55. 27/29 tree-walk.h API: add a get_tree_entry_path() functionÆvar Arnfjörð Bjarmason, Mar 21, 2021
  56. Junio C HamanoMar 21, 2021
  57. Ævar Arnfjörð BjarmasonMar 21, 2021
  58. 0/2 diff --no-index: fix test blind spotsÆvar Arnfjörð Bjarmason, Mar 21, 2021
  59. 2/2 diff --no-index tests: test mode normalizationÆvar Arnfjörð Bjarmason, Mar 21, 2021
  60. 1/2 diff --no-index tests: add test for --exit-codeÆvar Arnfjörð Bjarmason, Mar 21, 2021
  61. Ramsay JonesMar 21, 2021
  62. Junio C HamanoMar 21, 2021
  63. Ævar Arnfjörð BjarmasonMar 21, 2021
  64. 0/2 diff --no-index: fix test blind spotsÆvar Arnfjörð Bjarmason, Mar 21, 2021
  65. 1/2 diff --no-index tests: add test for --exit-codeÆvar Arnfjörð Bjarmason, Mar 21, 2021
  66. 2/2 diff --no-index tests: test mode normalizationÆvar Arnfjörð Bjarmason, Mar 21, 2021
  67. Junio C HamanoMar 22, 2021
  68. Junio C HamanoMar 22, 2021
  69. 0/2 diff --no-index: fix test blind spotsÆvar Arnfjörð Bjarmason, Mar 23, 2021
  70. 2/2 diff --no-index tests: test mode normalizationÆvar Arnfjörð Bjarmason, Mar 23, 2021
  71. 1/2 diff --no-index tests: add test for --exit-codeÆvar Arnfjörð Bjarmason, Mar 23, 2021
  72. Junio C HamanoMar 23, 2021
  73. Junio C HamanoMar 21, 2021
  74. Ævar Arnfjörð BjarmasonMar 21, 2021
  75. 00/18 tree-walk.h: slimmed downÆvar Arnfjörð Bjarmason, Mar 31, 2021
  76. 01/18 cache.h: add a comment to object_type()Ævar Arnfjörð Bjarmason, Mar 31, 2021
  77. Junio C HamanoMar 31, 2021
  78. 02/18 merge-ort: correct reference to test in 62fdec17a11Ævar Arnfjörð Bjarmason, Mar 31, 2021
  79. 05/18 mktree tests: test that "mode" is passed when sortingÆvar Arnfjörð Bjarmason, Mar 31, 2021
  80. Junio C HamanoMar 31, 2021
  81. 04/18 fast-import tests: test for sorting dir/file foo v.s. foo.txtÆvar Arnfjörð Bjarmason, Mar 31, 2021
  82. 03/18 cache.h: have base_name_compare() take "is tree?", not "mode"Ævar Arnfjörð Bjarmason, Mar 31, 2021
  83. Junio C HamanoMar 31, 2021
  84. 08/18 blame: emit a better error on 'git blame directory'Ævar Arnfjörð Bjarmason, Mar 31, 2021
  85. Junio C HamanoMar 31, 2021
  86. Ævar Arnfjörð BjarmasonApr 2, 2021
  87. Junio C HamanoApr 2, 2021
  88. 09/18 notes & match-trees: use name_entry's "pathlen" memberÆvar Arnfjörð Bjarmason, Mar 31, 2021
  89. Junio C HamanoMar 31, 2021
  90. 10/18 tree-walk.h users: use temporary variable(s) for "mode"Ævar Arnfjörð Bjarmason, Mar 31, 2021
  91. 07/18 merge-tree tests: test for the mode comparison in same_entry()Ævar Arnfjörð Bjarmason, Mar 31, 2021
  92. Junio C HamanoMar 31, 2021
  93. 16/18 tree-walk.h API: add a get_tree_entry_path() functionÆvar Arnfjörð Bjarmason, Mar 31, 2021
  94. Junio C HamanoApr 1, 2021
  95. Ævar Arnfjörð BjarmasonApr 2, 2021
  96. 17/18 tree-walk.h API: document and format tree_entry_extract()Ævar Arnfjörð Bjarmason, Mar 31, 2021
  97. Junio C HamanoApr 1, 2021
  98. 13/18 tree-walk.h API: formatting changes for subsequent commitÆvar Arnfjörð Bjarmason, Mar 31, 2021
  99. 15/18 tree-walk.h API: rename get_tree_entry() to get_tree_entry_mode()Ævar Arnfjörð Bjarmason, Mar 31, 2021
  100. 06/18 diff tests: test that "mode" is passed when sortingÆvar Arnfjörð Bjarmason, Mar 31, 2021
  101. Junio C HamanoMar 31, 2021
  102. 12/18 tree.h: format argument lists of read_tree() usersÆvar Arnfjörð Bjarmason, Mar 31, 2021
  103. 11/18 match-trees: use "tmp" for mode in shift_tree_by()Ævar Arnfjörð Bjarmason, Mar 31, 2021
  104. Junio C HamanoMar 31, 2021
  105. 14/18 tree-walk.h API doc: improve documentation of get_tree_entry()Ævar Arnfjörð Bjarmason, Mar 31, 2021
  106. Junio C HamanoApr 1, 2021
  107. Ævar Arnfjörð BjarmasonApr 2, 2021
  108. 18/18 tree-entry.h API: rename tree_entry_extract() to tree_entry_extract_mode()Ævar Arnfjörð Bjarmason, Mar 31, 2021
  109. Junio C HamanoApr 1, 2021
  110. 05/32 tree-walk.c: migrate to using new "object_type" field when possibleÆvar Arnfjörð Bjarmason, Mar 16, 2021
  111. 04/32 tree-walk.h: add object_type member to name_entryÆvar Arnfjörð Bjarmason, Mar 16, 2021
  112. 07/32 mktree tests: test that "mode" is passed when sortingÆvar Arnfjörð Bjarmason, Mar 16, 2021
  113. 08/32 diff tests: test that "mode" is passed when sortingÆvar Arnfjörð Bjarmason, Mar 16, 2021
  114. 13/32 archive: get rid of 'stage' parameterÆvar Arnfjörð Bjarmason, Mar 16, 2021
  115. 10/32 tree-walk.h users: switch object_type(...) to new .object_typeÆvar Arnfjörð Bjarmason, Mar 16, 2021
  116. 09/32 cache.h: have base_name_compare() take "is tree?", not "mode"Ævar Arnfjörð Bjarmason, Mar 16, 2021
  117. 06/32 fast-import tests: test for sorting dir/file foo v.s. foo.txtÆvar Arnfjörð Bjarmason, Mar 16, 2021
  118. 12/32 tree.h users: format argument lists in archive.cÆvar Arnfjörð Bjarmason, Mar 16, 2021
  119. 11/32 tree.h: format argument lists of read_tree_recursive() usersÆvar Arnfjörð Bjarmason, Mar 16, 2021
  120. 14/32 tree.h API: make read_tree_fn_t take an "enum object_type"Ævar Arnfjörð Bjarmason, Mar 16, 2021
  121. 16/32 tree-walk.h users: refactor chained "mode" if/else into switchÆvar Arnfjörð Bjarmason, Mar 16, 2021
  122. 17/32 tree-walk.h users: migrate miscellaneous "mode" to "object_type"Ævar Arnfjörð Bjarmason, Mar 16, 2021
  123. 15/32 tree-walk.h users: migrate "p->mode &&" patternÆvar Arnfjörð Bjarmason, Mar 16, 2021
  124. 18/32 merge-tree tests: test for the mode comparison in same_entry()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  125. 19/32 merge-ort: correct reference to test in 62fdec17a11Ævar Arnfjörð Bjarmason, Mar 16, 2021
  126. 22/32 tree-walk.h API: formatting changes for subsequent commitÆvar Arnfjörð Bjarmason, Mar 16, 2021
  127. 20/32 fsck.c: switch on "object_type" in fsck_walk_tree()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  128. 21/32 tree-walk.h users: use temporary variable(s) for "mode"Ævar Arnfjörð Bjarmason, Mar 16, 2021
  129. 23/32 tree-walk.h API: rename get_tree_entry() to get_tree_entry_mode()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  130. 24/32 match-trees: use "tmp" for mode in shift_tree_by()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  131. 25/32 tree-walk.h API: add get_tree_entry_type()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  132. 26/32 tree-walk.h API: document and format tree_entry_extract()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  133. 29/32 tree-walk.h API: add get_tree_entry_all()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  134. 28/32 tree-walk.h API: add a tree_entry_extract_all() functionÆvar Arnfjörð Bjarmason, Mar 16, 2021
  135. 27/32 tree-entry.h API: rename tree_entry_extract() to tree_entry_extract_mode()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  136. 31/32 blame: emit a better error on 'git blame directory'Ævar Arnfjörð Bjarmason, Mar 16, 2021
  137. 30/32 tree-walk.h API: add a get_tree_entry_path() functionÆvar Arnfjörð Bjarmason, Mar 16, 2021
  138. 32/32 tree-walk.h API: add a tree_entry_extract_type() functionÆvar Arnfjörð Bjarmason, Mar 16, 2021
  139. 03/29 cache.h: add a comment to object_type()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  140. 05/29 tree-walk.c: migrate to using new "object_type" field when possibleÆvar Arnfjörð Bjarmason, Mar 16, 2021
  141. 06/29 cache.h: have base_name_compare() take "is tree?", not "mode"Ævar Arnfjörð Bjarmason, Mar 16, 2021
  142. Elijah NewrenMar 16, 2021
  143. 01/29 diff.c: remove redundant canon_mode() callÆvar Arnfjörð Bjarmason, Mar 16, 2021
  144. 04/29 tree-walk.h: add object_type member to name_entryÆvar Arnfjörð Bjarmason, Mar 16, 2021
  145. 10/29 archive: get rid of 'stage' parameterÆvar Arnfjörð Bjarmason, Mar 16, 2021
  146. 07/29 tree-walk.h users: switch object_type(...) to new .object_typeÆvar Arnfjörð Bjarmason, Mar 16, 2021
  147. 13/29 tree-walk.h users: refactor chained "mode" if/else into switchÆvar Arnfjörð Bjarmason, Mar 16, 2021
  148. 08/29 tree.h: format argument lists of read_tree_recursive() usersÆvar Arnfjörð Bjarmason, Mar 16, 2021
  149. 11/29 tree.h API: make read_tree_fn_t take an "enum object_type"Ævar Arnfjörð Bjarmason, Mar 16, 2021
  150. 15/29 merge-tree tests: test for the mode comparison in same_entry()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  151. 14/29 tree-walk.h users: migrate miscellaneous "mode" to "object_type"Ævar Arnfjörð Bjarmason, Mar 16, 2021
  152. 16/29 merge-ort: correct reference to test in 62fdec17a11Ævar Arnfjörð Bjarmason, Mar 16, 2021
  153. 18/29 tree-walk.h users: use temporary variable(s) for "mode"Ævar Arnfjörð Bjarmason, Mar 16, 2021
  154. 17/29 fsck.c: switch on "object_type" in fsck_walk_tree()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  155. 20/29 tree-walk.h API: rename get_tree_entry() to get_tree_entry_mode()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  156. 21/29 tree-walk.h API users: use "tmp" for mode in shift_tree_by()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  157. Elijah NewrenMar 16, 2021
  158. 23/29 tree-walk.h API: document and format tree_entry_extract()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  159. 22/29 tree-walk.h API: add get_tree_entry_type()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  160. 09/29 tree.h users: format argument lists in archive.cÆvar Arnfjörð Bjarmason, Mar 16, 2021
  161. 26/29 tree-walk.h API: add get_tree_entry_all()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  162. 24/29 tree-entry.h API: rename tree_entry_extract() to tree_entry_extract_mode()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  163. 25/29 tree-walk.h API: add a tree_entry_extract_all() functionÆvar Arnfjörð Bjarmason, Mar 16, 2021
  164. 12/29 tree-walk.h users: migrate "p->mode &&" patternÆvar Arnfjörð Bjarmason, Mar 16, 2021
  165. 27/29 tree-walk.h API: add a get_tree_entry_path() functionÆvar Arnfjörð Bjarmason, Mar 16, 2021
  166. Elijah NewrenMar 16, 2021
  167. 28/29 blame: emit a better error on 'git blame directory'Ævar Arnfjörð Bjarmason, Mar 16, 2021
  168. Elijah NewrenMar 16, 2021
  169. 29/29 tree-walk.h API: add a tree_entry_extract_type() functionÆvar Arnfjörð Bjarmason, Mar 16, 2021
  170. 19/29 tree-walk.h API: formatting changes for subsequent commitÆvar Arnfjörð Bjarmason, Mar 16, 2021
  171. 01/30 diff.c: remove redundant canon_mode() callÆvar Arnfjörð Bjarmason, Mar 8, 2021
  172. 03/30 cache.h: add a comment to object_type()Ævar Arnfjörð Bjarmason, Mar 8, 2021
  173. Elijah NewrenMar 9, 2021
  174. 04/30 tree-walk.h: add object_type member to name_entryÆvar Arnfjörð Bjarmason, Mar 8, 2021
  175. 05/30 tree-walk.c: migrate to using new "object_type" field when possibleÆvar Arnfjörð Bjarmason, Mar 8, 2021
  176. Elijah NewrenMar 9, 2021
  177. 12/30 tree-walk.h users: migrate "p->mode &&" patternÆvar Arnfjörð Bjarmason, Mar 8, 2021
  178. Elijah NewrenMar 9, 2021
  179. 06/30 cache.h: have base_name_compare() take "is tree?", not "mode"Ævar Arnfjörð Bjarmason, Mar 8, 2021
  180. Elijah NewrenMar 9, 2021
  181. 07/30 tree-walk.h users: switch object_type(...) to new .object_typeÆvar Arnfjörð Bjarmason, Mar 8, 2021
  182. 08/30 tree.h: format argument lists of read_tree_recursive() usersÆvar Arnfjörð Bjarmason, Mar 8, 2021
  183. 09/30 tree.h users: format argument lists in archive.cÆvar Arnfjörð Bjarmason, Mar 8, 2021
  184. Elijah NewrenMar 9, 2021
  185. 13/30 tree-walk.h users: refactor chained "mode" if/else into switchÆvar Arnfjörð Bjarmason, Mar 8, 2021
  186. Elijah NewrenMar 9, 2021
  187. 11/30 tree.h API: make read_tree_fn_t take an "enum object_type"Ævar Arnfjörð Bjarmason, Mar 8, 2021
  188. 10/30 archive: get rid of 'stage' parameterÆvar Arnfjörð Bjarmason, Mar 8, 2021
  189. 21/30 tree-walk.h API users: use "tmp" for mode in shift_tree_by()Ævar Arnfjörð Bjarmason, Mar 8, 2021
  190. Elijah NewrenMar 9, 2021
  191. 18/30 tree-walk.h users: use temporary variable(s) for "mode"Ævar Arnfjörð Bjarmason, Mar 8, 2021
  192. 20/30 tree-walk.h API: rename get_tree_entry() to get_tree_entry_mode()Ævar Arnfjörð Bjarmason, Mar 8, 2021
  193. 16/30 merge-ort: correct reference to test in 62fdec17a11Ævar Arnfjörð Bjarmason, Mar 8, 2021
  194. Elijah NewrenMar 9, 2021
  195. 22/30 tree-walk.h API: Add get_tree_entry_type()Ævar Arnfjörð Bjarmason, Mar 8, 2021
  196. Elijah NewrenMar 9, 2021
  197. 14/30 tree-walk.h users: migrate miscellaneous "mode" to "object_type"Ævar Arnfjörð Bjarmason, Mar 8, 2021
  198. 19/30 tree-walk.h API: formatting changes for subsequent commitÆvar Arnfjörð Bjarmason, Mar 8, 2021
  199. 17/30 fsck.c: switch on "object_type" in fsck_walk_tree()Ævar Arnfjörð Bjarmason, Mar 8, 2021
  200. 15/30 merge-tree tests: test for the mode comparison in same_entry()Ævar Arnfjörð Bjarmason, Mar 8, 2021
  201. Elijah NewrenMar 9, 2021
  202. 24/30 tree-walk.h API: document and format tree_entry_extract()Ævar Arnfjörð Bjarmason, Mar 8, 2021
  203. Elijah NewrenMar 9, 2021
  204. 25/30 tree-entry.h API: rename tree_entry_extract() to tree_entry_extract_mode()Ævar Arnfjörð Bjarmason, Mar 8, 2021
  205. 23/30 tree-walk.h API: add a get_tree_entry_path() functionÆvar Arnfjörð Bjarmason, Mar 8, 2021
  206. Elijah NewrenMar 9, 2021
  207. 26/30 tree-walk.h API: add a tree_entry_extract_all() functionÆvar Arnfjörð Bjarmason, Mar 8, 2021
  208. Elijah NewrenMar 9, 2021
  209. 28/30 tree-walk.h API users: rename "struct name_entry"'s "mode" to "raw_mode"Ævar Arnfjörð Bjarmason, Mar 8, 2021
  210. Elijah NewrenMar 9, 2021
  211. 29/30 tree.h API users: rename read_tree_fn_t's "mode" to "raw_mode"Ævar Arnfjörð Bjarmason, Mar 8, 2021
  212. Elijah NewrenMar 9, 2021
  213. 30/30 tree-walk.h API: move canon_mode() back out of decode_tree_entry()Ævar Arnfjörð Bjarmason, Mar 8, 2021
  214. Elijah NewrenMar 9, 2021
  215. 27/30 tree-walk.h API: add a tree_entry_extract_type() functionÆvar Arnfjörð Bjarmason, Mar 8, 2021
  216. Elijah NewrenMar 8, 2021
  217. 1/9 ls-files tests: add meaningful --with-tree testsÆvar Arnfjörð Bjarmason, Mar 15, 2021
  218. 0/9 read_tree() and read_tree_recursive() refactoringÆvar Arnfjörð Bjarmason, Mar 15, 2021
  219. Elijah NewrenMar 16, 2021
  220. 0/9 read_tree() and read_tree_recursive() refactoringÆvar Arnfjörð Bjarmason, Mar 16, 2021
  221. 1/9 ls-files tests: add meaningful --with-tree testsÆvar Arnfjörð Bjarmason, Mar 16, 2021
  222. 3/9 ls-files: don't needlessly pass around stage variableÆvar Arnfjörð Bjarmason, Mar 16, 2021
  223. 4/9 ls-files: refactor away read_tree()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  224. 2/9 tree.c API: move read_tree() into builtin/ls-files.cÆvar Arnfjörð Bjarmason, Mar 16, 2021
  225. 5/9 tree.h API: remove support for starting at prefix != ""Ævar Arnfjörð Bjarmason, Mar 16, 2021
  226. 6/9 tree.h API: remove "stage" parameter from read_tree_recursive()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  227. 8/9 show tests: add test for "git show <tree>"Ævar Arnfjörð Bjarmason, Mar 16, 2021
  228. 9/9 tree.h API: expose read_tree_1() as read_tree_at()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  229. 7/9 tree.h API: rename read_tree_recursive() to read_tree()Ævar Arnfjörð Bjarmason, Mar 16, 2021
  230. Junio C HamanoMar 17, 2021
  231. 0/8 read_tree() and read_tree_recursive() refactoringÆvar Arnfjörð Bjarmason, Mar 20, 2021
  232. 2/8 ls-files tests: add meaningful --with-tree testsÆvar Arnfjörð Bjarmason, Mar 20, 2021
  233. 1/8 show tests: add test for "git show <tree>"Ævar Arnfjörð Bjarmason, Mar 20, 2021
  234. 4/8 ls-files: don't needlessly pass around stage variableÆvar Arnfjörð Bjarmason, Mar 20, 2021
  235. 3/8 tree.c API: move read_tree() into builtin/ls-files.cÆvar Arnfjörð Bjarmason, Mar 20, 2021
  236. 5/8 ls-files: refactor away read_tree()Ævar Arnfjörð Bjarmason, Mar 20, 2021
  237. 6/8 archive: stop passing "stage" through read_tree_recursive()Ævar Arnfjörð Bjarmason, Mar 20, 2021
  238. 7/8 tree.h API: expose read_tree_1() as read_tree_at()Ævar Arnfjörð Bjarmason, Mar 20, 2021
  239. 8/8 tree.h API: simplify read_tree_recursive() signatureÆvar Arnfjörð Bjarmason, Mar 20, 2021
  240. Junio C HamanoMar 20, 2021
  241. 3/9 ls-files: don't needlessly pass around stage variableÆvar Arnfjörð Bjarmason, Mar 15, 2021
  242. 4/9 ls-files: refactor away read_tree()Ævar Arnfjörð Bjarmason, Mar 15, 2021
  243. 2/9 tree.c API: move read_tree() into builtin/ls-files.cÆvar Arnfjörð Bjarmason, Mar 15, 2021
  244. 8/9 show tests: add test for "git show <tree>"Ævar Arnfjörð Bjarmason, Mar 15, 2021
  245. Elijah NewrenMar 16, 2021
  246. 5/9 tree.h API: remove support for starting at prefix != ""Ævar Arnfjörð Bjarmason, Mar 15, 2021
  247. 9/9 tree.h API: expose read_tree_1() as read_tree_at()Ævar Arnfjörð Bjarmason, Mar 15, 2021
  248. 7/9 tree.h API: rename read_tree_recursive() to read_tree()Ævar Arnfjörð Bjarmason, Mar 15, 2021
  249. 6/9 tree.h API: remove "stage" parameter from read_tree_recursive()Ævar Arnfjörð Bjarmason, Mar 15, 2021
  250. 5/6 tree.h API: remove support for starting at prefix != ""Ævar Arnfjörð Bjarmason, Mar 8, 2021
  251. 6/6 tree.h API: remove "stage" parameter from read_tree_recursive()Ævar Arnfjörð Bjarmason, Mar 8, 2021
  252. 4/6 ls-files: refactor away read_tree()Ævar Arnfjörð Bjarmason, Mar 8, 2021
  253. Junio C HamanoMar 8, 2021
  254. 1/7 tree.c API: move read_tree() into builtin/ls-files.cÆvar Arnfjörð Bjarmason, Mar 6, 2021
  255. 5/7 ls-files: refactor read_one_entry_quick() to use a strbufÆvar Arnfjörð Bjarmason, Mar 6, 2021
  256. 2/7 ls-files: don't needlessly pass around stage variableÆvar Arnfjörð Bjarmason, Mar 6, 2021
  257. 3/7 ls-files: remove cache juggling + sortingÆvar Arnfjörð Bjarmason, Mar 6, 2021
  258. Elijah NewrenMar 6, 2021
  259. 6/7 tree.h API: remove support for starting at prefix != ""Ævar Arnfjörð Bjarmason, Mar 6, 2021
  260. Elijah NewrenMar 6, 2021
  261. 7/7 tree.h API: remove "stage" parameter from read_tree_recursive()Ævar Arnfjörð Bjarmason, Mar 6, 2021
  262. 4/7 merge-ort: move cmp_cache_name_compare() from tree.cÆvar Arnfjörð Bjarmason, Mar 6, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.