X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=update-cache.c;h=68d2f95c1cfc90cc6d39bb4ec2f25f4ebd944d69;hb=b96afa59ebfd2c0902e2fd2653e29f291bf0cac7;hp=7d1d8e512617dc4a3b77a922f2765e79201895ab;hpb=e44794706eeb57f2ee38ed1604821aa38b8ad9d2;p=git.git diff --git a/update-cache.c b/update-cache.c index 7d1d8e51..68d2f95c 100644 --- a/update-cache.c +++ b/update-cache.c @@ -14,13 +14,13 @@ */ static int allow_add = 0, allow_remove = 0; -static int index_fd(const char *path, int namelen, struct cache_entry *ce, int fd, struct stat *st) +static int index_fd(unsigned char *sha1, int fd, struct stat *st) { z_stream stream; unsigned long size = st->st_size; - int max_out_bytes = namelen + size + 200; + int max_out_bytes = size + 200; void *out = malloc(max_out_bytes); - void *metadata = malloc(namelen + 200); + void *metadata = malloc(200); void *in; SHA_CTX c; @@ -56,9 +56,9 @@ static int index_fd(const char *path, int namelen, struct cache_entry *ce, int f SHA1_Init(&c); SHA1_Update(&c, out, stream.total_out); - SHA1_Final(ce->sha1, &c); + SHA1_Final(sha1, &c); - return write_sha1_buffer(ce->sha1, out, stream.total_out); + return write_sha1_buffer(sha1, out, stream.total_out); } /* @@ -109,7 +109,7 @@ static int add_file_to_cache(char *path) ce->ce_mode = create_ce_mode(st.st_mode); ce->ce_flags = htons(namelen); - if (index_fd(path, namelen, ce, fd, &st) < 0) + if (index_fd(ce->sha1, fd, &st) < 0) return -1; return add_cache_entry(ce, allow_add); @@ -196,9 +196,18 @@ static void refresh_cache(void) int i; for (i = 0; i < active_nr; i++) { - struct cache_entry *ce = active_cache[i]; - struct cache_entry *new = refresh_entry(ce); + struct cache_entry *ce, *new; + ce = active_cache[i]; + if (ce_stage(ce)) { + printf("%s: needs merge\n", ce->name); + while ((i < active_nr) && + ! strcmp(active_cache[i]->name, ce->name)) + i++; + i--; + continue; + } + new = refresh_entry(ce); if (!new) { printf("%s: needs update\n", ce->name); continue; @@ -244,13 +253,10 @@ static int add_cacheinfo(char *arg1, char *arg2, char *arg3) if (sscanf(arg1, "%o", &mode) != 1) return -1; - printf("got mode %o\n", mode); if (get_sha1_hex(arg2, sha1)) return -1; - printf("got sha1 %s\n", sha1_to_hex(sha1)); if (!verify_path(arg3)) return -1; - printf("got path %s\n", arg3); len = strlen(arg3); size = cache_entry_size(len);