Browse Source

Convert fetch.c: process_tree() to raw tree walker

This leaves only the horrid code in builtin-read-tree.c using the old
interface. Some day I will gather the strength to tackle that one too.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Linus Torvalds 19 years ago committed by Junio C Hamano
parent
commit
1bc995a392
  1. 24
      fetch.c

24
fetch.c

@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
#include "cache.h"
#include "commit.h"
#include "tree.h"
#include "tree-walk.h"
#include "tag.h"
#include "blob.h"
#include "refs.h"
@ -36,27 +37,32 @@ static int process(struct object *obj); @@ -36,27 +37,32 @@ static int process(struct object *obj);

static int process_tree(struct tree *tree)
{
struct tree_entry_list *entry;
struct tree_desc desc;

if (parse_tree(tree))
return -1;

entry = create_tree_entry_list(tree);
while (entry) {
struct tree_entry_list *next = entry->next;
desc.buf = tree->buffer;
desc.size = tree->size;
while (desc.size) {
unsigned mode;
const char *name;
const unsigned char *sha1;

if (entry->directory) {
struct tree *tree = lookup_tree(entry->sha1);
sha1 = tree_entry_extract(&desc, &name, &mode);
update_tree_entry(&desc);

if (S_ISDIR(mode)) {
struct tree *tree = lookup_tree(sha1);
process_tree(tree);
} else {
struct blob *blob = lookup_blob(entry->sha1);
struct blob *blob = lookup_blob(sha1);
process(&blob->object);
}
free(entry);
entry = next;
}
free(tree->buffer);
tree->buffer = NULL;
tree->size = 0;
return 0;
}


Loading…
Cancel
Save