git-commit-vandalism/write-tree.c
Junio C Hamano 021b6e4549 Make index file locking code reusable to others.
The framework to create lockfiles that are removed at exit is
first used to reliably write the index file, but it is
applicable to other things, so stop calling it "cache_file".

This also rewords a few remaining error message that called the
index file "cache file".

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-06-06 14:30:58 -07:00

60 lines
1.4 KiB
C

/*
* GIT - The information manager from hell
*
* Copyright (C) Linus Torvalds, 2005
*/
#include "cache.h"
#include "tree.h"
#include "cache-tree.h"
static int missing_ok = 0;
static const char write_tree_usage[] = "git-write-tree [--missing-ok]";
static struct lock_file lock_file;
int main(int argc, char **argv)
{
int entries, was_valid, newfd;
setup_git_directory();
newfd = hold_lock_file_for_update(&lock_file, get_index_file());
entries = read_cache();
if (argc == 2) {
if (!strcmp(argv[1], "--missing-ok"))
missing_ok = 1;
else
die(write_tree_usage);
}
if (argc > 2)
die("too many options");
if (entries < 0)
die("git-write-tree: error reading cache");
if (!active_cache_tree)
active_cache_tree = cache_tree();
was_valid = cache_tree_fully_valid(active_cache_tree);
if (!was_valid) {
if (cache_tree_update(active_cache_tree,
active_cache, active_nr,
missing_ok, 0) < 0)
die("git-write-tree: error building trees");
if (0 <= newfd) {
if (!write_cache(newfd, active_cache, active_nr))
commit_lock_file(&lock_file);
}
/* Not being able to write is fine -- we are only interested
* in updating the cache-tree part, and if the next caller
* ends up using the old index with unupdated cache-tree part
* it misses the work we did here, but that is just a
* performance penalty and not a big deal.
*/
}
printf("%s\n", sha1_to_hex(active_cache_tree->sha1));
return 0;
}