021b6e4549
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>
60 lines
1.4 KiB
C
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;
|
|
}
|