]> git.ipfire.org Git - thirdparty/git.git/commit - git.c
maintenance: fix SEGFAULT when no repository
authorRafael Silva <rafaeloliveira.cs@gmail.com>
Thu, 26 Nov 2020 20:41:41 +0000 (20:41 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 30 Nov 2020 21:44:15 +0000 (13:44 -0800)
commite72f7defc4f454cc7ad512d9a16a78b83f2606d8
treea7f4893c377b7de761dc369fe8c68100978e0465
parente67fbf927dfdf13d0b21dc6ea15dc3c7ef448ea0
maintenance: fix SEGFAULT when no repository

The "git maintenance run" and "git maintenance start/stop" 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_repository->objects->odb->path" that results in SEGFAULT when we
have no repository available as "the_repository->objects->odb" is
set to NULL.

Let's teach maintenance command to use RUN_SETUP option that will
provide the validation and fail when running outside of a repository.
Hence fixing the SEGFAULT for all three operations and making the
behaviour consistent across all subcommands.

Setting the RUN_SETUP also provides the same protection for all
subcommands given that the "register" and "unregister" also requires to
be executed inside a repository.

Furthermore let's remove the local validation implemented by the
"register" and "unregister" as this will not be required anymore with
the new option.

Signed-off-by: Rafael Silva <rafaeloliveira.cs@gmail.com>
Reviewed-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/gc.c
git.c
t/t7900-maintenance.sh