mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
Merge branch 'nd/gc-lock-against-each-other'
* nd/gc-lock-against-each-other: gc: remove gc.pid file at end of execution
This commit is contained in:
commit
414b7033b1
24
builtin/gc.c
24
builtin/gc.c
|
@ -14,6 +14,7 @@
|
|||
#include "cache.h"
|
||||
#include "parse-options.h"
|
||||
#include "run-command.h"
|
||||
#include "sigchain.h"
|
||||
#include "argv-array.h"
|
||||
|
||||
#define FAILED_RUN "failed to run %s"
|
||||
|
@ -35,6 +36,21 @@ static struct argv_array repack = ARGV_ARRAY_INIT;
|
|||
static struct argv_array prune = ARGV_ARRAY_INIT;
|
||||
static struct argv_array rerere = ARGV_ARRAY_INIT;
|
||||
|
||||
static char *pidfile;
|
||||
|
||||
static void remove_pidfile(void)
|
||||
{
|
||||
if (pidfile)
|
||||
unlink(pidfile);
|
||||
}
|
||||
|
||||
static void remove_pidfile_on_signal(int signo)
|
||||
{
|
||||
remove_pidfile();
|
||||
sigchain_pop(signo);
|
||||
raise(signo);
|
||||
}
|
||||
|
||||
static int gc_config(const char *var, const char *value, void *cb)
|
||||
{
|
||||
if (!strcmp(var, "gc.packrefs")) {
|
||||
|
@ -179,6 +195,10 @@ static const char *lock_repo_for_gc(int force, pid_t* ret_pid)
|
|||
FILE *fp;
|
||||
int fd, should_exit;
|
||||
|
||||
if (pidfile)
|
||||
/* already locked */
|
||||
return NULL;
|
||||
|
||||
if (gethostname(my_host, sizeof(my_host)))
|
||||
strcpy(my_host, "unknown");
|
||||
|
||||
|
@ -219,6 +239,10 @@ static const char *lock_repo_for_gc(int force, pid_t* ret_pid)
|
|||
strbuf_release(&sb);
|
||||
commit_lock_file(&lock);
|
||||
|
||||
pidfile = git_pathdup("gc.pid");
|
||||
sigchain_push_common(remove_pidfile_on_signal);
|
||||
atexit(remove_pidfile);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -9,6 +9,11 @@ test_expect_success 'gc empty repository' '
|
|||
git gc
|
||||
'
|
||||
|
||||
test_expect_success 'gc does not leave behind pid file' '
|
||||
git gc &&
|
||||
test_path_is_missing .git/gc.pid
|
||||
'
|
||||
|
||||
test_expect_success 'gc --gobbledegook' '
|
||||
test_expect_code 129 git gc --nonsense 2>err &&
|
||||
test_i18ngrep "[Uu]sage: git gc" err
|
||||
|
|
Loading…
Reference in a new issue