git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Elijah Newren <newren@gmail.com>
To: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Cc: "Git Mailing List" <git@vger.kernel.org>,
	"Junio C Hamano" <gitster@pobox.com>,
	"Kirill Smelkov" <kirr@navytux.spb.ru>,
	"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: Re: [PATCH 30/30] tree-walk.h API: move canon_mode() back out of decode_tree_entry()
Date: Tue, 9 Mar 2021 12:23:40 -0800	[thread overview]
Message-ID: <CABPp-BEPkukGz32rrro1hzMvSQzX4v7U17CAcV-G2NS6v0u55g@mail.gmail.com> (raw)
In-Reply-To: <20210308150650.18626-31-avarab@gmail.com>

On Mon, Mar 8, 2021 at 7:07 AM Ævar Arnfjörð Bjarmason <avarab@gmail.com> wrote:
>
> Move the canon_mode() call back out of decode_tree_entry(), and
> instead make it the responsibility of its callers to canonicalize the
> tree modes we get.
>
> This effectively reverts 7146e66f086 (tree-walk: finally switch over
> tree descriptors to contain a pre-parsed entry, 2014-02-06), with the
> recent of most callers away from "mode" (now "raw_mode") towards "enum
> object_id" in recent commit the motivation for that commit effectively
> doesn't exist anymore.
>
> I.e. I'm not adding the canon_mode() call back to
> tree_entry_extract(), instead it's now become sane to move this
> responsibility to those callers that still care about the "raw_mode".
>
> That change was meant as a pure optimization change, but it actually
> introduced a subtle bug. We were left without any low-level API to get
> non-standard mode bits out of trees. Having non-standard modes isn't
> the norm, and fsck should warn about it.
>
> Except after 7146e66f086 it couldn't anymore, since the modes
> fsck_tree() got would be pre-sanitized for it. I believe that fsck
> issue is per-se a serious bug, the "bad mode" was a default warning,
> not an error.
>
> This change makes that fsck check work again, why aren't there any
> test changes for fsck here? Because we didn't have a test for that
> fsck feature in the first place, which is why the regression in
> 7146e66f086 snuck by us. A follow-up commit will add such a test.
>
> It is possible that this commit is introducing some subtle regression
> that I've missed.

I'm sure there are at least a few, and I suspect many more.  This is a
super scary change to me, even if it's only about corner cases that
should only exist in repositories that had objects created with super
old (or new and broken) git clients.

> We are now propagating the "raw_mode" outside of everything downstream
> of decode_tree_entry(), which is everything we have that decodes
> trees. It's our most low-level tree decoding API.
>
> As shown here we rely parsing out a "raw" (and possibly something fsck
> would complain about) mode as-is, but when we run merge, add something
> new to the index, create an archive etc. we don't want to propagate
> that bad mode when we create new data. We want to canon_mode() it.
>
> I'm also pretty sure that we don't have good enough test coverage for
> those scenarios. We barely have tests for these bad mode bits at
> all (not even one for fsck). We definitely are not testing all
> merge/index/archive etc. interactions.
>
> Still, I think this change is worth it overall, because:
>
>  1. We must have a way to get at these raw modes in some way, even if
>     just for fsck. There's also other things that care, see e.g. the
>     FIXME comment in 62fdec17a11 (merge-ort: flesh out implementation of
>     handle_content_merge(), 2021-01-01)
>
>  2. #1 is not a justification for this change, I could have e.g. just
>     added the ability to pass some "want_raw" flag into
>     decode_tree_entry() for use in fsck. But I think with the migration
>     of most tree iteration towards "enum object_type" it's become worth
>     it.

This seems like the safer route.  Then we can slowly convert callers
over to using the want_raw as we audit them and add appropriate tests.

>  3. Yes our test coverage sucks, but before 7146e66f086 we were also
>     spreading what's now the "raw_mode" all over the place. That commit
>     was first released with Git v2.0.0 in mid-2014. A while ago for sure,
>     but most of this code existed in something approximating its current
>     form then. This isn't new territory.

That's very helpful to know, actually.  That does lower my worry some.
But the fact that it was released as part of v2.0.0, a new major
release, suggests we knew there were potential breaking changes.  And
code has been built on top of those assumptions for quite a few years,
so we might again break things by reverting back, and having it be
part of a non-major release is worrisome without appropriate tests and
audits of the relevant code paths.

> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
> ---
>  archive.c              |  2 +-
>  builtin/checkout.c     |  1 +
>  builtin/ls-files.c     |  2 +-
>  builtin/merge-tree.c   |  6 +++---
>  builtin/update-index.c |  1 +
>  merge-ort.c            | 13 ++++++++++++-
>  notes.c                |  1 +
>  tree-walk.c            |  1 -
>  unpack-trees.c         |  4 +++-

No tests...oh boy.  You did mention this in the commit message, but
I'm still having a hard time getting past making a very low level
change like this without either tests or bumping the major version
number of git.

