From c4584ae3fd7cd595a638a07dfd853e9d2745e930 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Mon, 27 Jun 2005 03:33:33 -0700 Subject: [PATCH] Remove "delta" object representation. Packed delta files created by git-pack-objects seems to be the way to go, and existing "delta" object handling code has exposed the object representation details to too many places. Remove it while we refactor code to come up with a proper interface in sha1_file.c. Signed-off-by: Junio C Hamano Signed-off-by: Linus Torvalds --- delta.c | 114 ---------------------------------------------------------------- 1 file changed, 114 deletions(-) delete mode 100644 delta.c (limited to 'delta.c') diff --git a/delta.c b/delta.c deleted file mode 100644 index db85989e71..0000000000 --- a/delta.c +++ /dev/null @@ -1,114 +0,0 @@ -#include "object.h" -#include "blob.h" -#include "tree.h" -#include "commit.h" -#include "tag.h" -#include "delta.h" -#include "cache.h" - -/* the delta object definition (it can alias any other object) */ -struct delta { - union { - struct object object; - struct blob blob; - struct tree tree; - struct commit commit; - struct tag tag; - } u; -}; - -struct delta *lookup_delta(const unsigned char *sha1) -{ - struct object *obj = lookup_object(sha1); - if (!obj) { - struct delta *ret = xmalloc(sizeof(struct delta)); - memset(ret, 0, sizeof(struct delta)); - created_object(sha1, &ret->u.object); - return ret; - } - return (struct delta *) obj; -} - -int parse_delta_buffer(struct delta *item, void *buffer, unsigned long size) -{ - struct object *reference; - struct object_list *p; - - if (item->u.object.delta) - return 0; - item->u.object.delta = 1; - if (size <= 20) - return -1; - reference = lookup_object(buffer); - if (!reference) { - struct delta *ref = xmalloc(sizeof(struct delta)); - memset(ref, 0, sizeof(struct delta)); - created_object(buffer, &ref->u.object); - reference = &ref->u.object; - } - - p = xmalloc(sizeof(*p)); - p->item = &item->u.object; - p->next = reference->attached_deltas; - reference->attached_deltas = p; - return 0; -} - -int process_deltas(void *src, unsigned long src_size, const char *src_type, - struct object_list *delta_list) -{ - int deepest = 0; - do { - struct object *obj = delta_list->item; - static char type[10]; - void *map, *delta, *buf; - unsigned long map_size, delta_size, buf_size; - map = map_sha1_file(obj->sha1, &map_size); - if (!map) - continue; - delta = unpack_sha1_file(map, map_size, type, &delta_size); - munmap(map, map_size); - if (!delta) - continue; - if (strcmp(type, "delta") || delta_size <= 20) { - free(delta); - continue; - } - buf = patch_delta(src, src_size, - delta+20, delta_size-20, - &buf_size); - free(delta); - if (!buf) - continue; - if (check_sha1_signature(obj->sha1, buf, buf_size, src_type) < 0) - printf("sha1 mismatch for delta %s\n", sha1_to_hex(obj->sha1)); - if (obj->type && obj->type != src_type) { - error("got %s when expecting %s for delta %s", - src_type, obj->type, sha1_to_hex(obj->sha1)); - free(buf); - continue; - } - obj->type = src_type; - if (src_type == blob_type) { - parse_blob_buffer((struct blob *)obj, buf, buf_size); - } else if (src_type == tree_type) { - parse_tree_buffer((struct tree *)obj, buf, buf_size); - } else if (src_type == commit_type) { - parse_commit_buffer((struct commit *)obj, buf, buf_size); - } else if (src_type == tag_type) { - parse_tag_buffer((struct tag *)obj, buf, buf_size); - } else { - error("unknown object type %s", src_type); - free(buf); - continue; - } - if (obj->attached_deltas) { - int depth = process_deltas(buf, buf_size, src_type, - obj->attached_deltas); - if (deepest < depth) - deepest = depth; - } - free(buf); - } while ((delta_list = delta_list->next)); - return deepest + 1; -} -- cgit v1.2.1