fsck-cache: notice missing "blob" objects.
We should _not_ mark a blob object "parsed" just because we looked it up: it gets marked that way only once we've actually seen it. Otherwise we can never notice a missing blob.maint
parent
da6abf5d9c
commit
4728b861ac
1
blob.c
1
blob.c
|
@ -12,7 +12,6 @@ struct blob *lookup_blob(unsigned char *sha1)
|
||||||
memset(ret, 0, sizeof(struct blob));
|
memset(ret, 0, sizeof(struct blob));
|
||||||
created_object(sha1, &ret->object);
|
created_object(sha1, &ret->object);
|
||||||
ret->object.type = blob_type;
|
ret->object.type = blob_type;
|
||||||
ret->object.parsed = 1;
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
if (obj->parsed && obj->type != blob_type) {
|
if (obj->parsed && obj->type != blob_type) {
|
||||||
|
|
10
fsck-cache.c
10
fsck-cache.c
|
@ -60,11 +60,19 @@ static int fsck_commit(unsigned char *sha1, void *data, unsigned long size)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int fsck_blob(unsigned char *sha1, void *data, unsigned long size)
|
||||||
|
{
|
||||||
|
struct blob *blob = lookup_blob(sha1);
|
||||||
|
blob->object.parsed = 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int fsck_entry(unsigned char *sha1, char *tag, void *data,
|
static int fsck_entry(unsigned char *sha1, char *tag, void *data,
|
||||||
unsigned long size)
|
unsigned long size)
|
||||||
{
|
{
|
||||||
if (!strcmp(tag, "blob")) {
|
if (!strcmp(tag, "blob")) {
|
||||||
lookup_blob(sha1); /* Nothing to check; but notice it. */
|
if (fsck_blob(sha1, data, size) < 0)
|
||||||
|
return -1;
|
||||||
} else if (!strcmp(tag, "tree")) {
|
} else if (!strcmp(tag, "tree")) {
|
||||||
if (fsck_tree(sha1, data, size) < 0)
|
if (fsck_tree(sha1, data, size) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in New Issue