From: Junio C Hamano Date: Wed, 11 Mar 2009 20:49:56 +0000 (-0700) Subject: Merge branch 'jc/maint-1.6.0-keep-pack' X-Git-Tag: v1.6.3-rc0~170 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=aec813062b340e6bb181470cf57cc4b4406e1bb8;p=git.git Merge branch 'jc/maint-1.6.0-keep-pack' * jc/maint-1.6.0-keep-pack: is_kept_pack(): final clean-up Simplify is_kept_pack() Consolidate ignore_packed logic more has_sha1_kept_pack(): take "struct rev_info" has_sha1_pack(): refactor "pretend these packs do not exist" interface git-repack: resist stray environment variable --- aec813062b340e6bb181470cf57cc4b4406e1bb8 diff --cc cache.h index 189151de2,0a3d523d2..fdc4ada43 --- a/cache.h +++ b/cache.h @@@ -836,10 -745,9 +837,9 @@@ extern const unsigned char *nth_packed_ extern off_t nth_packed_object_offset(const struct packed_git *, uint32_t); extern off_t find_pack_entry_one(const unsigned char *, struct packed_git *); extern void *unpack_entry(struct packed_git *, off_t, enum object_type *, unsigned long *); -extern unsigned long unpack_object_header_gently(const unsigned char *buf, unsigned long len, enum object_type *type, unsigned long *sizep); +extern unsigned long unpack_object_header_buffer(const unsigned char *buf, unsigned long len, enum object_type *type, unsigned long *sizep); extern unsigned long get_size_from_delta(struct packed_git *, struct pack_window **, off_t); extern const char *packed_object_info_detail(struct packed_git *, off_t, unsigned long *, unsigned long *, unsigned int *, unsigned char *); - extern int matches_pack_name(struct packed_git *p, const char *name); /* Dumb servers support */ extern int update_server_info(int); diff --cc sha1_file.c index 032300c4c,7ead56cc3..456317356 --- a/sha1_file.c +++ b/sha1_file.c @@@ -2046,17 -1969,10 +2032,17 @@@ int sha1_object_info(const unsigned cha /* Not a loose object; someone else may have just packed it. */ reprepare_packed_git(); - if (!find_pack_entry(sha1, &e, NULL)) + if (!find_pack_entry(sha1, &e)) return status; } - return packed_object_info(e.p, e.offset, sizep); + + status = packed_object_info(e.p, e.offset, sizep); + if (status < 0) { + mark_bad_packed_object(e.p, sha1); + status = sha1_object_info(sha1, sizep); + } + + return status; } static void *read_packed_sha1(const unsigned char *sha1,