From: Eric Sunshine Date: Tue, 24 Nov 2020 17:24:57 GMT Subject: Re: [PATCH 1/1] maintenance: fix a SEGFAULT when no repository Message-ID: In-Reply-To: <20201124164405.29327-2-rafaeloliveira.cs@gmail.com> On Tue, Nov 24, 2020 at 11:45 AM Rafael Silva wrote: > 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/ > 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 > --- > 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