From: "SZEDER Gábor" <szeder.dev@gmail.com>
To: Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, me@ttaylorr.com, peff@peff.net,
Derrick Stolee <dstolee@microsoft.com>
Subject: Re: [PATCH] commit-graph: fix buggy --expire-time option
Date: Wed, 1 Apr 2020 21:47:06 +0200 [thread overview]
Message-ID: <20200401194706.GE2224@szeder.dev> (raw)
In-Reply-To: <pull.596.git.1585764695643.gitgitgadget@gmail.com>
On Wed, Apr 01, 2020 at 06:11:35PM +0000, Derrick Stolee via GitGitGadget wrote:
> From: Derrick Stolee <dstolee@microsoft.com>
>
> The commit-graph builtin has an --expire-time option that takes a
> datetime using OPT_EXPIRY_DATE(). However, the implementation inside
> expire_commit_graphs() was treating a non-zero value as a number of
> seconds to subtract from "now".
>
> Update t5323-split-commit-graph.sh to demonstrate the correct value
> of the --expire-time option by actually creating a crud .graph file
> with mtime earlier than the expire time. Instead of using a super-
> early time (1980) we need to use a recent time or else the old
> logic actually passes by accident. This test will start passing
> again on the old logic in 40 years or so.
>
> I noticed this when inspecting some Scalar repos that had an excess
> number of commit-graph files. In Scalar, we were using this second
> interpretation by using "--expire-time=3600" to mean "delete graphs
> older than one hour ago" to avoid deleting a commit-graph that a
> foreground process may be trying to load.
>
> Also I noticed that the help text was copied from the --max-commits
> option. Fix that help text.
>
> Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
> ---
> commit-graph: fix buggy --expire-time option
>
> This is embarassing. I should have noticed this when writing it the
> first time, or when integrating the feature into Scalar and VFS for Git.
> Sorry!
>
> Thanks, -Stolee
>
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-596%2Fderrickstolee%2Fcommit-graph-expire-fix-v1
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-596/derrickstolee/commit-graph-expire-fix-v1
> Pull-Request: https://github.com/gitgitgadget/git/pull/596
>
> builtin/commit-graph.c | 2 +-
> commit-graph.c | 2 +-
> t/t5324-split-commit-graph.sh | 4 +++-
> 3 files changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/builtin/commit-graph.c b/builtin/commit-graph.c
> index 4a70b33fb5f..8000ff0d2ee 100644
> --- a/builtin/commit-graph.c
> +++ b/builtin/commit-graph.c
> @@ -140,7 +140,7 @@ static int graph_write(int argc, const char **argv)
> OPT_INTEGER(0, "size-multiple", &split_opts.size_multiple,
> N_("maximum ratio between two levels of a split commit-graph")),
> OPT_EXPIRY_DATE(0, "expire-time", &split_opts.expire_time,
> - N_("maximum number of commits in a non-base split commit-graph")),
> + N_("do not expire files newer than a number of seconds before now")),
> OPT_END(),
> };
>
> diff --git a/commit-graph.c b/commit-graph.c
> index f013a84e294..0d0d37787a0 100644
> --- a/commit-graph.c
> +++ b/commit-graph.c
> @@ -1707,7 +1707,7 @@ static void expire_commit_graphs(struct write_commit_graph_context *ctx)
> timestamp_t expire_time = time(NULL);
>
> if (ctx->split_opts && ctx->split_opts->expire_time)
> - expire_time -= ctx->split_opts->expire_time;
> + expire_time = ctx->split_opts->expire_time;
> if (!ctx->split) {
> char *chain_file_name = get_chain_filename(ctx->odb);
> unlink(chain_file_name);
> diff --git a/t/t5324-split-commit-graph.sh b/t/t5324-split-commit-graph.sh
> index 53b2e6b4555..4e4efcaff22 100755
> --- a/t/t5324-split-commit-graph.sh
> +++ b/t/t5324-split-commit-graph.sh
> @@ -210,8 +210,10 @@ test_expect_success 'test merge stragety constants' '
> git config core.commitGraph true &&
> test_line_count = 2 $graphdir/commit-graph-chain &&
> test_commit 15 &&
> - git commit-graph write --reachable --split --size-multiple=10 --expire-time=1980-01-01 &&
> + touch -m -t 201801010000.00 $graphdir/extra.graph &&
You can set a mtime relative to the current time with:
test-tool chmtime =-3600 $graphdir/extra.graph
> + git commit-graph write --reachable --split --size-multiple=10 --expire-time=2019-01-01 &&
> test_line_count = 1 $graphdir/commit-graph-chain &&
> + test_path_is_missing $graphdir/extra.graph &&
> ls $graphdir/graph-*.graph >graph-files &&
> test_line_count = 3 graph-files
> ) &&
>
> base-commit: 274b9cc25322d9ee79aa8e6d4e86f0ffe5ced925
> --
> gitgitgadget
next prev parent reply other threads:[~2020-04-01 19:47 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-01 18:11 [PATCH] commit-graph: fix buggy --expire-time option Derrick Stolee via GitGitGadget
2020-04-01 18:17 ` Derrick Stolee
2020-04-01 18:56 ` Taylor Blau
2020-04-01 19:27 ` Taylor Blau
2020-04-01 19:36 ` Eric Sunshine
2020-04-01 19:47 ` SZEDER Gábor [this message]
2020-04-01 19:49 ` Junio C Hamano
2020-04-01 19:57 ` Jeff King
2020-04-01 20:33 ` Junio C Hamano
2020-04-01 20:51 ` Derrick Stolee
2020-04-01 20:14 ` Derrick Stolee
2020-04-01 21:00 ` [PATCH v2 0/2] " Derrick Stolee via GitGitGadget
2020-04-01 21:00 ` [PATCH v2 1/2] t5319: replace 'touch -m' with 'test-tool chmtime' Derrick Stolee via GitGitGadget
2020-04-01 21:35 ` Junio C Hamano
2020-04-02 0:06 ` Derrick Stolee
2020-04-02 12:51 ` Jeff King
2020-04-02 16:36 ` Junio C Hamano
2020-04-01 21:00 ` [PATCH v2 2/2] commit-graph: fix buggy --expire-time option Derrick Stolee via GitGitGadget
2020-04-01 21:05 ` [PATCH v2 0/2] " Junio C Hamano
2020-04-01 23:33 ` Derrick Stolee
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=20200401194706.GE2224@szeder.dev \
--to=szeder.dev@gmail.com \
--cc=dstolee@microsoft.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=me@ttaylorr.com \
--cc=peff@peff.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.