diff options
author | Junio C Hamano <junkio@cox.net> | 2005-06-27 03:33:33 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-27 15:27:51 -0700 |
commit | c4584ae3fd7cd595a638a07dfd853e9d2745e930 (patch) | |
tree | 735d3d7612055565941f98219ff862ce24ef2c78 /delta.c | |
parent | ee85cbc6887d6ae4eb09a3e2c7319f66ae7c9034 (diff) | |
download | git-c4584ae3fd7cd595a638a07dfd853e9d2745e930.tar.gz |
[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 <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'delta.c')
-rw-r--r-- | delta.c | 114 |
1 files changed, 0 insertions, 114 deletions
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; -} |