Re: [PATCH 1/1] maintenance: fix a SEGFAULT when no repository
- From
Eric Sunshine <sunshine@sunshineco.com>
- Date
- Nov 24, 2020, 17:24 UTC
- Message-ID
- <CAPig+cQ-iWVz2Q1PtvbV0hk_HHRFqAFjxAF2DZ6doh2RxpZJhw@mail.gmail.com>
- In-Reply-To
- <20201124164405.29327-2-rafaeloliveira.cs@gmail.com>
On Tue, Nov 24, 2020 at 11:45 AM Rafael Silva <rafaeloliveira.cs@gmail.com> wrote:
Show 9 quoted lines
> The "git maintenance run" and "git maintenance start" commands holds a > file-based lock at the .git/maintenance.lock and .git/schedule.lock > respectively. These locks are used to ensure only one maintenance process > is executed at the time as both operations involves writing data into > the git repository. > > The path to the lock file is built using the "the_repository->objects->odb->path" > that results in SEGFAULT when we have no repository available as > "the_repository->objects->odb" is set to NULL.
This issue came up in review recently[1] in an unrelated way.
[1]: https://lore.kernel.org/git/CAPig+cRFQfg-NLx5dO+BjQpYduhOYs-_+ZRd=DhO8ebWjGB0iA@mail.gmail.com/
Show 11 quoted lines
> Let's teach the maintenance_run_tasks() and update_background_schedule() to return > an error and fails the command when we have no repository available. > > Signed-off-by: Rafael Silva <rafaeloliveira.cs@gmail.com> > --- > diff --git a/t/t7900-maintenance.sh b/t/t7900-maintenance.sh > @@ -441,4 +441,9 @@ test_expect_success 'register preserves existing strategy' ' > +test_expect_success 'run and start command fails when no git repository' ' > + test_must_fail git -C /tmp/ maintenance run && > + test_must_fail git -C /tmp/ maintenance start > +'
I wouldn't feel comfortable relying upon existence of /tmp/. It might be sufficient to do this instead:
mv .git save.git &&
test_when_finished "mv save.git .git" &&
test_must_fail git maintenance run &&
test_must_fail git maintenance start