Re: Is there a quick way to identify commits that reference missing trees or blobs?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Jul 26, 2011 at 8:44 AM, Clemens Buchacher <drizzd@xxxxxx> wrote:
> On Tue, Jul 26, 2011 at 12:34:50AM +0200, Clemens Buchacher wrote:
>> On Sun, Jul 24, 2011 at 02:48:20AM +1000, Jon Seymour wrote:
>> >
>> > I was wondering if there is a quick way to identify commits that
>> > reference missing trees or blobs as identified by git fsck?
>>
>> The following command has served me well for this purpose. I apply
>> it to each ref in git-for-each-ref:
>>
>> $ git rev-list --objects $ref | git cat-file --batch-check
>
> Oh, and here is the output you get for different situations. Exit
> status is always 0 unfortunately.
>
>  - missing blob
>
> fatal: missing blob object '78981922613b2afb6025042ff6bd878ac1994e85'
> d165426eba5cb4c125bd6e100d1b5de7298eb601 commit 168
> 848740929e99bda0e1a9783e7daa314c5a9732d5  missing
>
>  - missing tree
>
> error: Could not read 84bf061d017459b4be45a49b8d8dc945e7a7fdf5
> fatal: bad tree object 84bf061d017459b4be45a49b8d8dc945e7a7fdf5
> abce3ad54002628ab74d72b7e2baa687abcb77f9 commit 168
>
>  - missing parent commit
>
> error: Could not read 3aa66f30aa9799ac38a53b551ac4faca9cbd400b
> fatal: Failed to traverse parents of commit 3cfb98a3cbd3f42852e20bd011c7b835b8750df7
>
> Clemens
>

Thanks for that.

Junio, also pointed out in another thread that git rev-list --objects
is quite useful for this purpose. His variant used git pack-objects
which apparently does exit with zero status code.  The zero exit code
here looks like a bug, I think, so perhaps I will submit a patch for
that too (I just did one for git ls-tree).

While concise it isn't a particularly fast way to find commits
affected by damaged trees - it is O(N^2*M), where N is the number of
commits and M is the size of the tree. As indicated in another thread,
I think bisection can potentially be O(K * log(N) * M + K*N), where K
is the number of fully connected bad subgraphs. [ by that I mean a
subgraph consisting only of commits with damaged trees).

jon.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]