git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Michael Stefaniuc <mstefani@redhat.com>
Cc: Nicolas Pitre <nico@cam.org>, git@vger.kernel.org
Subject: Re: [PATCH] git-am: Run git gc only once and not for every patch.
Date: Fri, 04 Jan 2008 14:00:50 -0800	[thread overview]
Message-ID: <7vmyrli73h.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: <477EA06A.5090606@redhat.com> (Michael Stefaniuc's message of "Fri, 04 Jan 2008 22:08:58 +0100")

Michael Stefaniuc <mstefani@redhat.com> writes:

>> What Nico said.
> Not sure if you read my reply to Nico but the reflog is not there for
> deleted branches. Nor for a cleared stash. Common operations where one
> can loose work by mistake.

I am sure you read what Nico pointed out about HEAD reflog.

> Nevertheless is there a reason why git gc needs to run after applying
> each patch in git-am? Why can't it run just once at the end? git prune
> is optional and there's no reason to penalize a user that doesn't feel
> safe to run it by cluttering the output of git am/rebase. There is also
> a time penalty: git gc --auto on a pruned tree runs so fast that it
> isn't measurable but on my unpruned wine it took 1.5 seconds. Waiting
> 1.5 seconds per am/rebase is acceptable; wasting 1.5 seconds per patch
> in the mailbox/rebase isn't that much fun if there are more than a
> handful of patches to apply.

"Optional" does not mean "whether you do it or not you will see
identical behaviour".  Not pruning may slow things down but you
may still choose not to prune and suffer the penalty --- that's
your choice.  But we still produce the correct result (hopefully
;-) --- and that is what "Optional" means.

The message from "gc --auto" may serve as a coalmine canary for
you to know when to prune.

I do not think moving "gc --auto" outside the loop hurts in
practice because you are not likely to be rebasing a truly huge
series every day, but cruft can accumulate during "git am" run
and the "gc --auto" inside loop was meant to clean them up.  The
idea was taken from importers that run repack every once in a
while (e.g. cvsimport runs every 1k commits), but "gc --auto"
was designed to be much more lightweight than a full repack and
that was the reason it was placed in the loop without counting
"every N commits".

  reply	other threads:[~2008-01-04 22:01 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-04 18:59 [PATCH] git-am: Run git gc only once and not for every patch Michael Stefaniuc
2008-01-04 19:38 ` Nicolas Pitre
2008-01-04 20:21   ` Michael Stefaniuc
2008-01-04 20:58     ` Nicolas Pitre
2008-01-04 20:38   ` Junio C Hamano
2008-01-04 21:08     ` Michael Stefaniuc
2008-01-04 22:00       ` Junio C Hamano [this message]
2008-01-05  6:55         ` Junio C Hamano
2008-01-05 16:23           ` Michael Stefaniuc

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7vmyrli73h.fsf@gitster.siamese.dyndns.org \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=mstefani@redhat.com \
    --cc=nico@cam.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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 NNTP newsgroup(s).