Merge branch 'jk/maint-pack-objects-compete-with-delete'

* jk/maint-pack-objects-compete-with-delete:
  downgrade "packfile cannot be accessed" errors to warnings
  pack-objects: protect against disappearing packs
This commit is contained in:
Junio C Hamano
2011-10-21 16:04:33 -07:00
3 changed files with 7 additions and 2 deletions

View File

@ -804,6 +804,10 @@ static int add_object_entry(const unsigned char *sha1, enum object_type type,
off_t offset = find_pack_entry_one(sha1, p); off_t offset = find_pack_entry_one(sha1, p);
if (offset) { if (offset) {
if (!found_pack) { if (!found_pack) {
if (!is_pack_valid(p)) {
warning("packfile %s cannot be accessed", p->pack_name);
continue;
}
found_offset = offset; found_offset = offset;
found_pack = p; found_pack = p;
} }

View File

@ -1057,6 +1057,7 @@ extern struct packed_git *add_packed_git(const char *, int, int);
extern const unsigned char *nth_packed_object_sha1(struct packed_git *, uint32_t); extern const unsigned char *nth_packed_object_sha1(struct packed_git *, uint32_t);
extern off_t nth_packed_object_offset(const struct packed_git *, uint32_t); 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 off_t find_pack_entry_one(const unsigned char *, struct packed_git *);
extern int is_pack_valid(struct packed_git *);
extern void *unpack_entry(struct packed_git *, off_t, enum object_type *, unsigned long *); extern void *unpack_entry(struct packed_git *, off_t, enum object_type *, unsigned long *);
extern unsigned long unpack_object_header_buffer(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 unsigned long get_size_from_delta(struct packed_git *, struct pack_window **, off_t);

View File

@ -1987,7 +1987,7 @@ off_t find_pack_entry_one(const unsigned char *sha1,
return 0; return 0;
} }
static int is_pack_valid(struct packed_git *p) int is_pack_valid(struct packed_git *p)
{ {
/* An already open pack is known to be valid. */ /* An already open pack is known to be valid. */
if (p->pack_fd != -1) if (p->pack_fd != -1)
@ -2038,7 +2038,7 @@ static int find_pack_entry(const unsigned char *sha1, struct pack_entry *e)
* was loaded! * was loaded!
*/ */
if (!is_pack_valid(p)) { if (!is_pack_valid(p)) {
error("packfile %s cannot be accessed", p->pack_name); warning("packfile %s cannot be accessed", p->pack_name);
goto next; goto next;
} }
e->offset = offset; e->offset = offset;