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

Re: [PATCH 28/30] tree-walk.h API users: rename "struct name_entry"'s "mode" to "raw_mode"

From
Elijah Newren <newren@gmail.com>
Date
Mar 9, 2021, 18:53 UTC
Message-ID
<CABPp-BFrVCZF-tWUXqJckbEvNPxjFxtTE3_uUpkLv_ARTb2X6g@mail.gmail.com>
In-Reply-To
<20210308150650.18626-29-avarab@gmail.com>
On Mon, Mar 8, 2021 at 7:07 AM Ævar Arnfjörð Bjarmason <avarab@gmail.com> wrote:
Show 8 quoted lines
>
> Now that most of the users of the "mode" variable have been moved to
> use "object_type" instead let's rename it to "raw_mode" in preparation
> for a revert of 7146e66f086 (tree-walk: finally switch over tree
> descriptors to contain a pre-parsed entry, 2014-02-06).
>
> This will allow API users who care about the actual mode bits in tree
> objects to get access to them, such as fsck, the merge algorithm etc.

If you're going to feed the raw mode bits through to the merge algorithm, then the merge algorithm logic needs to change in several places to accommodate have raw modes instead of canonicalized modes. I'm also curious what the other places are. For example, will the diff machinery show a diff now for files whose raw_mode differs even if the canonicalized mode does not? This would be a behavioral change, but I'm getting ahead of myself since I should probably wait until the subsequent patches to see what you did.

