diff options
author | Junio C Hamano <gitster@pobox.com> | 2012-01-29 13:18:55 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-01-29 13:18:55 -0800 |
commit | d1afa8baa271fe0df1a15a6800f23f972abc5293 (patch) | |
tree | 004b439c43f83336c011139f0ddff67a45b7d233 /upload-pack.c | |
parent | 2bbf77dde2b47f2b8c9769c4d64f7f2f591d1e99 (diff) | |
parent | 90108a2441fb57f69c3f25d072d1952b306b77ab (diff) | |
download | git-d1afa8baa271fe0df1a15a6800f23f972abc5293.tar.gz |
Merge branch 'jk/parse-object-cached'
* jk/parse-object-cached:
upload-pack: avoid parsing tag destinations
upload-pack: avoid parsing objects during ref advertisement
parse_object: try internal cache before reading object db
Diffstat (limited to 'upload-pack.c')
-rw-r--r-- | upload-pack.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/upload-pack.c b/upload-pack.c index 0d11e21a68..bb08e2eb0d 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -724,11 +724,14 @@ static int send_ref(const char *refname, const unsigned char *sha1, int flag, vo static const char *capabilities = "multi_ack thin-pack side-band" " side-band-64k ofs-delta shallow no-progress" " include-tag multi_ack_detailed"; - struct object *o = parse_object(sha1); + struct object *o = lookup_unknown_object(sha1); const char *refname_nons = strip_namespace(refname); - if (!o) - die("git upload-pack: cannot find object %s:", sha1_to_hex(sha1)); + if (o->type == OBJ_NONE) { + o->type = sha1_object_info(sha1, NULL); + if (o->type < 0) + die("git upload-pack: cannot find object %s:", sha1_to_hex(sha1)); + } if (capabilities) packet_write(1, "%s %s%c%s%s\n", sha1_to_hex(sha1), refname_nons, @@ -742,7 +745,7 @@ static int send_ref(const char *refname, const unsigned char *sha1, int flag, vo nr_our_refs++; } if (o->type == OBJ_TAG) { - o = deref_tag(o, refname, 0); + o = deref_tag_noverify(o); if (o) packet_write(1, "%s %s^{}\n", sha1_to_hex(o->sha1), refname_nons); } |