diff options
author | Junio C Hamano <junkio@cox.net> | 2006-04-25 08:18:58 +0400 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-04-25 08:24:13 +0400 |
commit | bad68ec92410cf47dd001aa9b95d0f24c5f4bf77 (patch) | |
tree | 9c3ef1388867852e706dbf9a4ba9cc6a8ec15bfe /write-tree.c | |
parent | dd0c34c46bdda0c20fd92d00516e711a4c9f7837 (diff) |
index: make the index file format extensible.
... and move the cache-tree data into it.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'write-tree.c')
-rw-r--r-- | write-tree.c | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/write-tree.c b/write-tree.c index cef0c5bb42..a5069921a0 100644 --- a/write-tree.c +++ b/write-tree.c @@ -7,21 +7,20 @@ #include "tree.h" #include "cache-tree.h" -static unsigned char active_cache_sha1[20]; -static struct cache_tree *active_cache_tree; - static int missing_ok = 0; static const char write_tree_usage[] = "git-write-tree [--missing-ok]"; +static struct cache_file cache_file; + int main(int argc, char **argv) { - int entries; + int entries, was_valid, newfd; setup_git_directory(); - entries = read_cache_1(active_cache_sha1); - active_cache_tree = read_cache_tree(active_cache_sha1); + newfd = hold_index_file_for_update(&cache_file, get_index_file()); + entries = read_cache(); if (argc == 2) { if (!strcmp(argv[1], "--missing-ok")) missing_ok = 1; @@ -35,11 +34,26 @@ int main(int argc, char **argv) if (entries < 0) die("git-write-tree: error reading cache"); - if (cache_tree_update(active_cache_tree, active_cache, active_nr, - missing_ok)) - die("git-write-tree: error building trees"); - write_cache_tree(active_cache_sha1, active_cache_tree); - + 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) + die("git-write-tree: error building trees"); + if (0 <= newfd) { + if (!write_cache(newfd, active_cache, active_nr)) + commit_index_file(&cache_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; } |