Show 32 quoted lines
> But most users will not want to have such potentially un-sanitized, so
> let's indicate that by giving the variable a more scary name.
>
> I am not renaming the variables being assigned to, i.e. it's now going
> to be "int mode = entry.raw_mode", not "int raw_mode = [...]". This is
> because we're going to be getting a sanitized "mode" via
> "canon_mode()" in many of these functions soon, so renaming the local
> variable back and forth will result in needless churn.
>
> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
> ---
>  builtin/merge-tree.c |  8 ++++----
>  match-trees.c        |  4 ++--
>  merge-ort.c          | 12 ++++++------
>  notes.c              |  2 +-
>  tree-diff.c          | 22 +++++++++++-----------
>  tree-walk.c          |  2 +-
>  tree-walk.h          |  6 +++---
>  tree.c               |  2 +-
>  unpack-trees.c       |  6 +++---
>  9 files changed, 32 insertions(+), 32 deletions(-)
>
> diff --git a/builtin/merge-tree.c b/builtin/merge-tree.c
> index eec5b906561..b4e736e4b72 100644
> --- a/builtin/merge-tree.c
> +++ b/builtin/merge-tree.c
> @@ -160,7 +160,7 @@ static int same_entry(struct name_entry *a, struct name_entry *b)
>         return  !is_null_oid(&a->oid) &&
>                 !is_null_oid(&b->oid) &&
>                 oideq(&a->oid, &b->oid) &&
> -               a->mode == b->mode;
> +               a->raw_mode == b->raw_mode;
This looks like a case that probably should operate on canonicalized modes.
Show 49 quoted lines
>  }
>
>  static int both_empty(struct name_entry *a, struct name_entry *b)
> @@ -197,9 +197,9 @@ static void resolve(const struct traverse_info *info, struct name_entry *ours, s
>                 return;
>
>         path = traverse_path(info, result);
> -       orig_mode = ours->mode;
> +       orig_mode = ours->raw_mode;
>         orig = create_entry(2, orig_mode, &ours->oid, path);
> -       final_mode = result->mode;
> +       final_mode = result->raw_mode;
>         final = create_entry(0, final_mode, &result->oid, path);
>
>         final->link = orig;
> @@ -252,7 +252,7 @@ static struct merge_list *link_entry(unsigned stage, const struct traverse_info
>                 path = entry->path;
>         else
>                 path = traverse_path(info, n);
> -       link_mode = n->mode;
> +       link_mode = n->raw_mode;
>         link = create_entry(stage, link_mode, &n->oid, path);
>
>         link->link = entry;
> diff --git a/match-trees.c b/match-trees.c
> index 0636f6e58e9..d45c76ffa79 100644
> --- a/match-trees.c
> +++ b/match-trees.c
> @@ -86,8 +86,8 @@ static int score_trees(const struct object_id *hash1, const struct object_id *ha
>
>         for (;;) {
>                 int cmp;
> -               unsigned int one_mode = one.entry.mode;
> -               unsigned int two_mode = two.entry.mode;
> +               unsigned int one_mode = one.entry.raw_mode;
> +               unsigned int two_mode = two.entry.raw_mode;
>
>                 if (one.size && two.size)
>                         cmp = base_name_entries_compare(&one.entry, &two.entry);
> diff --git a/merge-ort.c b/merge-ort.c
> index cad10436504..ea20bbe2af3 100644
> --- a/merge-ort.c
> +++ b/merge-ort.c
> @@ -502,7 +502,7 @@ static void setup_path_info(struct merge_options *opt,
>         mi->basename_offset = current_dir_name_len;
>         mi->clean = !!resolved;
>         if (resolved) {
> -               mi->result.mode = merged_version->mode;
> +               mi->result.mode = merged_version->raw_mode;
This seems scary.
Show 9 quoted lines
>                 oidcpy(&mi->result.oid, &merged_version->oid);
>                 mi->is_null = !!is_null;
>         } else {
> @@ -512,7 +512,7 @@ static void setup_path_info(struct merge_options *opt,
>                 ASSIGN_AND_VERIFY_CI(ci, mi);
>                 for (i = MERGE_BASE; i <= MERGE_SIDE2; i++) {
>                         ci->pathnames[i] = fullpath;
> -                       ci->stages[i].mode = names[i].mode;
> +                       ci->stages[i].mode = names[i].raw_mode;
likewise.
Show 27 quoted lines
>                         oidcpy(&ci->stages[i].oid, &names[i].oid);
>                 }
>                 ci->filemask = filemask;
> @@ -545,7 +545,7 @@ static void add_pair(struct merge_options *opt,
>         struct rename_info *renames = &opt->priv->renames;
>         int names_idx = is_add ? side : 0;
>         const struct object_id *oid = &names[names_idx].oid;
> -       unsigned int mode = names[names_idx].mode;
> +       unsigned int mode = names[names_idx].raw_mode;
>
>         one = alloc_filespec(pathname);
>         two = alloc_filespec(pathname);
> @@ -616,13 +616,13 @@ static int collect_merge_info_callback(int n,
>         unsigned side1_null = !(mask & 2);
>         unsigned side2_null = !(mask & 4);
>         unsigned side1_matches_mbase = (!side1_null && !mbase_null &&
> -                                       names[0].mode == names[1].mode &&
> +                                       names[0].raw_mode == names[1].raw_mode &&
>                                         oideq(&names[0].oid, &names[1].oid));
>         unsigned side2_matches_mbase = (!side2_null && !mbase_null &&
> -                                       names[0].mode == names[2].mode &&
> +                                       names[0].raw_mode == names[2].raw_mode &&
>                                         oideq(&names[0].oid, &names[2].oid));
>         unsigned sides_match = (!side1_null && !side2_null &&
> -                               names[1].mode == names[2].mode &&
> +                               names[1].raw_mode == names[2].raw_mode &&
>                                 oideq(&names[1].oid, &names[2].oid));

If these three really start operating on the raw_mode, then this logic will be wrong. 100644 and 100666 should be considered "equal and matching" for the purposes used here.

Show 33 quoted lines
>         /*
> diff --git a/notes.c b/notes.c
> index aa46cb2b09e..2817325651a 100644
> --- a/notes.c
> +++ b/notes.c
> @@ -478,7 +478,7 @@ static void load_subtree(struct notes_tree *t, struct leaf_node *subtree,
>                         struct strbuf non_note_path = STRBUF_INIT;
>                         const char *q = oid_to_hex(&subtree->key_oid);
>                         size_t i;
> -                       unsigned int mode = entry.mode;
> +                       unsigned int mode = entry.raw_mode;
>                         for (i = 0; i < prefix_len; i++) {
>                                 strbuf_addch(&non_note_path, *q++);
>                                 strbuf_addch(&non_note_path, *q++);
> diff --git a/tree-diff.c b/tree-diff.c
> index 10c92d39c42..df8301d806a 100644
> --- a/tree-diff.c
> +++ b/tree-diff.c
> @@ -232,7 +232,7 @@ static struct combine_diff_path *emit_path(struct combine_diff_path *p,
>                          * tp[i] is valid, if present and if tp[i]==tp[imin] -
>                          * otherwise, we should ignore it.
>                          */
> -                       int tpi_valid = tp && !(tp[i].entry.mode & S_IFXMIN_NEQ);
> +                       int tpi_valid = tp && !(tp[i].entry.raw_mode & S_IFXMIN_NEQ);
>
>                         const struct object_id *oid_i;
>                         unsigned mode_i;
> @@ -245,7 +245,7 @@ static struct combine_diff_path *emit_path(struct combine_diff_path *p,
>
>                         if (tpi_valid) {
>                                 oid_i = &tp[i].entry.oid;
> -                               mode_i = tp[i].entry.mode;
> +                               mode_i = tp[i].entry.raw_mode;

I don't know tree-diff enough but I'm wondering if it has similar issues to merge-ort.

Show 142 quoted lines
>                         }
>                         else {
>                                 oid_i = &null_oid;
> @@ -283,7 +283,7 @@ static struct combine_diff_path *emit_path(struct combine_diff_path *p,
>                 FAST_ARRAY_ALLOC(parents_oid, nparent);
>                 for (i = 0; i < nparent; ++i) {
>                         /* same rule as in emitthis */
> -                       int tpi_valid = tp && !(tp[i].entry.mode & S_IFXMIN_NEQ);
> +                       int tpi_valid = tp && !(tp[i].entry.raw_mode & S_IFXMIN_NEQ);
>
>                         parents_oid[i] = tpi_valid ? &tp[i].entry.oid : NULL;
>                 }
> @@ -404,7 +404,7 @@ static inline void update_tp_entries(struct tree_desc *tp, int nparent)
>  {
>         int i;
>         for (i = 0; i < nparent; ++i)
> -               if (!(tp[i].entry.mode & S_IFXMIN_NEQ))
> +               if (!(tp[i].entry.raw_mode & S_IFXMIN_NEQ))
>                         update_tree_entry(&tp[i]);
>  }
>
> @@ -465,10 +465,10 @@ static struct combine_diff_path *ll_diff_tree_paths(
>                  * mark entries whether they =p[imin] along the way
>                  */
>                 imin = 0;
> -               tp[0].entry.mode &= ~S_IFXMIN_NEQ;
> +               tp[0].entry.raw_mode &= ~S_IFXMIN_NEQ;
>
>                 for (i = 1; i < nparent; ++i) {
> -                       unsigned int mode = tp[i].entry.mode;
> +                       unsigned int mode = tp[i].entry.raw_mode;
>                         cmp = tree_entry_pathcmp(&tp[i], &tp[imin]);
>                         if (cmp < 0) {
>                                 imin = i;
> @@ -480,12 +480,12 @@ static struct combine_diff_path *ll_diff_tree_paths(
>                         else {
>                                 mode |= S_IFXMIN_NEQ;
>                         }
> -                       tp[i].entry.mode = mode;
> +                       tp[i].entry.raw_mode = mode;
>                 }
>
>                 /* fixup markings for entries before imin */
>                 for (i = 0; i < imin; ++i)
> -                       tp[i].entry.mode |= S_IFXMIN_NEQ;       /* pi > p[imin] */
> +                       tp[i].entry.raw_mode |= S_IFXMIN_NEQ;   /* pi > p[imin] */
>
>
>
> @@ -497,14 +497,14 @@ static struct combine_diff_path *ll_diff_tree_paths(
>                         /* are either pi > p[imin] or diff(t,pi) != ø ? */
>                         if (!opt->flags.find_copies_harder) {
>                                 for (i = 0; i < nparent; ++i) {
> -                                       unsigned int mode = tp[i].entry.mode;
> +                                       unsigned int mode = tp[i].entry.raw_mode;
>                                         /* p[i] > p[imin] */
>                                         if (mode & S_IFXMIN_NEQ)
>                                                 continue;
>
>                                         /* diff(t,pi) != ø */
>                                         if (!oideq(&t.entry.oid, &tp[i].entry.oid) ||
> -                                           (t.entry.mode != mode))
> +                                           (t.entry.raw_mode != mode))
>                                                 continue;
>
>                                         goto skip_emit_t_tp;
> @@ -536,7 +536,7 @@ static struct combine_diff_path *ll_diff_tree_paths(
>                         /* ∀i pi=p[imin] -> D += "-p[imin]" */
>                         if (!opt->flags.find_copies_harder) {
>                                 for (i = 0; i < nparent; ++i)
> -                                       if (tp[i].entry.mode & S_IFXMIN_NEQ)
> +                                       if (tp[i].entry.raw_mode & S_IFXMIN_NEQ)
>                                                 goto skip_emit_tp;
>                         }
>
> diff --git a/tree-walk.c b/tree-walk.c
> index 12e0ed4e250..099a9b3bd77 100644
> --- a/tree-walk.c
> +++ b/tree-walk.c
> @@ -48,7 +48,7 @@ static int decode_tree_entry(struct tree_desc *desc, const char *buf, unsigned l
>         /* Initialize the descriptor entry */
>         desc->entry.path = path;
>         mode = canon_mode(mode);
> -       desc->entry.mode = mode;
> +       desc->entry.raw_mode = mode;
>         desc->entry.object_type = object_type(mode);
>         desc->entry.pathlen = len - 1;
>         hashcpy(desc->entry.oid.hash, (const unsigned char *)path + len);
> diff --git a/tree-walk.h b/tree-walk.h
> index 1f69e57db4c..885ced74258 100644
> --- a/tree-walk.h
> +++ b/tree-walk.h
> @@ -16,7 +16,7 @@ struct name_entry {
>         struct object_id oid;
>         const char *path;
>         int pathlen;
> -       unsigned int mode;
> +       unsigned int raw_mode;
>         /* simple 'mode': Only OBJ_{BLOB,TREE,COMMIT} */
>         enum object_type object_type;
>  };
> @@ -55,7 +55,7 @@ static inline const struct object_id *tree_entry_extract_mode(struct tree_desc *
>                                                               unsigned short *modep)
>  {
>         *pathp = desc->entry.path;
> -       *modep = desc->entry.mode;
> +       *modep = desc->entry.raw_mode;
>         return &desc->entry.oid;
>  }
>
> @@ -75,7 +75,7 @@ static inline const struct object_id *tree_entry_extract_all(struct tree_desc *d
>                                                              enum object_type *object_typep)
>  {
>         *pathp = desc->entry.path;
> -       *modep = desc->entry.mode;
> +       *modep = desc->entry.raw_mode;
>         *object_typep = desc->entry.object_type;
>         return &desc->entry.oid;
>  }
> diff --git a/tree.c b/tree.c
> index e4402fad69b..215d17e1295 100644
> --- a/tree.c
> +++ b/tree.c
> @@ -40,7 +40,7 @@ static int read_tree_1(struct repository *r,
>                 }
>
>                 switch (fn(&entry.oid, base,
> -                          entry.path, entry.object_type, entry.mode, context)) {
> +                          entry.path, entry.object_type, entry.raw_mode, context)) {
>                 case 0:
>                         continue;
>                 case READ_TREE_RECURSIVE:
> diff --git a/unpack-trees.c b/unpack-trees.c
> index 9471c19de72..dcdf8130745 100644
> --- a/unpack-trees.c
> +++ b/unpack-trees.c
> @@ -867,7 +867,7 @@ static int traverse_trees_recursive(int n, unsigned long dirmask,
>         newinfo.pathspec = info->pathspec;
>         newinfo.name = p->path;
>         newinfo.namelen = p->pathlen;
> -       newinfo.mode = p->mode;
> +       newinfo.mode = p->raw_mode;
Oh boy...unpack-trees too?

Well, all of my worries may be unfounded depending on what you do in subsequent commits.

Show 24 quoted lines
>         newinfo.pathlen = st_add3(newinfo.pathlen, tree_entry_len(p), 1);
>         newinfo.df_conflicts |= df_conflicts;
>
> @@ -1020,7 +1020,7 @@ static struct cache_entry *create_ce_entry(const struct traverse_info *info,
>                 is_transient ?
>                 make_empty_transient_cache_entry(len) :
>                 make_empty_cache_entry(istate, len);
> -       unsigned int mode = n->mode;
> +       unsigned int mode = n->raw_mode;
>
>         ce->ce_mode = create_ce_mode(mode);
>         ce->ce_flags = create_ce_flags(stage);
> @@ -1209,7 +1209,7 @@ static void debug_path(struct traverse_info *info)
>  static void debug_name_entry(int i, struct name_entry *n)
>  {
>         printf("ent#%d %06o %s\n", i,
> -              n->path ? n->mode : 0,
> +              n->path ? n->raw_mode : 0,
>                n->path ? n->path : "(missing)");
>  }
>
> --
> 2.31.0.rc0.126.g04f22c5b82
>
Previous: Ævar Arnfjörð BjarmasonNext: Ævar Arnfjörð Bjarmason
Message 210 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.