From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Elijah Newren <newren@gmail.com>
Cc: Elijah Newren via GitGitGadget <gitgitgadget@gmail.com>,
Git Mailing List <git@vger.kernel.org>,
Fedor Biryukov <fedor.birjukov@gmail.com>,
Philip Oakley <philipoakley@iee.email>,
Phillip Wood <phillip.wood123@gmail.com>,
Eric Sunshine <sunshine@sunshineco.com>
Subject: Re: [PATCH v3 04/11] unpack-trees: introduce preserve_ignored to unpack_trees_options
Date: Fri, 01 Oct 2021 11:53:43 +0200 [thread overview]
Message-ID: <877dexrqvg.fsf@evledraar.gmail.com> (raw)
In-Reply-To: <87k0ixrv23.fsf@evledraar.gmail.com>
On Fri, Oct 01 2021, Ævar Arnfjörð Bjarmason wrote:
> Aside about safety: One thing I'll sometimes do when I'm unsure about
> those sorts of fixes is to have my new INIT set a new "sentinel" field
> to "12345" or whatever, then just BUG() out in an entry point in the API
> that you can't avoid calling if it's not set like that, e.g. dir_clear()
> or whatever the setup/work function is.
For reference: Something like the below, which passes with my WIP
patches. Showing that no non-static entry point can reach the code in
unpack-trees.c without "foo" being 12345, which can only be the case if
callers have used the macro (and the code internal to unpack-trees.c is
easy enough to audit).
unpack-trees.c | 25 +++++++++++++++++++++++++
unpack-trees.h | 2 ++
2 files changed, 27 insertions(+)
diff --git a/unpack-trees.c b/unpack-trees.c
index d40af221e1c..f2365ecf215 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c
@@ -199,6 +199,8 @@ void clear_unpack_trees_porcelain(struct unpack_trees_options *opts)
{
strvec_clear(&opts->msgs_to_free);
dir_clear(&opts->dir);
+ if (opts->foo != 12345)
+ BUG("noes");
memset(opts->msgs, 0, sizeof(opts->msgs));
}
@@ -1702,6 +1704,9 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
struct pattern_list pl;
int free_pattern_list = 0;
+ if (o->foo != 12345)
+ BUG("noes");
+
if (len > MAX_UNPACK_TREES)
die("unpack_trees takes at most %d trees", MAX_UNPACK_TREES);
@@ -1903,6 +1908,9 @@ enum update_sparsity_result update_sparsity(struct unpack_trees_options *o)
unsigned old_show_all_errors;
int free_pattern_list = 0;
+ if (o->foo != 12345)
+ BUG("noes");
+
old_show_all_errors = o->show_all_errors;
o->show_all_errors = 1;
@@ -2033,6 +2041,8 @@ static int verify_uptodate_1(const struct cache_entry *ce,
int verify_uptodate(const struct cache_entry *ce,
struct unpack_trees_options *o)
{
+ if (o->foo != 12345)
+ BUG("noes");
if (!o->skip_sparse_checkout && (ce->ce_flags & CE_NEW_SKIP_WORKTREE))
return 0;
return verify_uptodate_1(ce, o, ERROR_NOT_UPTODATE_FILE);
@@ -2417,6 +2427,9 @@ int threeway_merge(const struct cache_entry * const *stages,
int no_anc_exists = 1;
int i;
+ if (o->foo != 12345)
+ BUG("noes");
+
for (i = 1; i < o->head_idx; i++) {
if (!stages[i] || stages[i] == o->df_conflict_entry)
any_anc_missing = 1;
@@ -2580,6 +2593,9 @@ int twoway_merge(const struct cache_entry * const *src,
const struct cache_entry *oldtree = src[1];
const struct cache_entry *newtree = src[2];
+ if (o->foo != 12345)
+ BUG("noes");
+
if (o->merge_size != 2)
return error("Cannot do a twoway merge of %d trees",
o->merge_size);
@@ -2654,6 +2670,9 @@ int bind_merge(const struct cache_entry * const *src,
const struct cache_entry *old = src[0];
const struct cache_entry *a = src[1];
+ if (o->foo != 12345)
+ BUG("noes");
+
if (o->merge_size != 1)
return error("Cannot do a bind merge of %d trees",
o->merge_size);
@@ -2680,6 +2699,9 @@ int oneway_merge(const struct cache_entry * const *src,
const struct cache_entry *old = src[0];
const struct cache_entry *a = src[1];
+ if (o->foo != 12345)
+ BUG("noes");
+
if (o->merge_size != 1)
return error("Cannot do a oneway merge of %d trees",
o->merge_size);
@@ -2717,6 +2739,9 @@ int stash_worktree_untracked_merge(const struct cache_entry * const *src,
const struct cache_entry *worktree = src[1];
const struct cache_entry *untracked = src[2];
+ if (o->foo != 12345)
+ BUG("noes");
+
if (o->merge_size != 2)
BUG("invalid merge_size: %d", o->merge_size);
diff --git a/unpack-trees.h b/unpack-trees.h
index 75b67f90ccd..8dae0938ad1 100644
--- a/unpack-trees.h
+++ b/unpack-trees.h
@@ -90,10 +90,12 @@ struct unpack_trees_options {
struct pattern_list *pl; /* for internal use */
struct checkout_metadata meta;
+ int foo;
};
#define UNPACK_TREES_OPTIONS_INIT { \
.msgs_to_free = STRVEC_INIT, \
.dir = DIR_INIT, \
+ .foo = 12345, \
}
void unpack_trees_init(struct unpack_trees_options *options);
next prev parent reply other threads:[~2021-10-01 10:17 UTC|newest]
Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-18 23:15 [PATCH 0/6] Fix various issues around removal of untracked files/directories Elijah Newren via GitGitGadget
2021-09-18 23:15 ` [PATCH 1/6] t2500: add various tests for nuking untracked files Elijah Newren via GitGitGadget
2021-09-19 13:44 ` Ævar Arnfjörð Bjarmason
2021-09-20 14:48 ` Elijah Newren
2021-09-18 23:15 ` [PATCH 2/6] Split unpack_trees 'reset' flag into two for untracked handling Elijah Newren via GitGitGadget
2021-09-19 13:48 ` Ævar Arnfjörð Bjarmason
2021-09-20 15:20 ` Elijah Newren
2021-09-20 10:19 ` Phillip Wood
2021-09-20 16:05 ` Elijah Newren
2021-09-20 18:11 ` Phillip Wood
2021-09-24 2:27 ` Elijah Newren
2021-09-18 23:15 ` [PATCH 3/6] unpack-trees: avoid nuking untracked dir in way of unmerged file Elijah Newren via GitGitGadget
2021-09-18 23:15 ` [PATCH 4/6] unpack-trees: avoid nuking untracked dir in way of locally deleted file Elijah Newren via GitGitGadget
2021-09-19 13:52 ` Ævar Arnfjörð Bjarmason
2021-09-20 16:12 ` Elijah Newren
2021-09-18 23:15 ` [PATCH 5/6] Comment important codepaths regarding nuking untracked files/dirs Elijah Newren via GitGitGadget
2021-09-24 11:47 ` Luke Diamand
2021-09-24 13:41 ` Elijah Newren
2021-09-18 23:15 ` [PATCH 6/6] Documentation: call out commands that nuke untracked files/directories Elijah Newren via GitGitGadget
2021-09-19 10:52 ` Philip Oakley
2021-09-19 13:36 ` Philip Oakley
2021-09-20 16:29 ` Elijah Newren
2021-09-24 6:37 ` [PATCH v2 0/6] Fix various issues around removal of " Elijah Newren via GitGitGadget
2021-09-24 6:37 ` [PATCH v2 1/6] t2500: add various tests for nuking untracked files Elijah Newren via GitGitGadget
2021-09-24 6:37 ` [PATCH v2 2/6] Change unpack_trees' 'reset' flag into an enum Elijah Newren via GitGitGadget
2021-09-24 17:35 ` Junio C Hamano
2021-09-26 6:50 ` Elijah Newren
2021-09-24 6:37 ` [PATCH v2 3/6] unpack-trees: avoid nuking untracked dir in way of unmerged file Elijah Newren via GitGitGadget
2021-09-24 6:37 ` [PATCH v2 4/6] unpack-trees: avoid nuking untracked dir in way of locally deleted file Elijah Newren via GitGitGadget
2021-09-24 6:37 ` [PATCH v2 5/6] Comment important codepaths regarding nuking untracked files/dirs Elijah Newren via GitGitGadget
2021-09-24 17:50 ` Eric Sunshine
2021-09-26 6:35 ` Elijah Newren
2021-09-24 6:37 ` [PATCH v2 6/6] Documentation: call out commands that nuke untracked files/directories Elijah Newren via GitGitGadget
2021-09-27 16:33 ` [PATCH v3 00/11] Fix various issues around removal of " Elijah Newren via GitGitGadget
2021-09-27 16:33 ` [PATCH v3 01/11] t2500: add various tests for nuking untracked files Elijah Newren via GitGitGadget
2021-09-27 16:33 ` [PATCH v3 02/11] checkout, read-tree: fix leak of unpack_trees_options.dir Elijah Newren via GitGitGadget
2021-09-27 16:33 ` [PATCH v3 03/11] read-tree, merge-recursive: overwrite ignored files by default Elijah Newren via GitGitGadget
2021-12-13 17:12 ` Jack O'Connor
2021-12-13 20:10 ` Elijah Newren
2021-09-27 16:33 ` [PATCH v3 04/11] unpack-trees: introduce preserve_ignored to unpack_trees_options Elijah Newren via GitGitGadget
2021-09-29 9:22 ` Ævar Arnfjörð Bjarmason
2021-09-29 15:35 ` Elijah Newren
2021-09-29 18:30 ` Ævar Arnfjörð Bjarmason
2021-09-30 4:25 ` Elijah Newren
2021-09-30 14:04 ` Ævar Arnfjörð Bjarmason
2021-10-01 1:53 ` Elijah Newren
2021-10-01 8:15 ` Ævar Arnfjörð Bjarmason
2021-10-01 9:53 ` Ævar Arnfjörð Bjarmason [this message]
2021-10-01 18:50 ` Elijah Newren
2021-10-02 8:44 ` Ævar Arnfjörð Bjarmason
2021-10-03 22:21 ` Ævar Arnfjörð Bjarmason
2021-10-04 13:45 ` Elijah Newren
2021-10-04 13:45 ` Elijah Newren
2021-10-04 14:07 ` Ævar Arnfjörð Bjarmason
2021-10-04 14:57 ` Elijah Newren
2021-09-27 16:33 ` [PATCH v3 05/11] unpack-trees: make dir an internal-only struct Elijah Newren via GitGitGadget
2021-09-27 16:33 ` [PATCH v3 06/11] Remove ignored files by default when they are in the way Elijah Newren via GitGitGadget
2021-09-27 16:33 ` [PATCH v3 07/11] Change unpack_trees' 'reset' flag into an enum Elijah Newren via GitGitGadget
2021-09-27 16:33 ` [PATCH v3 08/11] unpack-trees: avoid nuking untracked dir in way of unmerged file Elijah Newren via GitGitGadget
2021-09-27 16:33 ` [PATCH v3 09/11] unpack-trees: avoid nuking untracked dir in way of locally deleted file Elijah Newren via GitGitGadget
2021-09-27 16:33 ` [PATCH v3 10/11] Comment important codepaths regarding nuking untracked files/dirs Elijah Newren via GitGitGadget
2021-09-27 16:33 ` [PATCH v3 11/11] Documentation: call out commands that nuke untracked files/directories Elijah Newren via GitGitGadget
2021-09-27 20:36 ` [PATCH v3 00/11] Fix various issues around removal of " Junio C Hamano
2021-09-27 20:41 ` Elijah Newren
2021-09-27 21:31 ` Elijah Newren
2021-09-30 14:00 ` Phillip Wood
[not found] ` <aaa8ea3b-0902-f9e6-c1a4-0ca2b1b2f57b@gmail.com>
2021-10-01 2:08 ` Elijah Newren
2021-10-04 1:11 ` [RFC PATCH v4 00/10] " Ævar Arnfjörð Bjarmason
2021-10-04 1:11 ` [RFC PATCH v4 01/10] t2500: add various tests for nuking untracked files Ævar Arnfjörð Bjarmason
2021-10-04 1:11 ` [RFC PATCH v4 02/10] read-tree, merge-recursive: overwrite ignored files by default Ævar Arnfjörð Bjarmason
2021-10-04 1:11 ` [RFC PATCH v4 03/10] unpack-trees: introduce preserve_ignored to unpack_trees_options Ævar Arnfjörð Bjarmason
2021-10-04 1:11 ` [RFC PATCH v4 04/10] unpack-trees: rename "dir" to "private_dir" Ævar Arnfjörð Bjarmason
2021-10-04 1:11 ` [RFC PATCH v4 05/10] Remove ignored files by default when they are in the way Ævar Arnfjörð Bjarmason
2021-10-04 1:11 ` [RFC PATCH v4 06/10] Change unpack_trees' 'reset' flag into an enum Ævar Arnfjörð Bjarmason
2021-10-04 1:11 ` [RFC PATCH v4 07/10] unpack-trees: avoid nuking untracked dir in way of unmerged file Ævar Arnfjörð Bjarmason
2021-10-04 1:11 ` [RFC PATCH v4 08/10] unpack-trees: avoid nuking untracked dir in way of locally deleted file Ævar Arnfjörð Bjarmason
2021-10-04 1:11 ` [RFC PATCH v4 09/10] Comment important codepaths regarding nuking untracked files/dirs Ævar Arnfjörð Bjarmason
2021-10-04 1:11 ` [RFC PATCH v4 10/10] Documentation: call out commands that nuke untracked files/directories Ævar Arnfjörð Bjarmason
2021-10-04 14:38 ` [RFC PATCH v4 00/10] Fix various issues around removal of " Elijah Newren
2021-10-04 16:08 ` Ævar Arnfjörð Bjarmason
2021-10-05 7:40 ` Elijah Newren
2021-10-04 18:17 ` Junio C Hamano
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=877dexrqvg.fsf@evledraar.gmail.com \
--to=avarab@gmail.com \
--cc=fedor.birjukov@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=newren@gmail.com \
--cc=philipoakley@iee.email \
--cc=phillip.wood123@gmail.com \
--cc=sunshine@sunshineco.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.
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 NNTP newsgroup(s).