From: Phillip Wood <phillip.wood123@gmail.com>
To: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>, git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
"Martin Ågren" <martin.agren@gmail.com>,
"Elijah Newren" <newren@gmail.com>,
"Derrick Stolee" <derrickstolee@github.com>,
"brian m . carlson" <sandals@crustytoothpaste.net>
Subject: Re: [PATCH v5 00/27] revision.[ch]: add and use release_revisions()
Date: Sun, 3 Apr 2022 14:07:16 +0100 [thread overview]
Message-ID: <5d3345d9-3c7c-a761-9c7a-03468a653e48@gmail.com> (raw)
In-Reply-To: <cover-v5-00.27-00000000000-20220402T102002Z-avarab@gmail.com>
Hi Ævar
I've left a few comments on this series for the patches that I had not
looked at in v4. There's nothing major, the changes mostly make sense to
me (though I'm not familiar with the revisions api)
On 02/04/2022 11:49, Ævar Arnfjörð Bjarmason wrote:
> This series reduces the memory leaks spotted by our tests by at least
> half, see v3[1] for a more general overview.
>
> Thanks a lot to Phillip Wood and Junio for the v4 review! I think this
> v5 should address all of the things brought up in v4 in one way or
> another, changes:
>
> * The "extra_headers" or "ref_message_ids" freeing is the same, but
> the commit message is altered to explain that commit.
I'm still not that convinced that these are owned by the code in
builtin/log.c but lets leave that for now. The rest of the changes look
good. Thanks for working on this, when I use LSAN on my patches before
submitting them I often see a lot of existing leaks coming from struct
rev_info.
Best Wishes
Phillip
> * The "revision.[ch]: split freeing of revs->commit into a function"
> is gone, instead I applied a coccinelle rule to free_commit_list()
> as suggested by Phillip Wood (well, the change in pattern, not the
> rule was the suggestion).
>
> * The release_revisions() is now simply using free_commit_list()
> without a NULL assignment to the member, and I changed some
> FREE_AND_NULL() that I'd added (for e.g. cmdline) to just free().
>
> The "and NULL" was just cargo-culted from elswhere, but for
> release_revisions() we not only aren't using the struct again (it's
> not a "reset"), but it it wouldn't have worked as a reset before
> anyway (some things free'd without NULL-ing).
>
> We could trivially have a "reset" variant of release_revisions(),
> but since no current API user wanted it let's leave it, leving the
> memory uninitialized will help to catch any invalid API usage.
>
> * I missed a object_array_clear() in builtin/stash.c that
> could/should be free'd by release_revisions().
>
> * An obscure memory leak in stash.c (on "master") around
> assert_stash_ref() has been fixed.
>
> * Add a "goto usage" pattern for a memory leak new in stash.c that
> this series introduced, i.e. because strvec_clear() was moved to a
> "cleanup" block if we invoked usage_with_options() between the two
> we'd exit without the cleanup. Now we'll cleanup on "usage" too.
>
> * Updated commit message & docs around REV_INFO_INIT, hopefully
> addressing the thread left off at
> https://lore.kernel.org/git/220401.86h77dnkpw.gmgdl@evledraar.gmail.com/
>
> 1. https://lore.kernel.org/git/cover-v3-00.27-00000000000-20220325T171340Z-avarab@gmail.com/
>
> Ævar Arnfjörð Bjarmason (27):
> t/helper/test-fast-rebase.c: don't leak "struct strbuf"
> blame: use "goto cleanup" for cleanup_scoreboard()
> string_list API users: use string_list_init_{no,}dup
> format-patch: don't leak "extra_headers" or "ref_message_ids"
> cocci: add and apply free_commit_list() rules
> revision.[ch]: provide and start using a release_revisions()
> revisions API users: add straightforward release_revisions()
> revision.[ch]: document and move code declared around "init"
> revisions API users: use release_revisions() needing REV_INFO_INIT
> stash: always have the owner of "stash_info" free it
> revisions API users: add "goto cleanup" for release_revisions()
> revisions API users: use release_revisions() in http-push.c
> revisions API users: use release_revisions() in builtin/log.c
> revisions API users: use release_revisions() with UNLEAK()
> revisions API users: use release_revisions() for "prune_data" users
> revisions API: have release_revisions() release "commits"
> revisions API: have release_revisions() release "mailmap"
> revisions API: have release_revisions() release "cmdline"
> revisions API: have release_revisions() release "filter"
> revisions API: have release_revisions() release "grep_filter"
> revisions API: have release_revisions() release "prune_data"
> revisions API: clear "boundary_commits" in release_revisions()
> revisions API: release "reflog_info" in release revisions()
> revisions API: call diff_free(&revs->pruning) in revisions_release()
> revisions API: have release_revisions() release "date_mode"
> revisions API: have release_revisions() release "topo_walk_info"
> revisions API: add a TODO for diff_free(&revs->diffopt)
>
> add-interactive.c | 3 +-
> bisect.c | 20 ++--
> builtin/add.c | 3 +-
> builtin/am.c | 3 +
> builtin/bisect--helper.c | 2 +
> builtin/blame.c | 4 +-
> builtin/checkout.c | 3 +-
> builtin/commit.c | 6 +-
> builtin/describe.c | 2 +
> builtin/diff-files.c | 8 +-
> builtin/diff-index.c | 5 +-
> builtin/diff.c | 2 +-
> builtin/fast-export.c | 1 +
> builtin/log.c | 36 ++++---
> builtin/merge.c | 2 +
> builtin/pack-objects.c | 2 +
> builtin/prune.c | 1 +
> builtin/reflog.c | 1 +
> builtin/rev-list.c | 25 +++--
> builtin/shortlog.c | 8 +-
> builtin/stash.c | 115 +++++++++++----------
> builtin/submodule--helper.c | 14 ++-
> bundle.c | 12 ++-
> commit.c | 19 ++--
> contrib/coccinelle/free.cocci | 27 +++++
> diff-lib.c | 8 +-
> fmt-merge-msg.c | 1 +
> http-push.c | 3 +-
> merge-ort.c | 1 +
> merge-recursive.c | 5 +-
> midx.c | 1 +
> pack-bitmap-write.c | 1 +
> range-diff.c | 2 +-
> ref-filter.c | 1 +
> reflog-walk.c | 24 ++++-
> reflog-walk.h | 1 +
> remote.c | 1 +
> revision.c | 72 ++++++++++---
> revision.h | 73 ++++++++-----
> sequencer.c | 26 +++--
> shallow.c | 1 +
> submodule.c | 11 +-
> t/helper/test-fast-rebase.c | 23 +++--
> t/helper/test-revision-walking.c | 1 +
> t/lib-git-svn.sh | 4 +
> t/t0056-git-C.sh | 1 +
> t/t0062-revision-walking.sh | 1 +
> t/t0100-previous.sh | 1 +
> t/t0101-at-syntax.sh | 2 +
> t/t1001-read-tree-m-2way.sh | 1 +
> t/t1002-read-tree-m-u-2way.sh | 1 +
> t/t1060-object-corruption.sh | 2 +
> t/t1401-symbolic-ref.sh | 2 +
> t/t1411-reflog-show.sh | 1 +
> t/t1412-reflog-loop.sh | 2 +
> t/t1415-worktree-refs.sh | 1 +
> t/t2015-checkout-unborn.sh | 1 +
> t/t2200-add-update.sh | 1 +
> t/t3302-notes-index-expensive.sh | 1 +
> t/t3303-notes-subtrees.sh | 1 +
> t/t3305-notes-fanout.sh | 1 +
> t/t3408-rebase-multi-line.sh | 1 +
> t/t4021-format-patch-numbered.sh | 1 +
> t/t4027-diff-submodule.sh | 1 +
> t/t4028-format-patch-mime-headers.sh | 2 +
> t/t4036-format-patch-signer-mime.sh | 1 +
> t/t4039-diff-assume-unchanged.sh | 1 +
> t/t4055-diff-context.sh | 1 +
> t/t4066-diff-emit-delay.sh | 1 +
> t/t4122-apply-symlink-inside.sh | 1 +
> t/t4126-apply-empty.sh | 1 -
> t/t4128-apply-root.sh | 1 +
> t/t4206-log-follow-harder-copies.sh | 2 +
> t/t4207-log-decoration-colors.sh | 1 +
> t/t4212-log-corrupt.sh | 1 +
> t/t5301-sliding-window.sh | 2 +
> t/t5313-pack-bounds-checks.sh | 2 +
> t/t5316-pack-delta-depth.sh | 2 +
> t/t5320-delta-islands.sh | 2 +
> t/t5322-pack-objects-sparse.sh | 1 +
> t/t5506-remote-groups.sh | 1 +
> t/t5513-fetch-track.sh | 1 +
> t/t5515-fetch-merge-logic.sh | 1 +
> t/t5518-fetch-exit-status.sh | 1 +
> t/t5532-fetch-proxy.sh | 2 +
> t/t5600-clone-fail-cleanup.sh | 1 +
> t/t5900-repo-selection.sh | 2 +
> t/t6002-rev-list-bisect.sh | 1 +
> t/t6003-rev-list-topo-order.sh | 1 +
> t/t6005-rev-list-count.sh | 1 +
> t/t6018-rev-list-glob.sh | 1 +
> t/t6100-rev-list-in-order.sh | 1 +
> t/t6101-rev-parse-parents.sh | 1 +
> t/t6110-rev-list-sparse.sh | 1 +
> t/t6114-keep-packs.sh | 2 +
> t/t6131-pathspec-icase.sh | 2 +
> t/t7008-filter-branch-null-sha1.sh | 1 +
> t/t7702-repack-cyclic-alternate.sh | 2 +
> t/t9001-send-email.sh | 1 +
> t/t9100-git-svn-basic.sh | 1 +
> t/t9101-git-svn-props.sh | 2 +
> t/t9104-git-svn-follow-parent.sh | 2 +
> t/t9106-git-svn-commit-diff-clobber.sh | 2 +
> t/t9115-git-svn-dcommit-funky-renames.sh | 1 +
> t/t9116-git-svn-log.sh | 1 +
> t/t9122-git-svn-author.sh | 2 +
> t/t9127-git-svn-partial-rebuild.sh | 1 +
> t/t9129-git-svn-i18n-commitencoding.sh | 1 +
> t/t9132-git-svn-broken-symlink.sh | 1 +
> t/t9139-git-svn-non-utf8-commitencoding.sh | 1 +
> t/t9146-git-svn-empty-dirs.sh | 2 +
> t/t9148-git-svn-propset.sh | 1 +
> t/t9160-git-svn-preserve-empty-dirs.sh | 1 +
> t/t9162-git-svn-dcommit-interactive.sh | 2 +
> t/t9164-git-svn-dcommit-concurrent.sh | 2 +
> t/t9501-gitweb-standalone-http-status.sh | 1 +
> wt-status.c | 15 +--
> 117 files changed, 502 insertions(+), 190 deletions(-)
>
> Range-diff against v4:
> 1: b99a07f98ee = 1: e20f951a64c t/helper/test-fast-rebase.c: don't leak "struct strbuf"
> 2: da5be507c0f = 2: de2e08a14e6 blame: use "goto cleanup" for cleanup_scoreboard()
> 3: 243f7c8df96 = 3: 364aa7d8990 string_list API users: use string_list_init_{no,}dup
> 4: 69f0aabe38f ! 4: 5d4ad92d47b format-patch: don't leak "extra_headers" or "ref_message_ids"
> @@ Commit message
> cmd_format_patch(). These two are unusual special-cases in being in
> the "struct rev_info", but not being "owned" by the code in
> revision.c. I.e. they're members of the struct so that this code in
> - "builtin/log.c" can pass information code in log-tree.c.
> + "builtin/log.c" can conveniently pass information code in
> + "log-tree.c".
> +
> + See e.g. the make_cover_letter() caller of log_write_email_headers()
> + here in "builtin/log.c", and [1] for a demonstration of where the
> + "extra_headers" and "ref_message_ids" struct members are used.
>
> See 20ff06805c6 (format-patch: resurrect extra headers from config,
> 2006-06-02) and d1566f7883f (git-format-patch: Make the second and
> @@ Commit message
> variable to hold it, to avoid the eventual cast from "const char *"
> when we free() it.
>
> + 1. https://lore.kernel.org/git/220401.868rsoogxf.gmgdl@evledraar.gmail.com/
> +
> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
>
> ## builtin/log.c ##
> 5: 2d0ed57ec2e < -: ----------- revision.[ch]: split freeing of revs->commit into a function
> -: ----------- > 5: c38db28f920 cocci: add and apply free_commit_list() rules
> 6: b9beaba16bf ! 6: b99f96599bb revision.[ch]: provide and start using a release_revisions()
> @@ Commit message
> turn adds a lot of noise when trying to mark up tests with
> "TEST_PASSES_SANITIZE_LEAK=true".
>
> - The users of that API are largely one-shot, e.g. "git log", so
> - arguably freeing the memory is a waste of time, but in many cases
> - they've actually been trying to free the memory, and just doing that
> - in a buggy manner.
> + The users of that API are largely one-shot, e.g. "git rev-list" or
> + "git log", or the "git checkout" and "git stash" being modified here
> +
> + For these callers freeing the memory is arguably a waste of time, but
> + in many cases they've actually been trying to free the memory, and
> + just doing that in a buggy manner.
>
> Let's provide a release_revisions() function for these users, and
> start migrating them over per the plan outlined in [1]. Right now this
> @@ builtin/checkout.c: static void show_local_changes(struct object *head,
> static void describe_detached_head(const char *msg, struct commit *commit)
>
> ## builtin/stash.c ##
> +@@ builtin/stash.c: static int check_changes_tracked_files(const struct pathspec *ps)
> + goto done;
> + }
> +
> +- object_array_clear(&rev.pending);
> + result = run_diff_files(&rev, 0);
> + if (diff_result_code(&rev.diffopt, result)) {
> + ret = 1;
> +@@ builtin/stash.c: static int check_changes_tracked_files(const struct pathspec *ps)
> +
> + done:
> + clear_pathspec(&rev.prune_data);
> ++ release_revisions(&rev);
> + return ret;
> + }
> +
> @@ builtin/stash.c: static int stash_working_tree(struct stash_info *info, const struct pathspec *ps
>
> done:
> @@ range-diff.c: int is_range_diff_range(const char *arg)
> }
>
> ## revision.c ##
> -@@ revision.c: static void release_revisions_commit_list(struct rev_info *revs)
> - }
> +@@ revision.c: int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s
> + return left;
> }
>
> +void release_revisions(struct rev_info *revs)
> 7: 80ec9a131c0 = 7: 521f6967b64 revisions API users: add straightforward release_revisions()
> 8: 086cec742b4 ! 8: 003b507e0b7 revision.[ch]: document and move code declared around "init"
> @@ revision.h: void mark_trees_uninteresting_sparse(struct repository *r, struct oi
> void show_object_with_name(FILE *, struct object *, const char *);
>
> +/**
> -+ * Helpers to check if a "struct string_list" item matches wild
> ++ * Helpers to check if a "struct string_list" item matches with
> + * wildmatch().
> + */
> +int ref_excluded(struct string_list *, const char *path);
> 9: 2f4e65fb534 ! 9: 240307bc3c6 revisions API users: use release_revisions() needing REV_INFO_INIT
> @@ Commit message
> need to have their "struct rev_info" zero-initialized before we can
> start using it.
>
> - To do this add a stub "REV_INFO_INIT" macro, ideally macro would be
> - able to fully initialize a "struct rev_info", but all it does is the
> - equivalent of assigning "{ 0 }" to the struct, the API user will still
> - need to use repo_init_revisions(). In some future follow-up work we'll
> - hopefully make REV_INFO_INIT be a "stand-alone" init likke STRBUF_INIT
> - and other similar macros.
> -
> For the bundle.c code see the early exit case added in
> 3bbbe467f29 (bundle verify: error out if called without an object
> database, 2019-05-27).
> @@ revision.h: struct rev_info {
> +/**
> + * Initialize the "struct rev_info" structure with a macro.
> + *
> -+ * This is not sufficient (yet!) to initialize a "struct rev_info",
> -+ * but it's OK (but redundant) to use it before a call to
> -+ * repo_init_revisions(), which does the real initialization. By using
> -+ * this it's safe to call release_revisions() on the "struct rev_info"
> -+ * without having called repo_init_revisions().
> ++ * This will not fully initialize a "struct rev_info", the
> ++ * repo_init_revisions() function needs to be called before
> ++ * setup_revisions() and any revision walking takes place.
> ++ *
> ++ * Use REV_INFO_INIT to make the "struct rev_info" safe for passing to
> ++ * release_revisions() when it's inconvenient (e.g. due to a "goto
> ++ * cleanup" pattern) to arrange for repo_init_revisions() to be called
> ++ * before release_revisions() is called.
> ++ *
> ++ * Initializing with this REV_INFO_INIT is redundant to invoking
> ++ * repo_init_revisions(). If repo_init_revisions() is guaranteed to be
> ++ * called before release_revisions() the "struct rev_info" can be left
> ++ * uninitialized.
> + */
> +#define REV_INFO_INIT { 0 }
> +
> @@ submodule.c: void show_submodule_diff_summary(struct diff_options *o, const char
> struct commit_list *merge_bases = NULL;
> struct repository *sub;
> @@ submodule.c: void show_submodule_diff_summary(struct diff_options *o, const char *path,
> - print_submodule_diff_summary(sub, &rev, o);
>
> out:
> + free_commit_list(merge_bases);
> + release_revisions(&rev);
> - if (merge_bases)
> - free_commit_list(merge_bases);
> clear_commit_marks(left, ~0);
> + clear_commit_marks(right, ~0);
> + if (sub) {
> 10: 145a0f74b6a ! 10: 4c5404912e9 stash: always have the owner of "stash_info" free it
> @@ Commit message
> pattern we'd otherwise free() uninitialized memory in some cases, as
> we only strbuf_init() the string in get_stash_info().
>
> - So while it's the smallest possible change, let's convert all users of
> - this pattern in the file while we're at it.
> + So while it's not the smallest possible change, let's convert all
> + users of this pattern in the file while we're at it.
>
> A good follow-up to this change would be to change all the "ret = -1;
> goto done;" in this file to instead use a "goto cleanup", and
> @@ Commit message
> would allow us to drop a lot of needless brace verbosity on two-line
> "if" statements, but let's leave that alone for now.
>
> + To ensure that there's a 1=1 mapping between owners of the "struct
> + stash_info" and free_stash_info() change the assert_stash_ref()
> + function to be a trivial get_stash_info_assert() wrapper. The caller
> + will call free_stash_info(), and by returning -1 we'll eventually (via
> + !!ret) exit with status 1 anyway.
> +
> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
>
> ## builtin/stash.c ##
> @@ builtin/stash.c: static int apply_stash(int argc, const char **argv, const char
> free_stash_info(&info);
> return ret;
> }
> -@@ builtin/stash.c: static void assert_stash_ref(struct stash_info *info)
> +@@ builtin/stash.c: static int do_drop_stash(struct stash_info *info, int quiet)
> + return 0;
> + }
> +
> +-static void assert_stash_ref(struct stash_info *info)
> ++static int get_stash_info_assert(struct stash_info *info, int argc,
> ++ const char **argv)
> + {
> +- if (!info->is_stash_ref) {
> +- error(_("'%s' is not a stash reference"), info->revision.buf);
> +- free_stash_info(info);
> +- exit(1);
> +- }
> ++ int ret = get_stash_info(info, argc, argv);
> ++
> ++ if (ret < 0)
> ++ return ret;
> ++
> ++ if (!info->is_stash_ref)
> ++ return error(_("'%s' is not a stash reference"), info->revision.buf);
> ++
> ++ return 0;
> + }
>
> static int drop_stash(int argc, const char **argv, const char *prefix)
> {
> @@ builtin/stash.c: static void assert_stash_ref(struct stash_info *info)
> OPT__QUIET(&quiet, N_("be quiet, only report errors")),
> OPT_END()
> @@ builtin/stash.c: static int drop_stash(int argc, const char **argv, const char *prefix)
> + argc = parse_options(argc, argv, prefix, options,
> git_stash_drop_usage, 0);
>
> - if (get_stash_info(&info, argc, argv))
> +- if (get_stash_info(&info, argc, argv))
> - return -1;
> +-
> +- assert_stash_ref(&info);
> ++ if (get_stash_info_assert(&info, argc, argv))
> + goto cleanup;
>
> - assert_stash_ref(&info);
> -
> ret = do_drop_stash(&info, quiet);
> +cleanup:
> free_stash_info(&info);
> @@ builtin/stash.c: static int drop_stash(int argc, const char **argv, const char *
> OPT__QUIET(&quiet, N_("be quiet, only report errors")),
> OPT_BOOL(0, "index", &index,
> @@ builtin/stash.c: static int pop_stash(int argc, const char **argv, const char *prefix)
> + argc = parse_options(argc, argv, prefix, options,
> git_stash_pop_usage, 0);
>
> - if (get_stash_info(&info, argc, argv))
> +- if (get_stash_info(&info, argc, argv))
> - return -1;
> ++ if (get_stash_info_assert(&info, argc, argv))
> + goto cleanup;
>
> - assert_stash_ref(&info);
> +- assert_stash_ref(&info);
> if ((ret = do_apply_stash(prefix, &info, index, quiet)))
> -@@ builtin/stash.c: static int pop_stash(int argc, const char **argv, const char *prefix)
> + printf_ln(_("The stash entry is kept in case "
> + "you need it again."));
> else
> ret = do_drop_stash(&info, quiet);
>
> @@ builtin/stash.c: static void diff_include_untracked(const struct stash_info *inf
> struct rev_info rev;
> struct strvec stash_args = STRVEC_INIT;
> struct strvec revision_args = STRVEC_INIT;
> +@@ builtin/stash.c: static int show_stash(int argc, const char **argv, const char *prefix)
> + UNTRACKED_ONLY, PARSE_OPT_NONEG),
> + OPT_END()
> + };
> ++ int do_usage = 0;
> +
> + init_diff_ui_defaults();
> + git_config(git_diff_ui_config, NULL);
> @@ builtin/stash.c: static int show_stash(int argc, const char **argv, const char *prefix)
> strvec_push(&revision_args, argv[i]);
> }
> @@ builtin/stash.c: static int show_stash(int argc, const char **argv, const char *
> }
> }
>
> + argc = setup_revisions(revision_args.nr, revision_args.v, &rev, NULL);
> +- if (argc > 1) {
> +- free_stash_info(&info);
> +- usage_with_options(git_stash_show_usage, options);
> +- }
> ++ if (argc > 1)
> ++ goto usage;
> + if (!rev.diffopt.output_format) {
> + rev.diffopt.output_format = DIFF_FORMAT_PATCH;
> + diff_setup_done(&rev.diffopt);
> @@ builtin/stash.c: static int show_stash(int argc, const char **argv, const char *prefix)
> }
> log_tree_diff_flush(&rev);
>
> -+ ret = diff_result_code(&rev.diffopt, 0);;
> ++ ret = diff_result_code(&rev.diffopt, 0);
> +cleanup:
> + strvec_clear(&stash_args);
> free_stash_info(&info);
> - return diff_result_code(&rev.diffopt, 0);
> ++ if (do_usage)
> ++ usage_with_options(git_stash_show_usage, options);
> + return ret;
> ++usage:
> ++ do_usage = 1;
> ++ goto cleanup;
> }
>
> static int do_store_stash(const struct object_id *w_commit, const char *stash_msg,
> @@ builtin/stash.c: static int do_push_stash(const struct pathspec *ps, const char
> struct strbuf patch = STRBUF_INIT;
> struct strbuf stash_msg_buf = STRBUF_INIT;
> struct strbuf untracked_files = STRBUF_INIT;
> +@@ builtin/stash.c: static int do_push_stash(const struct pathspec *ps, const char *stash_msg, int q
> + }
> +
> + done:
> ++ free_stash_info(&info);
> + strbuf_release(&stash_msg_buf);
> + return ret;
> + }
> 11: c9898a5a96b ! 11: 4210232e3a1 revisions API users: add "goto cleanup" for release_revisions()
> @@ builtin/stash.c: static int show_stash(int argc, const char **argv, const char *
> strvec_clear(&stash_args);
> free_stash_info(&info);
> + release_revisions(&rev);
> + if (do_usage)
> + usage_with_options(git_stash_show_usage, options);
> return ret;
> - }
> -
>
> ## builtin/submodule--helper.c ##
> @@ builtin/submodule--helper.c: static int compute_summary_module_list(struct object_id *head_oid,
> 12: 6e41d666223 = 12: 1918ca0a85d revisions API users: use release_revisions() in http-push.c
> 13: 02ca92660af = 13: 6a02b7aae4e revisions API users: use release_revisions() in builtin/log.c
> 14: 1aeb1127f34 = 14: ddc7402b054 revisions API users: use release_revisions() with UNLEAK()
> 15: c12b3d5a035 ! 15: 03e9bd73d4b revisions API users: use release_revisions() for "prune_data" users
> @@ builtin/add.c: int add_files_to_cache(const char *prefix,
> }
>
>
> - ## builtin/stash.c ##
> -@@ builtin/stash.c: static int check_changes_tracked_files(const struct pathspec *ps)
> -
> - done:
> - clear_pathspec(&rev.prune_data);
> -+ release_revisions(&rev);
> - return ret;
> - }
> -
> -
> ## diff-lib.c ##
> @@ diff-lib.c: int do_diff_cache(const struct object_id *tree_oid, struct diff_options *opt)
> if (diff_cache(&revs, tree_oid, NULL, 1))
> 16: 2e351702677 < -: ----------- revisions API: have release_revisions() release "commits"
> -: ----------- > 16: 285673e40bf revisions API: have release_revisions() release "commits"
> 17: f67f1f5a575 ! 17: ca659940ee5 revisions API: have release_revisions() release "mailmap"
> @@ builtin/commit.c: static const char *find_author_by_nickname(const char *name)
> }
>
> ## revision.c ##
> -@@ revision.c: static void release_revisions_commit_list(struct rev_info *revs)
> - }
> +@@ revision.c: int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s
> + return left;
> }
>
> +static void release_revisions_mailmap(struct string_list *mailmap)
> @@ revision.c: static void release_revisions_commit_list(struct rev_info *revs)
> +
> void release_revisions(struct rev_info *revs)
> {
> - release_revisions_commit_list(revs);
> + free_commit_list(revs->commits);
> object_array_clear(&revs->pending);
> + release_revisions_mailmap(revs->mailmap);
> }
> 18: 1df61550e5a ! 18: 7987c748ba4 revisions API: have release_revisions() release "cmdline"
> @@ Commit message
> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
>
> ## revision.c ##
> -@@ revision.c: static void release_revisions_commit_list(struct rev_info *revs)
> - }
> +@@ revision.c: int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s
> + return left;
> }
>
> +static void release_revisions_cmdline(struct rev_cmdline_info *cmdline)
> @@ revision.c: static void release_revisions_commit_list(struct rev_info *revs)
> + return;
> + for (i = 0; i < cmdline->nr; i++)
> + free((char *)cmdline->rev[i].name);
> -+ FREE_AND_NULL(cmdline->rev);
> ++ free(cmdline->rev);
> +}
> +
> static void release_revisions_mailmap(struct string_list *mailmap)
> @@ revision.c: static void release_revisions_commit_list(struct rev_info *revs)
> if (!mailmap)
> @@ revision.c: void release_revisions(struct rev_info *revs)
> {
> - release_revisions_commit_list(revs);
> + free_commit_list(revs->commits);
> object_array_clear(&revs->pending);
> + release_revisions_cmdline(&revs->cmdline);
> release_revisions_mailmap(revs->mailmap);
> 19: 065c3cc91b2 ! 19: e6e87ce3608 revisions API: have release_revisions() release "filter"
> @@ Commit message
>
> ## revision.c ##
> @@ revision.c: void release_revisions(struct rev_info *revs)
> - release_revisions_commit_list(revs);
> + free_commit_list(revs->commits);
> object_array_clear(&revs->pending);
> release_revisions_cmdline(&revs->cmdline);
> + list_objects_filter_release(&revs->filter);
> 20: 806fef06b87 = 20: ebdcdc88d79 revisions API: have release_revisions() release "grep_filter"
> 21: fabbe452a14 = 21: 84c8714571a revisions API: have release_revisions() release "prune_data"
> 22: cb201fa1914 ! 22: d96642d3502 revisions API: clear "boundary_commits" in release_revisions()
> @@ Commit message
> ## revision.c ##
> @@ revision.c: void release_revisions(struct rev_info *revs)
> {
> - release_revisions_commit_list(revs);
> + free_commit_list(revs->commits);
> object_array_clear(&revs->pending);
> + object_array_clear(&revs->boundary_commits);
> release_revisions_cmdline(&revs->cmdline);
> 23: 0363a69073c = 23: 0e9745d9ee1 revisions API: release "reflog_info" in release revisions()
> 24: bad359b2983 = 24: c7f3e92a8d1 revisions API: call diff_free(&revs->pruning) in revisions_release()
> 25: 9a51c1ae1d1 = 25: d428d752462 revisions API: have release_revisions() release "date_mode"
> 26: b56db37940d ! 26: fbf233ec768 revisions API: have release_revisions() release "topo_walk_info"
> @@ revision.c: static void release_revisions_mailmap(struct string_list *mailmap)
> +
> void release_revisions(struct rev_info *revs)
> {
> - release_revisions_commit_list(revs);
> + free_commit_list(revs->commits);
> @@ revision.c: void release_revisions(struct rev_info *revs)
> free_grep_patterns(&revs->grep_filter);
> diff_free(&revs->pruning);
> 27: b02cb8fcded = 27: ec2c77ce869 revisions API: add a TODO for diff_free(&revs->diffopt)
next prev parent reply other threads:[~2022-04-03 13:07 UTC|newest]
Thread overview: 252+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-09 13:16 [PATCH 00/24] revision.[ch]: add and use release_revisions() Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 01/24] t/helper/test-fast-rebase.c: don't leak "struct strbuf" Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 02/24] blame: use "goto cleanup" for cleanup_scoreboard() Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 03/24] format-patch: don't leak "extra_headers" or "ref_message_ids" Ævar Arnfjörð Bjarmason
2022-03-09 20:34 ` Taylor Blau
2022-03-09 13:16 ` [PATCH 04/24] revision.[ch]: split freeing of revs->commit into a function Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 05/24] revision.[ch]: provide and start using a release_revisions() Ævar Arnfjörð Bjarmason
2022-03-09 21:32 ` Taylor Blau
2022-03-09 22:57 ` Junio C Hamano
2022-03-10 0:28 ` Ævar Arnfjörð Bjarmason
2022-03-10 1:11 ` Junio C Hamano
2022-03-10 14:57 ` Ævar Arnfjörð Bjarmason
2022-03-10 14:56 ` Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 06/24] revisions API users: add straightforward release_revisions() Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 07/24] revisions API users: use release_revisions() needing "{ 0 }" init Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 08/24] revisions API users: add "goto cleanup" for release_revisions() Ævar Arnfjörð Bjarmason
2022-03-09 19:08 ` Derrick Stolee
2022-03-09 13:16 ` [PATCH 09/24] revisions API users: use release_revisions() in http-push.c Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 10/24] revisions API users: use release_revisions() in builtin/log.c Ævar Arnfjörð Bjarmason
2022-03-09 19:12 ` Derrick Stolee
2022-03-09 21:58 ` Taylor Blau
2022-03-09 21:53 ` Taylor Blau
2022-03-09 13:16 ` [PATCH 11/24] revisions API users: use release_revisions() with UNLEAK() Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 12/24] revisions API users: use release_revisions() in submodule.c edge case Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 13/24] revisions API users: use release_revisions() in wt-status.c " Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 14/24] revisions API users: use release_revisions() for "prune_data" users Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 15/24] revisions API: have release_revisions() release "commits" Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 16/24] revisions API: have release_revisions() release "mailmap" Ævar Arnfjörð Bjarmason
2022-03-09 19:17 ` Derrick Stolee
2022-03-09 13:16 ` [PATCH 17/24] revisions API: have release_revisions() release "cmdline" Ævar Arnfjörð Bjarmason
2022-03-09 19:19 ` Derrick Stolee
2022-03-10 15:10 ` Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 18/24] revisions API: have release_revisions() release "grep_filter" Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 19/24] revisions API: have release_revisions() release "prune_data" Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 20/24] revisions API: clear "boundary_commits" in release_revisions() Ævar Arnfjörð Bjarmason
2022-03-09 19:21 ` Derrick Stolee
2022-03-10 14:55 ` Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 21/24] revisions API: release "reflog_info" in release revisions() Ævar Arnfjörð Bjarmason
2022-03-09 19:24 ` Derrick Stolee
2022-03-10 0:13 ` Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 22/24] revisions API: call diff_free(&revs->pruning) in revisions_release() Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 23/24] revisions API: have release_revisions() release "date_mode" Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 24/24] revisions API: have release_revisions() release "topo_walk_info" Ævar Arnfjörð Bjarmason
2022-03-09 19:27 ` Derrick Stolee
2022-03-09 14:34 ` [PATCH 00/24] revision.[ch]: add and use release_revisions() Derrick Stolee
2022-03-09 19:30 ` Derrick Stolee
2022-03-09 19:39 ` Ævar Arnfjörð Bjarmason
2022-03-09 20:05 ` Junio C Hamano
2022-03-23 20:31 ` [PATCH v2 00/27] " Ævar Arnfjörð Bjarmason
2022-03-23 20:31 ` [PATCH v2 01/27] t/helper/test-fast-rebase.c: don't leak "struct strbuf" Ævar Arnfjörð Bjarmason
2022-03-24 4:13 ` Junio C Hamano
2022-03-24 16:57 ` Ævar Arnfjörð Bjarmason
2022-03-24 17:34 ` Junio C Hamano
2022-03-23 20:31 ` [PATCH v2 02/27] blame: use "goto cleanup" for cleanup_scoreboard() Ævar Arnfjörð Bjarmason
2022-03-24 4:23 ` Junio C Hamano
2022-03-23 20:31 ` [PATCH v2 03/27] string_list API users: use string_list_init_{no,}dup Ævar Arnfjörð Bjarmason
2022-03-23 20:31 ` [PATCH v2 04/27] format-patch: don't leak "extra_headers" or "ref_message_ids" Ævar Arnfjörð Bjarmason
2022-03-24 4:33 ` Junio C Hamano
2022-03-24 16:59 ` Ævar Arnfjörð Bjarmason
2022-03-23 20:31 ` [PATCH v2 05/27] revision.[ch]: split freeing of revs->commit into a function Ævar Arnfjörð Bjarmason
2022-03-24 4:33 ` Junio C Hamano
2022-03-24 17:01 ` Ævar Arnfjörð Bjarmason
2022-03-23 20:31 ` [PATCH v2 06/27] revision.[ch]: provide and start using a release_revisions() Ævar Arnfjörð Bjarmason
2022-03-24 4:43 ` Junio C Hamano
2022-03-24 17:02 ` Ævar Arnfjörð Bjarmason
2022-03-23 20:31 ` [PATCH v2 07/27] revisions API users: add straightforward release_revisions() Ævar Arnfjörð Bjarmason
2022-03-23 20:31 ` [PATCH v2 08/27] revisions API users: use release_revisions() needing "{ 0 }" init Ævar Arnfjörð Bjarmason
2022-03-24 4:53 ` Junio C Hamano
2022-03-24 17:04 ` Ævar Arnfjörð Bjarmason
2022-03-24 17:39 ` Junio C Hamano
2022-03-25 0:47 ` Junio C Hamano
2022-03-23 20:31 ` [PATCH v2 09/27] stash: always have the owner of "stash_info" free it Ævar Arnfjörð Bjarmason
2022-03-25 0:51 ` Junio C Hamano
2022-03-23 20:32 ` [PATCH v2 10/27] revisions API users: add "goto cleanup" for release_revisions() Ævar Arnfjörð Bjarmason
2022-03-25 0:52 ` Junio C Hamano
2022-03-23 20:32 ` [PATCH v2 11/27] revisions API users: use release_revisions() in http-push.c Ævar Arnfjörð Bjarmason
2022-03-23 20:32 ` [PATCH v2 12/27] revisions API users: use release_revisions() in builtin/log.c Ævar Arnfjörð Bjarmason
2022-03-25 1:03 ` Junio C Hamano
2022-03-23 20:32 ` [PATCH v2 13/27] revisions API users: use release_revisions() with UNLEAK() Ævar Arnfjörð Bjarmason
2022-03-23 20:32 ` [PATCH v2 14/27] revisions API users: use release_revisions() in submodule.c edge case Ævar Arnfjörð Bjarmason
2022-03-25 1:07 ` Junio C Hamano
2022-03-23 20:32 ` [PATCH v2 15/27] revisions API users: use release_revisions() for "prune_data" users Ævar Arnfjörð Bjarmason
2022-03-23 20:32 ` [PATCH v2 16/27] revisions API: have release_revisions() release "commits" Ævar Arnfjörð Bjarmason
2022-03-23 20:32 ` [PATCH v2 17/27] revisions API: have release_revisions() release "mailmap" Ævar Arnfjörð Bjarmason
2022-03-25 1:11 ` Junio C Hamano
2022-03-23 20:32 ` [PATCH v2 18/27] revisions API: have release_revisions() release "cmdline" Ævar Arnfjörð Bjarmason
2022-03-25 1:16 ` Junio C Hamano
2022-03-23 20:32 ` [PATCH v2 19/27] revisions API: have release_revisions() release "filter" Ævar Arnfjörð Bjarmason
2022-03-25 1:17 ` Junio C Hamano
2022-03-23 20:32 ` [PATCH v2 20/27] revisions API: have release_revisions() release "grep_filter" Ævar Arnfjörð Bjarmason
2022-03-23 20:32 ` [PATCH v2 21/27] revisions API: have release_revisions() release "prune_data" Ævar Arnfjörð Bjarmason
2022-03-25 1:20 ` Junio C Hamano
2022-03-23 20:32 ` [PATCH v2 22/27] revisions API: clear "boundary_commits" in release_revisions() Ævar Arnfjörð Bjarmason
2022-03-23 20:32 ` [PATCH v2 23/27] revisions API: release "reflog_info" in release revisions() Ævar Arnfjörð Bjarmason
2022-03-23 20:32 ` [PATCH v2 24/27] revisions API: call diff_free(&revs->pruning) in revisions_release() Ævar Arnfjörð Bjarmason
2022-03-23 20:32 ` [PATCH v2 25/27] revisions API: have release_revisions() release "date_mode" Ævar Arnfjörð Bjarmason
2022-03-23 20:32 ` [PATCH v2 26/27] revisions API: have release_revisions() release "topo_walk_info" Ævar Arnfjörð Bjarmason
2022-03-23 20:32 ` [PATCH v2 27/27] revisions API: add a TODO for diff_free(&revs->diffopt) Ævar Arnfjörð Bjarmason
2022-03-25 1:41 ` [PATCH v2 00/27] revision.[ch]: add and use release_revisions() Junio C Hamano
2022-03-25 9:14 ` Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 " Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 01/27] t/helper/test-fast-rebase.c: don't leak "struct strbuf" Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 02/27] blame: use "goto cleanup" for cleanup_scoreboard() Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 03/27] string_list API users: use string_list_init_{no,}dup Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 04/27] format-patch: don't leak "extra_headers" or "ref_message_ids" Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 05/27] revision.[ch]: split freeing of revs->commit into a function Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 06/27] revision.[ch]: provide and start using a release_revisions() Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 07/27] revisions API users: add straightforward release_revisions() Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 08/27] revisions API users: add "goto cleanup" for "rev_info" early exit Ævar Arnfjörð Bjarmason
2022-03-25 20:30 ` Junio C Hamano
2022-03-26 0:37 ` Ævar Arnfjörð Bjarmason
2022-03-26 5:24 ` Junio C Hamano
2022-03-28 17:55 ` Derrick Stolee
2022-03-28 18:55 ` Ævar Arnfjörð Bjarmason
2022-03-28 20:03 ` Junio C Hamano
2022-03-25 17:18 ` [PATCH v3 09/27] revisions API users: use release_revisions() in submodule.c edge case Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 10/27] stash: always have the owner of "stash_info" free it Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 11/27] revisions API users: add "goto cleanup" for release_revisions() Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 12/27] revisions API users: use release_revisions() in http-push.c Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 13/27] revisions API users: use release_revisions() in builtin/log.c Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 14/27] revisions API users: use release_revisions() with UNLEAK() Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 15/27] revisions API users: use release_revisions() for "prune_data" users Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 16/27] revisions API: have release_revisions() release "commits" Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 17/27] revisions API: have release_revisions() release "mailmap" Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 18/27] revisions API: have release_revisions() release "cmdline" Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 19/27] revisions API: have release_revisions() release "filter" Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 20/27] revisions API: have release_revisions() release "grep_filter" Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 21/27] revisions API: have release_revisions() release "prune_data" Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 22/27] revisions API: clear "boundary_commits" in release_revisions() Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 23/27] revisions API: release "reflog_info" in release revisions() Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 24/27] revisions API: call diff_free(&revs->pruning) in revisions_release() Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 25/27] revisions API: have release_revisions() release "date_mode" Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 26/27] revisions API: have release_revisions() release "topo_walk_info" Ævar Arnfjörð Bjarmason
2022-03-25 17:18 ` [PATCH v3 27/27] revisions API: add a TODO for diff_free(&revs->diffopt) Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 00/27] revision.[ch]: add and use release_revisions() Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 01/27] t/helper/test-fast-rebase.c: don't leak "struct strbuf" Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 02/27] blame: use "goto cleanup" for cleanup_scoreboard() Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 03/27] string_list API users: use string_list_init_{no,}dup Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 04/27] format-patch: don't leak "extra_headers" or "ref_message_ids" Ævar Arnfjörð Bjarmason
2022-04-01 15:13 ` Phillip Wood
2022-04-01 17:16 ` Ævar Arnfjörð Bjarmason
2022-04-01 19:32 ` Junio C Hamano
2022-03-31 1:11 ` [PATCH v4 05/27] revision.[ch]: split freeing of revs->commit into a function Ævar Arnfjörð Bjarmason
2022-04-01 15:15 ` Phillip Wood
2022-04-01 17:03 ` Junio C Hamano
2022-03-31 1:11 ` [PATCH v4 06/27] revision.[ch]: provide and start using a release_revisions() Ævar Arnfjörð Bjarmason
2022-04-01 15:17 ` Phillip Wood
2022-04-01 17:25 ` Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 07/27] revisions API users: add straightforward release_revisions() Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 08/27] revision.[ch]: document and move code declared around "init" Ævar Arnfjörð Bjarmason
2022-04-01 15:20 ` Phillip Wood
2022-03-31 1:11 ` [PATCH v4 09/27] revisions API users: use release_revisions() needing REV_INFO_INIT Ævar Arnfjörð Bjarmason
2022-03-31 21:14 ` Junio C Hamano
2022-04-01 10:31 ` Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 10/27] stash: always have the owner of "stash_info" free it Ævar Arnfjörð Bjarmason
2022-04-01 15:29 ` Phillip Wood
2022-04-01 17:29 ` Ævar Arnfjörð Bjarmason
2022-04-01 15:33 ` Phillip Wood
2022-03-31 1:11 ` [PATCH v4 11/27] revisions API users: add "goto cleanup" for release_revisions() Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 12/27] revisions API users: use release_revisions() in http-push.c Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 13/27] revisions API users: use release_revisions() in builtin/log.c Ævar Arnfjörð Bjarmason
2022-04-02 9:22 ` Phillip Wood
2022-04-03 14:07 ` Ævar Arnfjörð Bjarmason
2022-04-04 9:27 ` Phillip Wood
2022-04-03 21:49 ` Junio C Hamano
2022-03-31 1:11 ` [PATCH v4 14/27] revisions API users: use release_revisions() with UNLEAK() Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 15/27] revisions API users: use release_revisions() for "prune_data" users Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 16/27] revisions API: have release_revisions() release "commits" Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 17/27] revisions API: have release_revisions() release "mailmap" Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 18/27] revisions API: have release_revisions() release "cmdline" Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 19/27] revisions API: have release_revisions() release "filter" Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 20/27] revisions API: have release_revisions() release "grep_filter" Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 21/27] revisions API: have release_revisions() release "prune_data" Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 22/27] revisions API: clear "boundary_commits" in release_revisions() Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 23/27] revisions API: release "reflog_info" in release revisions() Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 24/27] revisions API: call diff_free(&revs->pruning) in revisions_release() Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 25/27] revisions API: have release_revisions() release "date_mode" Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 26/27] revisions API: have release_revisions() release "topo_walk_info" Ævar Arnfjörð Bjarmason
2022-03-31 1:11 ` [PATCH v4 27/27] revisions API: add a TODO for diff_free(&revs->diffopt) Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 00/27] revision.[ch]: add and use release_revisions() Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 01/27] t/helper/test-fast-rebase.c: don't leak "struct strbuf" Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 02/27] blame: use "goto cleanup" for cleanup_scoreboard() Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 03/27] string_list API users: use string_list_init_{no,}dup Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 04/27] format-patch: don't leak "extra_headers" or "ref_message_ids" Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 05/27] cocci: add and apply free_commit_list() rules Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 06/27] revision.[ch]: provide and start using a release_revisions() Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 07/27] revisions API users: add straightforward release_revisions() Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 08/27] revision.[ch]: document and move code declared around "init" Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 09/27] revisions API users: use release_revisions() needing REV_INFO_INIT Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 10/27] stash: always have the owner of "stash_info" free it Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 11/27] revisions API users: add "goto cleanup" for release_revisions() Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 12/27] revisions API users: use release_revisions() in http-push.c Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 13/27] revisions API users: use release_revisions() in builtin/log.c Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 14/27] revisions API users: use release_revisions() with UNLEAK() Ævar Arnfjörð Bjarmason
2022-04-03 9:27 ` Phillip Wood
2022-04-03 13:55 ` Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 15/27] revisions API users: use release_revisions() for "prune_data" users Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 16/27] revisions API: have release_revisions() release "commits" Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 17/27] revisions API: have release_revisions() release "mailmap" Ævar Arnfjörð Bjarmason
2022-04-03 9:33 ` Phillip Wood
2022-04-03 13:57 ` Ævar Arnfjörð Bjarmason
2022-04-04 9:19 ` Phillip Wood
2022-04-02 10:49 ` [PATCH v5 18/27] revisions API: have release_revisions() release "cmdline" Ævar Arnfjörð Bjarmason
2022-04-03 12:54 ` Phillip Wood
2022-04-03 14:01 ` Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 19/27] revisions API: have release_revisions() release "filter" Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 20/27] revisions API: have release_revisions() release "grep_filter" Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 21/27] revisions API: have release_revisions() release "prune_data" Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 22/27] revisions API: clear "boundary_commits" in release_revisions() Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 23/27] revisions API: release "reflog_info" in release revisions() Ævar Arnfjörð Bjarmason
2022-04-03 15:19 ` Phillip Wood
2022-04-02 10:49 ` [PATCH v5 24/27] revisions API: call diff_free(&revs->pruning) in revisions_release() Ævar Arnfjörð Bjarmason
2022-04-03 13:00 ` Phillip Wood
2022-04-03 14:04 ` Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 25/27] revisions API: have release_revisions() release "date_mode" Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 26/27] revisions API: have release_revisions() release "topo_walk_info" Ævar Arnfjörð Bjarmason
2022-04-02 10:49 ` [PATCH v5 27/27] revisions API: add a TODO for diff_free(&revs->diffopt) Ævar Arnfjörð Bjarmason
2022-04-03 13:07 ` Phillip Wood [this message]
2022-04-03 14:18 ` [PATCH v5 00/27] revision.[ch]: add and use release_revisions() Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 " Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 01/27] t/helper/test-fast-rebase.c: don't leak "struct strbuf" Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 02/27] blame: use "goto cleanup" for cleanup_scoreboard() Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 03/27] string_list API users: use string_list_init_{no,}dup Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 04/27] format-patch: don't leak "extra_headers" or "ref_message_ids" Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 05/27] cocci: add and apply free_commit_list() rules Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 06/27] revision.[ch]: provide and start using a release_revisions() Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 07/27] revisions API users: add straightforward release_revisions() Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 08/27] revision.[ch]: document and move code declared around "init" Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 09/27] revisions API users: use release_revisions() needing REV_INFO_INIT Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 10/27] stash: always have the owner of "stash_info" free it Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 11/27] revisions API users: add "goto cleanup" for release_revisions() Ævar Arnfjörð Bjarmason
2022-07-11 18:06 ` Jeff King
2022-07-11 20:12 ` Ævar Arnfjörð Bjarmason
2022-07-12 6:54 ` Jeff King
2022-07-12 7:03 ` [PATCH] diff-files: move misplaced cleanup label Jeff King
2022-04-13 20:01 ` [PATCH v6 12/27] revisions API users: use release_revisions() in http-push.c Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 13/27] revisions API users: use release_revisions() in builtin/log.c Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 14/27] revisions API users: use release_revisions() with UNLEAK() Ævar Arnfjörð Bjarmason
2022-04-15 13:58 ` Phillip Wood
2022-04-13 20:01 ` [PATCH v6 15/27] revisions API users: use release_revisions() for "prune_data" users Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 16/27] revisions API: have release_revisions() release "commits" Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 17/27] revisions API: have release_revisions() release "mailmap" Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 18/27] revisions API: have release_revisions() release "cmdline" Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 19/27] revisions API: have release_revisions() release "filter" Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 20/27] revisions API: have release_revisions() release "grep_filter" Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 21/27] revisions API: have release_revisions() release "prune_data" Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 22/27] revisions API: clear "boundary_commits" in release_revisions() Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 23/27] revisions API: release "reflog_info" in release revisions() Ævar Arnfjörð Bjarmason
2022-04-13 20:01 ` [PATCH v6 24/27] revisions API: call diff_free(&revs->pruning) in revisions_release() Ævar Arnfjörð Bjarmason
2022-04-14 5:56 ` [PATCH v6 25/27] revisions API: have release_revisions() release "date_mode" Ævar Arnfjörð Bjarmason
2022-04-14 5:56 ` [PATCH v6 26/27] revisions API: have release_revisions() release "topo_walk_info" Ævar Arnfjörð Bjarmason
2022-04-14 5:56 ` [PATCH v6 27/27] revisions API: add a TODO for diff_free(&revs->diffopt) Æ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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5d3345d9-3c7c-a761-9c7a-03468a653e48@gmail.com \
--to=phillip.wood123@gmail.com \
--cc=avarab@gmail.com \
--cc=derrickstolee@github.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=martin.agren@gmail.com \
--cc=newren@gmail.com \
--cc=phillip.wood@dunelm.org.uk \
--cc=sandals@crustytoothpaste.net \
/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).