desc.buf = tree->buffer;
desc.size = tree->size;
while (tree_entry(&desc, &entry)) {
+ struct object *obj = NULL;
+
if (S_ISDIR(entry.mode)) {
struct tree *tree = lookup_tree(entry.sha1);
- process_tree(tree);
- } else {
+ if (tree)
+ obj = &tree->object;
+ }
+ else {
struct blob *blob = lookup_blob(entry.sha1);
- process(&blob->object);
+ if (blob)
+ obj = &blob->object;
}
+ if (!obj || process(obj))
+ return -1;
}
free(tree->buffer);
tree->buffer = NULL;
int pull(char *target)
{
- struct ref_lock *lock;
+ struct ref_lock *lock = NULL;
unsigned char sha1[20];
char *msg;
int ret;
if (interpret_target(target, sha1)) {
error("Could not interpret %s as something to pull", target);
- unlock_ref(lock);
+ if (lock)
+ unlock_ref(lock);
return -1;
}
if (process(lookup_unknown_object(sha1))) {
- unlock_ref(lock);
+ if (lock)
+ unlock_ref(lock);
return -1;
}
if (loop()) {
- unlock_ref(lock);
+ if (lock)
+ unlock_ref(lock);
return -1;
}