>  9 files changed, 23 insertions(+), 8 deletions(-)
>
> diff --git a/archive.c b/archive.c
> index 5b85aae8106..8083f15f3ba 100644
> --- a/archive.c
> +++ b/archive.c
> @@ -236,7 +236,7 @@ static int queue_or_write_archive_entry(const struct object_id *oid,
>                                         void *context)
>  {
>         struct archiver_context *c = context;
> -       unsigned mode = raw_mode;
> +       unsigned mode = canon_mode(raw_mode);
>
>         while (c->bottom &&
>                !(base->len >= c->bottom->len &&
> diff --git a/builtin/checkout.c b/builtin/checkout.c
> index d4adfdb5046..7f25b955616 100644
> --- a/builtin/checkout.c
> +++ b/builtin/checkout.c
> @@ -132,6 +132,7 @@ static int update_some(const struct object_id *oid, struct strbuf *base,
>         memcpy(ce->name + base->len, pathname, len - base->len);
>         ce->ce_flags = create_ce_flags(0) | CE_UPDATE;
>         ce->ce_namelen = len;
> +       mode = canon_mode(mode);
>         ce->ce_mode = create_ce_mode(mode);
>
>         /*
> diff --git a/builtin/ls-files.c b/builtin/ls-files.c
> index 391e6a9f141..926523d77a7 100644
> --- a/builtin/ls-files.c
> +++ b/builtin/ls-files.c
> @@ -429,7 +429,7 @@ static int read_one_entry_opt(struct index_state *istate,
>  {
>         int len;
>         struct cache_entry *ce;
> -       unsigned mode = raw_mode;
> +       unsigned mode = canon_mode(raw_mode);
>
>         if (S_ISDIR(mode))
>                 return READ_TREE_RECURSIVE;
> diff --git a/builtin/merge-tree.c b/builtin/merge-tree.c
> index b4e736e4b72..f8733a86eb7 100644
> --- a/builtin/merge-tree.c
> +++ b/builtin/merge-tree.c
> @@ -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->raw_mode;
> +       orig_mode = canon_mode(ours->raw_mode);
>         orig = create_entry(2, orig_mode, &ours->oid, path);
> -       final_mode = result->raw_mode;
> +       final_mode = canon_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->raw_mode;
> +       link_mode = canon_mode(n->raw_mode);
>         link = create_entry(stage, link_mode, &n->oid, path);
>
>         link->link = entry;
> diff --git a/builtin/update-index.c b/builtin/update-index.c
> index b489a876392..1996fdd97af 100644
> --- a/builtin/update-index.c
> +++ b/builtin/update-index.c
> @@ -621,6 +621,7 @@ static struct cache_entry *read_one_ent(const char *which,
>         memcpy(ce->name, path, namelen);
>         ce->ce_flags = create_ce_flags(stage);
>         ce->ce_namelen = namelen;
> +       mode = canon_mode(mode);
>         ce->ce_mode = create_ce_mode(mode);
>         return ce;
>  }
> diff --git a/merge-ort.c b/merge-ort.c
> index ea20bbe2af3..d1e8a2823e0 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->raw_mode;
> +               mi->result.mode = canon_mode(merged_version->raw_mode);

canon_mode() will change a mode of 0 into S_IFGITLINK, so this is
wrong.  It's wrong in a way that probably doesn't matter, since
is_null will be true and that is checked in preference to mode == 0
elsewhere, but the code should still be more careful.

>                 oidcpy(&mi->result.oid, &merged_version->oid);
>                 mi->is_null = !!is_null;
>         } else {
> @@ -512,6 +512,16 @@ 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;
> +                       /*
> +                        * We must not use canon_mode() here. Will
> +                        * fail on an the is_null assertion in
> +                        * 6a02dd90c99 (merge-ort: add a preliminary
> +                        * simple process_entries() implementation,
> +                        * 2020-12-13) when combined with the tests in
> +                        * "[PATCH 00/11] Complete merge-ort
> +                        * implementation...almost" (see
> +                        * https://lore.kernel.org/git/pull.973.git.git.1614905738.gitgitgadget@gmail.com/)
> +                        */
>                         ci->stages[i].mode = names[i].raw_mode;

I suspect the mapping of 0 to S_IFGITLINK might be the culprit here;
we're just lucky an assertion happened to catch this one.  (And
unlucky that nothing caught the one above.)

If you added a special check for that case and used canon_mode()
otherwise, I still think it'd be problematic, because the *only* value
of using raw_mode in the first place was that one special corner case
FIXME comment in handle_content_merge() -- that FIXME could only be
handled by allowing a wider range of modes, and if you canon_mode()
here, then handle_content_merge() only gets canonicalized modes.  At
that point, we might as well ask for special API from traverse_trees()
to just canonicalize for us (which, actually, sounds enticing).

>                         oidcpy(&ci->stages[i].oid, &names[i].oid);
>                 }
> @@ -546,6 +556,7 @@ static void add_pair(struct merge_options *opt,
>         int names_idx = is_add ? side : 0;
>         const struct object_id *oid = &names[names_idx].oid;
>         unsigned int mode = names[names_idx].raw_mode;
> +       mode = canon_mode(mode);

This is unnecessary; diffcore-rename.c only cares whether S_ISREG(mode).


Given that these are the only changes you made to merge-ort.c, and
this is the last patch in the series, my earlier comments and worries
about merge-ort from a few patches ago all look like justified
concerns and make me pretty sure you've introduced some regressions
relating to those.  (Namely, the fact that things comparing modes now
have to worry not about equality, but equality under
canonicalization.)

>         one = alloc_filespec(pathname);
>         two = alloc_filespec(pathname);
> diff --git a/notes.c b/notes.c
> index 2817325651a..78b1b38d36b 100644
> --- a/notes.c
> +++ b/notes.c
> @@ -479,6 +479,7 @@ static void load_subtree(struct notes_tree *t, struct leaf_node *subtree,
>                         const char *q = oid_to_hex(&subtree->key_oid);
>                         size_t i;
>                         unsigned int mode = entry.raw_mode;
> +                       mode = canon_mode(mode);
>                         for (i = 0; i < prefix_len; i++) {
>                                 strbuf_addch(&non_note_path, *q++);
>                                 strbuf_addch(&non_note_path, *q++);
> diff --git a/tree-walk.c b/tree-walk.c
> index 099a9b3bd77..3175430d049 100644
> --- a/tree-walk.c
> +++ b/tree-walk.c
> @@ -47,7 +47,6 @@ 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.raw_mode = mode;
>         desc->entry.object_type = object_type(mode);
>         desc->entry.pathlen = len - 1;
> diff --git a/unpack-trees.c b/unpack-trees.c
> index dcdf8130745..2fb346714b3 100644
> --- a/unpack-trees.c
> +++ b/unpack-trees.c
> @@ -868,6 +868,7 @@ static int traverse_trees_recursive(int n, unsigned long dirmask,
>         newinfo.name = p->path;
>         newinfo.namelen = p->pathlen;
>         newinfo.mode = p->raw_mode;
> +       newinfo.mode = canon_mode(newinfo.mode);
>         newinfo.pathlen = st_add3(newinfo.pathlen, tree_entry_len(p), 1);
>         newinfo.df_conflicts |= df_conflicts;
>
> @@ -1020,7 +1021,8 @@ 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->raw_mode;
> +       unsigned int mode = canon_mode(n->raw_mode);
> +       mode = canon_mode(mode);

It looks like nearly everything in unpack_trees() goes through
create_ce_entry() so perhaps just these two hunks are good enough to
make sure unpack-trees.c and all its callers are dealing with
canonicalized modes.

Except now merge-recursive.c is some weird hybrid were some of its
modes come from unpack-trees (canonicalized), some come diff_tree_oid
(non-canonicalized as far as I can tell above) and various calls to
get_tree_entry_* (also non-canonicalized).  I suspect there are
various bugs there, similar in nature to the ones in merge-ort but
much harder to stamp out given the facts that merge-recursive gets
modes from many more places, and the fact that merge-recursive tends
to do many more comparisons due to checking for each type of
combination of conflicts and having special code for each one
resulting in combinatorial increasing number of nearly-duplicated
codepaths.  merge-recursive is probably a caller that really needs a
way to request that all calls it makes (directly or indirectly) to any
tree walking just return canonicalized modes.

>
>         ce->ce_mode = create_ce_mode(mode);
>         ce->ce_flags = create_ce_flags(stage);
> --

The fact that there are no canon_mode() calls in the diff machinery
makes me wonder if we've changed the behavior for diff/log whenever
there is an object with old modes around.  Perhaps that's a desired
change, but it seems like it should certainly be tested and
documented.  What about all callers of the diff machinery, though?
Are they prepared for such diffs?  One simple example is that
fast-export uses the revision walking and diff machinery, and without
canonicalized modes anymore, it would just print the raw modes.
fast-import sanely won't accept raw modes; it only wants canonical
modes.  So with this change, people may no longer be able to
round-trip fast-export output through fast-import on their existing
repositories.

I also don't like the fact that there is no canonicalization of modes
before writing objects to the git object store.  I believe mktree,
merge-ort, notes (unless your one change to that file is enough but
I'm suspect that it is) are all affected.  match-trees appears to be
affected, but is only called by merge-ort and merge-recursive to
create a temporary merge-base, though the "temporary" tree object will
continue to live in the git object store and could be accessed by
users.  cache-tree.c also writes trees out, but only using ce_mode
which looks like it is everywhere set by calls to e.g.
create_ce_mode(...).  fast-import also writes direct tree objects, but
it doesn't get its modes from reading tree objects, and sanitizes the
inputs it does get.  So, perhaps most tree writers are still sane, but
I'm certain merge-ort would need updates and I suspect mktree and
notes do too.  I think match-trees ought to be updated just for
cleanliness.  And I may have missed other places that directly write
trees out.

I'm worried there's a number of other regressions lurking; those are
just ones I thought about in areas of the code I'm more familiar with.

  reply	other threads:[~2021-03-09 20:25 UTC|newest]

Thread overview: 262+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-04-18  0:29 [PATCH] read_tree(): pass "int stage" as context to read_tree_recursive() Nguyễn Thái Ngọc Duy
2021-03-06 19:34 ` [PATCH 0/7] Move the read_tree() function to its only user Ævar Arnfjörð Bjarmason
2021-03-06 22:06   ` Elijah Newren
2021-03-08  2:21   ` [PATCH v2 0/6] " Ævar Arnfjörð Bjarmason
2021-03-08 15:06     ` [PATCH 00/30] tree-walk: mostly "mode" to "enum object_type" Ævar Arnfjörð Bjarmason
2021-03-09  0:10       ` Elijah Newren
2021-03-09 20:41       ` Elijah Newren
2021-03-09 21:48         ` Ævar Arnfjörð Bjarmason
2021-03-12  6:44           ` Elijah Newren
2021-03-16  2:12       ` [PATCH v2 00/29] tree-walk: mostly replace "mode" with " Ævar Arnfjörð Bjarmason
2021-03-16  7:04         ` Elijah Newren
2021-03-16  8:30           ` Ævar Arnfjörð Bjarmason
2021-03-16 15:57         ` [PATCH v3 00/32] " Ævar Arnfjörð Bjarmason
2021-03-16 17:28           ` Elijah Newren
2021-03-21  0:00           ` [PATCH v4 00/29] " Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 01/29] notes & match-trees: use name_entry's "pathlen" member Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 02/29] cache.h: add a comment to object_type() Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 03/29] tree-walk.h: add object_type member to name_entry Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 04/29] tree-walk.c: migrate to using new "object_type" field when possible Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 05/29] fast-import tests: test for sorting dir/file foo v.s. foo.txt Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 06/29] mktree tests: test that "mode" is passed when sorting Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 07/29] diff " Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 08/29] cache.h: have base_name_compare() take "is tree?", not "mode" Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 09/29] tree-walk.h users: switch object_type(...) to new .object_type Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 10/29] tree.h: format argument lists of read_tree_recursive() users Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 11/29] tree.h API: make read_tree_fn_t take an "enum object_type" Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 12/29] tree-walk.h users: migrate "p->mode &&" pattern Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 13/29] tree-walk.h users: refactor chained "mode" if/else into switch Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 14/29] tree-walk.h users: migrate miscellaneous "mode" to "object_type" Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 15/29] merge-tree tests: test for the mode comparison in same_entry() Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 16/29] merge-ort: correct reference to test in 62fdec17a11 Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 17/29] fsck.c: switch on "object_type" in fsck_walk_tree() Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 18/29] tree-walk.h users: use temporary variable(s) for "mode" Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 19/29] tree-walk.h API: formatting changes for subsequent commit Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 20/29] tree-walk.h API: rename get_tree_entry() to get_tree_entry_mode() Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 21/29] match-trees: use "tmp" for mode in shift_tree_by() Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 22/29] tree-walk.h API: add get_tree_entry_type() Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 23/29] tree-walk.h API: document and format tree_entry_extract() Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 24/29] tree-entry.h API: rename tree_entry_extract() to tree_entry_extract_mode() Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 25/29] tree-walk.h API: add a tree_entry_extract_all() function Ævar Arnfjörð Bjarmason
2021-03-21  0:00             ` [PATCH v4 26/29] tree-walk.h API: add get_tree_entry_all() Ævar Arnfjörð Bjarmason
2021-03-21  0:01             ` [PATCH v4 27/29] tree-walk.h API: add a get_tree_entry_path() function Ævar Arnfjörð Bjarmason
2021-03-21  0:01             ` [PATCH v4 28/29] blame: emit a better error on 'git blame directory' Ævar Arnfjörð Bjarmason
2021-03-21  0:01             ` [PATCH v4 29/29] tree-walk.h API: add a tree_entry_extract_type() function Ævar Arnfjörð Bjarmason
2021-03-21  1:16             ` [PATCH v4 00/29] tree-walk: mostly replace "mode" with "enum object_type" Junio C Hamano
2021-03-21 12:26               ` Ævar Arnfjörð Bjarmason
2021-03-21 12:39                 ` [PATCH 0/2] diff --no-index: fix test blind spots Ævar Arnfjörð Bjarmason
2021-03-21 12:39                   ` [PATCH 1/2] diff --no-index tests: add test for --exit-code Ævar Arnfjörð Bjarmason
2021-03-21 18:33                     ` Ramsay Jones
2021-03-21 21:33                       ` Junio C Hamano
2021-03-21 22:44                         ` Ævar Arnfjörð Bjarmason
2021-03-21 12:39                   ` [PATCH 2/2] diff --no-index tests: test mode normalization Ævar Arnfjörð Bjarmason
2021-03-21 22:36                   ` [PATCH v2 0/2] diff --no-index: fix test blind spots Ævar Arnfjörð Bjarmason
2021-03-21 22:36                     ` [PATCH v2 1/2] diff --no-index tests: add test for --exit-code Ævar Arnfjörð Bjarmason
2021-03-21 22:36                     ` [PATCH v2 2/2] diff --no-index tests: test mode normalization Ævar Arnfjörð Bjarmason
2021-03-22 19:22                       ` Junio C Hamano
2021-03-22  4:27                     ` [PATCH v2 0/2] diff --no-index: fix test blind spots Junio C Hamano
2021-03-23 16:40                     ` [PATCH v3 " Ævar Arnfjörð Bjarmason
2021-03-23 16:40                       ` [PATCH v3 1/2] diff --no-index tests: add test for --exit-code Ævar Arnfjörð Bjarmason
2021-03-23 16:40                       ` [PATCH v3 2/2] diff --no-index tests: test mode normalization Ævar Arnfjörð Bjarmason
2021-03-23 16:47                       ` [PATCH v3 0/2] diff --no-index: fix test blind spots Junio C Hamano
2021-03-21 17:13                 ` [PATCH v4 00/29] tree-walk: mostly replace "mode" with "enum object_type" Junio C Hamano
2021-03-21 18:42                   ` Ævar Arnfjörð Bjarmason
2021-03-31 19:09                     ` [PATCH v5 00/18] tree-walk.h: slimmed down Ævar Arnfjörð Bjarmason
2021-03-31 19:09                       ` [PATCH v5 01/18] cache.h: add a comment to object_type() Ævar Arnfjörð Bjarmason
2021-03-31 22:33                         ` Junio C Hamano
2021-03-31 19:09                       ` [PATCH v5 02/18] merge-ort: correct reference to test in 62fdec17a11 Ævar Arnfjörð Bjarmason
2021-03-31 19:09                       ` [PATCH v5 03/18] cache.h: have base_name_compare() take "is tree?", not "mode" Ævar Arnfjörð Bjarmason
2021-03-31 22:55                         ` Junio C Hamano
2021-03-31 19:09                       ` [PATCH v5 04/18] fast-import tests: test for sorting dir/file foo v.s. foo.txt Ævar Arnfjörð Bjarmason
2021-03-31 19:09                       ` [PATCH v5 05/18] mktree tests: test that "mode" is passed when sorting Ævar Arnfjörð Bjarmason
2021-03-31 23:04                         ` Junio C Hamano
2021-03-31 19:09                       ` [PATCH v5 06/18] diff " Ævar Arnfjörð Bjarmason
2021-03-31 23:07                         ` Junio C Hamano
2021-03-31 19:09                       ` [PATCH v5 07/18] merge-tree tests: test for the mode comparison in same_entry() Ævar Arnfjörð Bjarmason
2021-03-31 23:12                         ` Junio C Hamano
2021-03-31 19:09                       ` [PATCH v5 08/18] blame: emit a better error on 'git blame directory' Ævar Arnfjörð Bjarmason
2021-03-31 23:26                         ` Junio C Hamano
2021-04-02  9:26                           ` Ævar Arnfjörð Bjarmason
2021-04-02 21:08                             ` Junio C Hamano
2021-03-31 19:09                       ` [PATCH v5 09/18] notes & match-trees: use name_entry's "pathlen" member Ævar Arnfjörð Bjarmason
2021-03-31 23:32                         ` Junio C Hamano
2021-03-31 19:09                       ` [PATCH v5 10/18] tree-walk.h users: use temporary variable(s) for "mode" Ævar Arnfjörð Bjarmason
2021-03-31 19:09                       ` [PATCH v5 11/18] match-trees: use "tmp" for mode in shift_tree_by() Ævar Arnfjörð Bjarmason
2021-03-31 23:35                         ` Junio C Hamano
2021-03-31 19:09                       ` [PATCH v5 12/18] tree.h: format argument lists of read_tree() users Ævar Arnfjörð Bjarmason
2021-03-31 19:09                       ` [PATCH v5 13/18] tree-walk.h API: formatting changes for subsequent commit Ævar Arnfjörð Bjarmason
2021-03-31 19:09                       ` [PATCH v5 14/18] tree-walk.h API doc: improve documentation of get_tree_entry() Ævar Arnfjörð Bjarmason
2021-04-01 20:30                         ` Junio C Hamano
2021-04-02  9:27                           ` Ævar Arnfjörð Bjarmason
2021-03-31 19:09                       ` [PATCH v5 15/18] tree-walk.h API: rename get_tree_entry() to get_tree_entry_mode() Ævar Arnfjörð Bjarmason
2021-03-31 19:09                       ` [PATCH v5 16/18] tree-walk.h API: add a get_tree_entry_path() function Ævar Arnfjörð Bjarmason
2021-04-01 20:41                         ` Junio C Hamano
2021-04-02  9:41                           ` Ævar Arnfjörð Bjarmason
2021-03-31 19:09                       ` [PATCH v5 17/18] tree-walk.h API: document and format tree_entry_extract() Ævar Arnfjörð Bjarmason
2021-04-01 20:46                         ` Junio C Hamano
2021-03-31 19:09                       ` [PATCH v5 18/18] tree-entry.h API: rename tree_entry_extract() to tree_entry_extract_mode() Ævar Arnfjörð Bjarmason
2021-04-01 20:49                         ` Junio C Hamano
2021-03-16 15:57         ` [PATCH v3 01/32] diff.c: remove redundant canon_mode() call Ævar Arnfjörð Bjarmason
2021-03-16 15:57         ` [PATCH v3 02/32] notes & match-trees: use name_entry's "pathlen" member Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 03/32] cache.h: add a comment to object_type() Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 04/32] tree-walk.h: add object_type member to name_entry Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 05/32] tree-walk.c: migrate to using new "object_type" field when possible Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 06/32] fast-import tests: test for sorting dir/file foo v.s. foo.txt Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 07/32] mktree tests: test that "mode" is passed when sorting Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 08/32] diff " Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 09/32] cache.h: have base_name_compare() take "is tree?", not "mode" Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 10/32] tree-walk.h users: switch object_type(...) to new .object_type Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 11/32] tree.h: format argument lists of read_tree_recursive() users Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 12/32] tree.h users: format argument lists in archive.c Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 13/32] archive: get rid of 'stage' parameter Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 14/32] tree.h API: make read_tree_fn_t take an "enum object_type" Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 15/32] tree-walk.h users: migrate "p->mode &&" pattern Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 16/32] tree-walk.h users: refactor chained "mode" if/else into switch Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 17/32] tree-walk.h users: migrate miscellaneous "mode" to "object_type" Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 18/32] merge-tree tests: test for the mode comparison in same_entry() Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 19/32] merge-ort: correct reference to test in 62fdec17a11 Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 20/32] fsck.c: switch on "object_type" in fsck_walk_tree() Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 21/32] tree-walk.h users: use temporary variable(s) for "mode" Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 22/32] tree-walk.h API: formatting changes for subsequent commit Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 23/32] tree-walk.h API: rename get_tree_entry() to get_tree_entry_mode() Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 24/32] match-trees: use "tmp" for mode in shift_tree_by() Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 25/32] tree-walk.h API: add get_tree_entry_type() Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 26/32] tree-walk.h API: document and format tree_entry_extract() Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 27/32] tree-entry.h API: rename tree_entry_extract() to tree_entry_extract_mode() Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 28/32] tree-walk.h API: add a tree_entry_extract_all() function Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 29/32] tree-walk.h API: add get_tree_entry_all() Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 30/32] tree-walk.h API: add a get_tree_entry_path() function Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 31/32] blame: emit a better error on 'git blame directory' Ævar Arnfjörð Bjarmason
2021-03-16 15:58         ` [PATCH v3 32/32] tree-walk.h API: add a tree_entry_extract_type() function Ævar Arnfjörð Bjarmason
2021-03-16  2:12       ` [PATCH v2 01/29] diff.c: remove redundant canon_mode() call Ævar Arnfjörð Bjarmason
2021-03-16  2:12       ` [PATCH v2 02/29] notes & match-trees: use name_entry's "pathlen" member Ævar Arnfjörð Bjarmason
2021-03-16  2:12       ` [PATCH v2 03/29] cache.h: add a comment to object_type() Ævar Arnfjörð Bjarmason
2021-03-16  2:12       ` [PATCH v2 04/29] tree-walk.h: add object_type member to name_entry Ævar Arnfjörð Bjarmason
2021-03-16  2:12       ` [PATCH v2 05/29] tree-walk.c: migrate to using new "object_type" field when possible Ævar Arnfjörð Bjarmason
2021-03-16  2:12       ` [PATCH v2 06/29] cache.h: have base_name_compare() take "is tree?", not "mode" Ævar Arnfjörð Bjarmason
2021-03-16  5:49         ` Elijah Newren
2021-03-16  2:12       ` [PATCH v2 07/29] tree-walk.h users: switch object_type(...) to new .object_type Ævar Arnfjörð Bjarmason
2021-03-16  2:12       ` [PATCH v2 08/29] tree.h: format argument lists of read_tree_recursive() users Ævar Arnfjörð Bjarmason
2021-03-16  2:12       ` [PATCH v2 09/29] tree.h users: format argument lists in archive.c Ævar Arnfjörð Bjarmason
2021-03-16  2:12       ` [PATCH v2 10/29] archive: get rid of 'stage' parameter Ævar Arnfjörð Bjarmason
2021-03-16  2:12       ` [PATCH v2 11/29] tree.h API: make read_tree_fn_t take an "enum object_type" Ævar Arnfjörð Bjarmason
2021-03-16  2:12       ` [PATCH v2 12/29] tree-walk.h users: migrate "p->mode &&" pattern Ævar Arnfjörð Bjarmason
2021-03-16  2:12       ` [PATCH v2 13/29] tree-walk.h users: refactor chained "mode" if/else into switch Ævar Arnfjörð Bjarmason
2021-03-16  2:12       ` [PATCH v2 14/29] tree-walk.h users: migrate miscellaneous "mode" to "object_type" Ævar Arnfjörð Bjarmason
2021-03-16  2:12       ` [PATCH v2 15/29] merge-tree tests: test for the mode comparison in same_entry() Ævar Arnfjörð Bjarmason
2021-03-16  2:12       ` [PATCH v2 16/29] merge-ort: correct reference to test in 62fdec17a11 Ævar Arnfjörð Bjarmason
2021-03-16  2:13       ` [PATCH v2 17/29] fsck.c: switch on "object_type" in fsck_walk_tree() Ævar Arnfjörð Bjarmason
2021-03-16  2:13       ` [PATCH v2 18/29] tree-walk.h users: use temporary variable(s) for "mode" Ævar Arnfjörð Bjarmason
2021-03-16  2:13       ` [PATCH v2 19/29] tree-walk.h API: formatting changes for subsequent commit Ævar Arnfjörð Bjarmason
2021-03-16  2:13       ` [PATCH v2 20/29] tree-walk.h API: rename get_tree_entry() to get_tree_entry_mode() Ævar Arnfjörð Bjarmason
2021-03-16  2:13       ` [PATCH v2 21/29] tree-walk.h API users: use "tmp" for mode in shift_tree_by() Ævar Arnfjörð Bjarmason
2021-03-16  6:34         ` Elijah Newren
2021-03-16  2:13       ` [PATCH v2 22/29] tree-walk.h API: add get_tree_entry_type() Ævar Arnfjörð Bjarmason
2021-03-16  2:13       ` [PATCH v2 23/29] tree-walk.h API: document and format tree_entry_extract() Ævar Arnfjörð Bjarmason
2021-03-16  2:13       ` [PATCH v2 24/29] tree-entry.h API: rename tree_entry_extract() to tree_entry_extract_mode() Ævar Arnfjörð Bjarmason
2021-03-16  2:13       ` [PATCH v2 25/29] tree-walk.h API: add a tree_entry_extract_all() function Ævar Arnfjörð Bjarmason
2021-03-16  2:13       ` [PATCH v2 26/29] tree-walk.h API: add get_tree_entry_all() Ævar Arnfjörð Bjarmason
2021-03-16  2:13       ` [PATCH v2 27/29] tree-walk.h API: add a get_tree_entry_path() function Ævar Arnfjörð Bjarmason
2021-03-16  6:50         ` Elijah Newren
2021-03-16  2:13       ` [PATCH v2 28/29] blame: emit a better error on 'git blame directory' Ævar Arnfjörð Bjarmason
2021-03-16  6:55         ` Elijah Newren
2021-03-16  2:13       ` [PATCH v2 29/29] tree-walk.h API: add a tree_entry_extract_type() function Ævar Arnfjörð Bjarmason
2021-03-08 15:06     ` [PATCH 01/30] diff.c: remove redundant canon_mode() call Ævar Arnfjörð Bjarmason
2021-03-08 15:06     ` [PATCH 02/30] notes & match-trees: use name_entry's "pathlen" member Ævar Arnfjörð Bjarmason
2021-03-08 15:06     ` [PATCH 03/30] cache.h: add a comment to object_type() Ævar Arnfjörð Bjarmason
2021-03-09 16:40       ` Elijah Newren
2021-03-08 15:06     ` [PATCH 04/30] tree-walk.h: add object_type member to name_entry Ævar Arnfjörð Bjarmason
2021-03-08 15:06     ` [PATCH 05/30] tree-walk.c: migrate to using new "object_type" field when possible Ævar Arnfjörð Bjarmason
2021-03-09 16:44       ` Elijah Newren
2021-03-08 15:06     ` [PATCH 06/30] cache.h: have base_name_compare() take "is tree?", not "mode" Ævar Arnfjörð Bjarmason
2021-03-09 16:56       ` Elijah Newren
2021-03-08 15:06     ` [PATCH 07/30] tree-walk.h users: switch object_type(...) to new .object_type Ævar Arnfjörð Bjarmason
2021-03-08 15:06     ` [PATCH 08/30] tree.h: format argument lists of read_tree_recursive() users Ævar Arnfjörð Bjarmason
2021-03-08 15:06     ` [PATCH 09/30] tree.h users: format argument lists in archive.c Ævar Arnfjörð Bjarmason
2021-03-09 17:04       ` Elijah Newren
2021-03-08 15:06     ` [PATCH 10/30] archive: get rid of 'stage' parameter Ævar Arnfjörð Bjarmason
2021-03-08 15:06     ` [PATCH 11/30] tree.h API: make read_tree_fn_t take an "enum object_type" Ævar Arnfjörð Bjarmason
2021-03-08 15:06     ` [PATCH 12/30] tree-walk.h users: migrate "p->mode &&" pattern Ævar Arnfjörð Bjarmason
2021-03-09 17:09       ` Elijah Newren
2021-03-08 15:06     ` [PATCH 13/30] tree-walk.h users: refactor chained "mode" if/else into switch Ævar Arnfjörð Bjarmason
2021-03-09 17:11       ` Elijah Newren
2021-03-08 15:06     ` [PATCH 14/30] tree-walk.h users: migrate miscellaneous "mode" to "object_type" Ævar Arnfjörð Bjarmason
2021-03-08 15:06     ` [PATCH 15/30] merge-tree tests: test for the mode comparison in same_entry() Ævar Arnfjörð Bjarmason
2021-03-09 17:19       ` Elijah Newren
2021-03-08 15:06     ` [PATCH 16/30] merge-ort: correct reference to test in 62fdec17a11 Ævar Arnfjörð Bjarmason
2021-03-09 17:22       ` Elijah Newren
2021-03-08 15:06     ` [PATCH 17/30] fsck.c: switch on "object_type" in fsck_walk_tree() Ævar Arnfjörð Bjarmason
2021-03-08 15:06     ` [PATCH 18/30] tree-walk.h users: use temporary variable(s) for "mode" Ævar Arnfjörð Bjarmason
2021-03-08 15:06     ` [PATCH 19/30] tree-walk.h API: formatting changes for subsequent commit Ævar Arnfjörð Bjarmason
2021-03-08 15:06     ` [PATCH 20/30] tree-walk.h API: rename get_tree_entry() to get_tree_entry_mode() Ævar Arnfjörð Bjarmason
2021-03-08 15:06     ` [PATCH 21/30] tree-walk.h API users: use "tmp" for mode in shift_tree_by() Ævar Arnfjörð Bjarmason
2021-03-09 17:47       ` Elijah Newren
2021-03-08 15:06     ` [PATCH 22/30] tree-walk.h API: Add get_tree_entry_type() Ævar Arnfjörð Bjarmason
2021-03-09 17:56       ` Elijah Newren
2021-03-08 15:06     ` [PATCH 23/30] tree-walk.h API: add a get_tree_entry_path() function Ævar Arnfjörð Bjarmason
2021-03-09 18:17       ` Elijah Newren
2021-03-08 15:06     ` [PATCH 24/30] tree-walk.h API: document and format tree_entry_extract() Ævar Arnfjörð Bjarmason
2021-03-09 18:28       ` Elijah Newren
2021-03-08 15:06     ` [PATCH 25/30] tree-entry.h API: rename tree_entry_extract() to tree_entry_extract_mode() Ævar Arnfjörð Bjarmason
2021-03-08 15:06     ` [PATCH 26/30] tree-walk.h API: add a tree_entry_extract_all() function Ævar Arnfjörð Bjarmason
2021-03-09 18:30       ` Elijah Newren
2021-03-08 15:06     ` [PATCH 27/30] tree-walk.h API: add a tree_entry_extract_type() function Ævar Arnfjörð Bjarmason
2021-03-08 15:06     ` [PATCH 28/30] tree-walk.h API users: rename "struct name_entry"'s "mode" to "raw_mode" Ævar Arnfjörð Bjarmason
2021-03-09 18:53       ` Elijah Newren
2021-03-08 15:06     ` [PATCH 29/30] tree.h API users: rename read_tree_fn_t's " Ævar Arnfjörð Bjarmason
2021-03-09 19:02       ` Elijah Newren
2021-03-08 15:06     ` [PATCH 30/30] tree-walk.h API: move canon_mode() back out of decode_tree_entry() Ævar Arnfjörð Bjarmason
2021-03-09 20:23       ` Elijah Newren [this message]
2021-03-08 19:18     ` [PATCH v2 0/6] Move the read_tree() function to its only user Elijah Newren
2021-03-15 23:43     ` [PATCH v3 0/9] read_tree() and read_tree_recursive() refactoring Ævar Arnfjörð Bjarmason
2021-03-16  5:37       ` Elijah Newren
2021-03-16 15:52       ` [PATCH v4 " Ævar Arnfjörð Bjarmason
2021-03-16 15:52       ` [PATCH v4 1/9] ls-files tests: add meaningful --with-tree tests Ævar Arnfjörð Bjarmason
2021-03-16 15:52       ` [PATCH v4 2/9] tree.c API: move read_tree() into builtin/ls-files.c Ævar Arnfjörð Bjarmason
2021-03-16 15:52       ` [PATCH v4 3/9] ls-files: don't needlessly pass around stage variable Ævar Arnfjörð Bjarmason
2021-03-16 15:52       ` [PATCH v4 4/9] ls-files: refactor away read_tree() Ævar Arnfjörð Bjarmason
2021-03-16 15:52       ` [PATCH v4 5/9] tree.h API: remove support for starting at prefix != "" Ævar Arnfjörð Bjarmason
2021-03-16 15:52       ` [PATCH v4 6/9] tree.h API: remove "stage" parameter from read_tree_recursive() Ævar Arnfjörð Bjarmason
2021-03-16 15:52       ` [PATCH v4 7/9] tree.h API: rename read_tree_recursive() to read_tree() Ævar Arnfjörð Bjarmason
2021-03-16 15:52       ` [PATCH v4 8/9] show tests: add test for "git show <tree>" Ævar Arnfjörð Bjarmason
2021-03-16 15:52       ` [PATCH v4 9/9] tree.h API: expose read_tree_1() as read_tree_at() Ævar Arnfjörð Bjarmason
2021-03-17 17:38       ` [PATCH v3 0/9] read_tree() and read_tree_recursive() refactoring Junio C Hamano
2021-03-20 22:37         ` [PATCH v5 0/8] " Ævar Arnfjörð Bjarmason
2021-03-20 22:37           ` [PATCH v5 1/8] show tests: add test for "git show <tree>" Ævar Arnfjörð Bjarmason
2021-03-20 22:37           ` [PATCH v5 2/8] ls-files tests: add meaningful --with-tree tests Ævar Arnfjörð Bjarmason
2021-03-20 22:37           ` [PATCH v5 3/8] tree.c API: move read_tree() into builtin/ls-files.c Ævar Arnfjörð Bjarmason
2021-03-20 22:37           ` [PATCH v5 4/8] ls-files: don't needlessly pass around stage variable Ævar Arnfjörð Bjarmason
2021-03-20 22:37           ` [PATCH v5 5/8] ls-files: refactor away read_tree() Ævar Arnfjörð Bjarmason
2021-03-20 22:37           ` [PATCH v5 6/8] archive: stop passing "stage" through read_tree_recursive() Ævar Arnfjörð Bjarmason
2021-03-20 22:37           ` [PATCH v5 7/8] tree.h API: expose read_tree_1() as read_tree_at() Ævar Arnfjörð Bjarmason
2021-03-20 22:37           ` [PATCH v5 8/8] tree.h API: simplify read_tree_recursive() signature Ævar Arnfjörð Bjarmason
2021-03-20 23:08           ` [PATCH v5 0/8] read_tree() and read_tree_recursive() refactoring Junio C Hamano
2021-03-15 23:43     ` [PATCH v3 1/9] ls-files tests: add meaningful --with-tree tests Ævar Arnfjörð Bjarmason
2021-03-15 23:43     ` [PATCH v3 2/9] tree.c API: move read_tree() into builtin/ls-files.c Ævar Arnfjörð Bjarmason
2021-03-15 23:43     ` [PATCH v3 3/9] ls-files: don't needlessly pass around stage variable Ævar Arnfjörð Bjarmason
2021-03-15 23:43     ` [PATCH v3 4/9] ls-files: refactor away read_tree() Ævar Arnfjörð Bjarmason
2021-03-15 23:43     ` [PATCH v3 5/9] tree.h API: remove support for starting at prefix != "" Ævar Arnfjörð Bjarmason
2021-03-15 23:43     ` [PATCH v3 6/9] tree.h API: remove "stage" parameter from read_tree_recursive() Ævar Arnfjörð Bjarmason
2021-03-15 23:43     ` [PATCH v3 7/9] tree.h API: rename read_tree_recursive() to read_tree() Ævar Arnfjörð Bjarmason
2021-03-15 23:43     ` [PATCH v3 8/9] show tests: add test for "git show <tree>" Ævar Arnfjörð Bjarmason
2021-03-16  5:19       ` Elijah Newren
2021-03-15 23:43     ` [PATCH v3 9/9] tree.h API: expose read_tree_1() as read_tree_at() Ævar Arnfjörð Bjarmason
2021-03-08  2:21   ` [PATCH v2 1/6] ls-files tests: add meaningful --with-tree tests Ævar Arnfjörð Bjarmason
2021-03-08  2:21   ` [PATCH v2 2/6] tree.c API: move read_tree() into builtin/ls-files.c Ævar Arnfjörð Bjarmason
2021-03-08 18:06     ` Junio C Hamano
2021-03-12 21:41     ` Junio C Hamano
2021-03-08  2:21   ` [PATCH v2 3/6] ls-files: don't needlessly pass around stage variable Ævar Arnfjörð Bjarmason
2021-03-08 18:18     ` Junio C Hamano
2021-03-08  2:21   ` [PATCH v2 4/6] ls-files: refactor away read_tree() Ævar Arnfjörð Bjarmason
2021-03-08 18:19     ` Junio C Hamano
2021-03-08  2:21   ` [PATCH v2 5/6] tree.h API: remove support for starting at prefix != "" Ævar Arnfjörð Bjarmason
2021-03-08  2:21   ` [PATCH v2 6/6] tree.h API: remove "stage" parameter from read_tree_recursive() Ævar Arnfjörð Bjarmason
2021-03-06 19:34 ` [PATCH 1/7] tree.c API: move read_tree() into builtin/ls-files.c Ævar Arnfjörð Bjarmason
2021-03-06 19:34 ` [PATCH 2/7] ls-files: don't needlessly pass around stage variable Ævar Arnfjörð Bjarmason
2021-03-06 19:34 ` [PATCH 3/7] ls-files: remove cache juggling + sorting Ævar Arnfjörð Bjarmason
2021-03-06 21:37   ` Elijah Newren
2021-03-06 19:34 ` [PATCH 4/7] merge-ort: move cmp_cache_name_compare() from tree.c Ævar Arnfjörð Bjarmason
2021-03-06 19:34 ` [PATCH 5/7] ls-files: refactor read_one_entry_quick() to use a strbuf Ævar Arnfjörð Bjarmason
2021-03-06 19:34 ` [PATCH 6/7] tree.h API: remove support for starting at prefix != "" Ævar Arnfjörð Bjarmason
2021-03-06 21:55   ` Elijah Newren
2021-03-06 19:34 ` [PATCH 7/7] tree.h API: remove "stage" parameter from read_tree_recursive() Ævar Arnfjörð Bjarmason

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CABPp-BEPkukGz32rrro1hzMvSQzX4v7U17CAcV-G2NS6v0u55g@mail.gmail.com \
    --to=newren@gmail.com \
    --cc=avarab@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=kirr@navytux.spb.ru \
    --cc=pclouds@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).