diff options
author | Junio C Hamano <gitster@pobox.com> | 2008-02-20 16:13:32 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-02-20 16:13:32 -0800 |
commit | 378b2607f07bd2fa0eaa8648e7dc8db636708d74 (patch) | |
tree | 2b303f3c2661eb17020b6cf80530c1bf0312ceab /http-push.c | |
parent | c484166374218c4af063c5b646af2a6e8fd7845e (diff) | |
parent | 7fea9c551436a98edf4ab6840de981f99b7db687 (diff) | |
download | git-378b2607f07bd2fa0eaa8648e7dc8db636708d74.tar.gz git-378b2607f07bd2fa0eaa8648e7dc8db636708d74.tar.xz |
Merge branch 'js/maint-http-push'
* js/maint-http-push:
http-push: avoid a needless goto
http-push: do not get confused by submodules
http-push: avoid invalid memory accesses
Diffstat (limited to 'http-push.c')
-rw-r--r-- | http-push.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/http-push.c b/http-push.c index 63ff218b3..0beb7406c 100644 --- a/http-push.c +++ b/http-push.c @@ -1634,12 +1634,19 @@ static struct object_list **process_tree(struct tree *tree, init_tree_desc(&desc, tree->buffer, tree->size); - while (tree_entry(&desc, &entry)) { - if (S_ISDIR(entry.mode)) + while (tree_entry(&desc, &entry)) + switch (object_type(entry.mode)) { + case OBJ_TREE: p = process_tree(lookup_tree(entry.sha1), p, &me, name); - else + break; + case OBJ_BLOB: p = process_blob(lookup_blob(entry.sha1), p, &me, name); - } + break; + default: + /* Subproject commit - not in this repository */ + break; + } + free(tree->buffer); tree->buffer = NULL; return p; @@ -2399,15 +2406,17 @@ int main(int argc, char **argv) fill_active_slots(); add_fill_function(NULL, fill_active_slot); #endif - finish_all_active_slots(); + do { + finish_all_active_slots(); +#ifdef USE_CURL_MULTI + fill_active_slots(); +#endif + } while (request_queue_head && !aborted); /* Update the remote branch if all went well */ - if (aborted || !update_remote(ref->new_sha1, ref_lock)) { + if (aborted || !update_remote(ref->new_sha1, ref_lock)) rc = 1; - goto unlock; - } - unlock: if (!rc) fprintf(stderr, " done\n"); unlock_remote(ref_lock); |