git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* git-prune-script eats data
@ 2005-06-22  0:51 Jeff Garzik
  2005-06-23  2:04 ` Linus Torvalds
  0 siblings, 1 reply; 3+ messages in thread
From: Jeff Garzik @ 2005-06-22  0:51 UTC (permalink / raw
  To: Git Mailing List


Ok, I have a reproducible case (at least for me), of git-prune-script 
munching data. I'll just give reproduction instructions (everyone 
reading this can do what I did), and some output at the end.

$ cd /repos

$ mkdir libata-dev-test/.git

$ cd libata-dev-test

$ cp -al ../linux-2.6/.git/objects .git/

$ rsync -az --verbose --delete \
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev.git/ 
  .git/		# word-wrapped from previous line

$ git-checkout-script -f

$ git-fsck-cache
dangling commit 1b142a71f3b131317489edf806abfab4c347476c
dangling commit 51a7f407d9b600e3278449a12135a21ffb0791a2
dangling commit eb93f3e7284204379444137a660b64f9dbd2ec04
dangling commit fcf604172829176bc618663e8387c8943ff88b66

NOTE:  These dangling commits are NORMAL -- stuff that really does need 
pruning.

$ git-prune-script

$ git-fsck-cache
error: cannot map sha1 file c39ae07f393806ccf406ef966e9a15afc43cc36a
bad object in tag 5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c
bad sha1 entry '5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c'

$ rsync -az --verbose --delete \
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev.git/ 
  .git/		# word-wrapped from previous line
		# this second invocation downloads a TON of objects,
		# most/all of which are in the vanilla linux-2.6 tree
		# and should not have been pruned



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: git-prune-script eats data
  2005-06-22  0:51 git-prune-script eats data Jeff Garzik
@ 2005-06-23  2:04 ` Linus Torvalds
  2005-06-23  5:25   ` Jeff Garzik
  0 siblings, 1 reply; 3+ messages in thread
From: Linus Torvalds @ 2005-06-23  2:04 UTC (permalink / raw
  To: Jeff Garzik; +Cc: Git Mailing List



On Tue, 21 Jun 2005, Jeff Garzik wrote:
> 
> $ git-prune-script
> 
> $ git-fsck-cache
> error: cannot map sha1 file c39ae07f393806ccf406ef966e9a15afc43cc36a
> bad object in tag 5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c
> bad sha1 entry '5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c'

It's exactly the same thing that Jens had. You have a tag object for the 
v2.6.11-tree thing, but you don't have the reference to the tag.

And now I realize what the problem is. It's _not_ that "git prune" has 
removed too much, like the obvious implication would be: it's that "git 
prune" has not removed _enough_.

"git prune" normally never removes tag-objects, whether reachable or not. 
That's because git-fsck-cache was explicitly ignoring them, which was 
because early on, the way you found tags was you did

	git-fsck-cache --tags

and then you created refs to them manually. 

But now that special case causes problems (and is no longer needed 
anyway), because it means that "git prune" will not remove unreachable 
tags, but it _will_ remove everything that an unreachable tag points to 
(because that is also unreachable).

So the trivial fix is to just remove the lines from fsck-cache.c that say

	/* Don't bother with tag reachability. */
	if (obj->type == tag_type)
		continue;

and that will fix it for you.

Will do.

		Linus

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: git-prune-script eats data
  2005-06-23  2:04 ` Linus Torvalds
@ 2005-06-23  5:25   ` Jeff Garzik
  0 siblings, 0 replies; 3+ messages in thread
From: Jeff Garzik @ 2005-06-23  5:25 UTC (permalink / raw
  To: Linus Torvalds; +Cc: Git Mailing List

Linus Torvalds wrote:
> And now I realize what the problem is. It's _not_ that "git prune" has 
> removed too much, like the obvious implication would be: it's that "git 
> prune" has not removed _enough_.

Makes a lot of sense.  Looking at the repo, I did indeed forget to copy 
the tags.


> So the trivial fix is to just remove the lines from fsck-cache.c that say
> 
> 	/* Don't bother with tag reachability. */
> 	if (obj->type == tag_type)
> 		continue;
> 
> and that will fix it for you.

Sounds good, thanks.


> It's exactly the same thing that Jens had. You have a tag object for the 
> v2.6.11-tree thing, but you don't have the reference to the tag.

Ref email just sent:  Kernel hackers expect tags to come with the pull. 
  Four kernel hackers, and counting.

Just accept that our brains are wired that way ;-)  We like having 
Linus-blessed-and-pushed-to-kernel.org tags from linux-2.6.git public 
tree follow us around.

	git-pull-script --tags $url

should accomplish that.

	Jeff



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2005-06-23  5:19 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-06-22  0:51 git-prune-script eats data Jeff Garzik
2005-06-23  2:04 ` Linus Torvalds
2005-06-23  5:25   ` Jeff Garzik

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).