Browse Source
* jc/lockfile: ref-log: style fixes. refs.c: convert it to use lockfile interface. Make index file locking code reusable to others. HTTP cleanup HTTP cleanup git-format-patch: add --output-directory long option againmaint
Junio C Hamano
19 years ago
18 changed files with 196 additions and 168 deletions
@ -1,57 +0,0 @@
@@ -1,57 +0,0 @@
|
||||
/* |
||||
* Copyright (c) 2005, Junio C Hamano |
||||
*/ |
||||
#include <signal.h> |
||||
#include "cache.h" |
||||
|
||||
static struct cache_file *cache_file_list; |
||||
|
||||
static void remove_lock_file(void) |
||||
{ |
||||
while (cache_file_list) { |
||||
if (cache_file_list->lockfile[0]) |
||||
unlink(cache_file_list->lockfile); |
||||
cache_file_list = cache_file_list->next; |
||||
} |
||||
} |
||||
|
||||
static void remove_lock_file_on_signal(int signo) |
||||
{ |
||||
remove_lock_file(); |
||||
signal(SIGINT, SIG_DFL); |
||||
raise(signo); |
||||
} |
||||
|
||||
int hold_index_file_for_update(struct cache_file *cf, const char *path) |
||||
{ |
||||
int fd; |
||||
sprintf(cf->lockfile, "%s.lock", path); |
||||
fd = open(cf->lockfile, O_RDWR | O_CREAT | O_EXCL, 0666); |
||||
if (fd >=0 && !cf->next) { |
||||
cf->next = cache_file_list; |
||||
cache_file_list = cf; |
||||
signal(SIGINT, remove_lock_file_on_signal); |
||||
atexit(remove_lock_file); |
||||
} |
||||
return fd; |
||||
} |
||||
|
||||
int commit_index_file(struct cache_file *cf) |
||||
{ |
||||
char indexfile[PATH_MAX]; |
||||
int i; |
||||
strcpy(indexfile, cf->lockfile); |
||||
i = strlen(indexfile) - 5; /* .lock */ |
||||
indexfile[i] = 0; |
||||
i = rename(cf->lockfile, indexfile); |
||||
cf->lockfile[0] = 0; |
||||
return i; |
||||
} |
||||
|
||||
void rollback_index_file(struct cache_file *cf) |
||||
{ |
||||
if (cf->lockfile[0]) |
||||
unlink(cf->lockfile); |
||||
cf->lockfile[0] = 0; |
||||
} |
||||
|
@ -0,0 +1,57 @@
@@ -0,0 +1,57 @@
|
||||
/* |
||||
* Copyright (c) 2005, Junio C Hamano |
||||
*/ |
||||
#include <signal.h> |
||||
#include "cache.h" |
||||
|
||||
static struct lock_file *lock_file_list; |
||||
|
||||
static void remove_lock_file(void) |
||||
{ |
||||
while (lock_file_list) { |
||||
if (lock_file_list->filename[0]) |
||||
unlink(lock_file_list->filename); |
||||
lock_file_list = lock_file_list->next; |
||||
} |
||||
} |
||||
|
||||
static void remove_lock_file_on_signal(int signo) |
||||
{ |
||||
remove_lock_file(); |
||||
signal(SIGINT, SIG_DFL); |
||||
raise(signo); |
||||
} |
||||
|
||||
int hold_lock_file_for_update(struct lock_file *lk, const char *path) |
||||
{ |
||||
int fd; |
||||
sprintf(lk->filename, "%s.lock", path); |
||||
fd = open(lk->filename, O_RDWR | O_CREAT | O_EXCL, 0666); |
||||
if (fd >=0 && !lk->next) { |
||||
lk->next = lock_file_list; |
||||
lock_file_list = lk; |
||||
signal(SIGINT, remove_lock_file_on_signal); |
||||
atexit(remove_lock_file); |
||||
} |
||||
return fd; |
||||
} |
||||
|
||||
int commit_lock_file(struct lock_file *lk) |
||||
{ |
||||
char result_file[PATH_MAX]; |
||||
int i; |
||||
strcpy(result_file, lk->filename); |
||||
i = strlen(result_file) - 5; /* .lock */ |
||||
result_file[i] = 0; |
||||
i = rename(lk->filename, result_file); |
||||
lk->filename[0] = 0; |
||||
return i; |
||||
} |
||||
|
||||
void rollback_lock_file(struct lock_file *lk) |
||||
{ |
||||
if (lk->filename[0]) |
||||
unlink(lk->filename); |
||||
lk->filename[0] = 0; |
||||
} |
||||
|
Loading…
Reference in new issue