Staging
v0.5.1
Revision 1ed91937e5cd59fdbdfa5f15f6fac132d2b21ce0 authored by Junio C Hamano on 15 December 2005, 01:30:03 UTC, committed by Junio C Hamano on 15 December 2005, 01:30:03 UTC
Oh, I hate to do this but I ended up merging big usage string
cleanups from Fredrik, git-am enhancements that made a lot of
sense for non mbox users from HPA, and rebase changes (done
independently by me and Lukas) among other things, so git is
still in perpetual state of 1.0rc.  1.0 will probably be next
Wednesday, but who knows.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2 parent s a957207 + 294c695
Raw File
index.c
/*
 * 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();
}

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;
}

back to top