git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Forcing GC to always fail

From
Elijah Newren <newren@gmail.com>
Date
Nov 28, 2018, 01:55 UTC
Message-ID
<CABPp-BFBLKU5jnpr7scXJdj==qNtHJZ8R+LLMRE7qXT47eXXDg@mail.gmail.com>
In-Reply-To
<87d0qqysay.fsf@evledraar.gmail.com>

On Tue, Nov 27, 2018 at 4:16 PM Ævar Arnfjörð Bjarmason <avarab@gmail.com> wrote:

Show 37 quoted lines
>
> On Wed, Nov 28 2018, Bryan Turner wrote:
>
> > On Tue, Nov 27, 2018 at 3:47 PM Ævar Arnfjörð Bjarmason
> > <avarab@gmail.com> wrote:
> >>
> >> On Tue, Nov 27 2018, Bryan Turner wrote:
> >>
> >> >
> >> > Is there anything I can set, perhaps some invalid configuration
> >> > option/value, that will make "git gc" (most important) and "git
> >> > reflog" (ideal, but less important) fail when they're run in our
> >> > repositories? Hopefully at that point customers will reach out to us
> >> > for help _before_ they corrupt their repositories.
> >>
> >>     $ stahp='Bryan.Turner.will.hunt.you.down.if.you.manually.run.gc' && git -c gc.pruneExpire=$stahp gc; git -c gc.reflogExpire=$stahp reflog expire
> >>     error: Invalid gc.pruneexpire: 'Bryan.Turner.will.hunt.you.down.if.you.manually.run.gc'
> >>     fatal: unable to parse 'gc.pruneexpire' from command-line config
> >>     error: 'Bryan.Turner.will.hunt.you.down.if.you.manually.run.gc' for 'gc.reflogexpire' is not a valid timestamp
> >>     fatal: unable to parse 'gc.reflogexpire' from command-line config
> >
> > Thanks for that! It looks like that does block both "git gc" and "git
> > reflog expire" without blocking "git pack-refs", "git repack" or "git
> > prune". Fantastic! The fact that it shows the invalid value means it
> > might also be possible to at least provide a useful hint that manual
> > GC is not safe.
> >
> > I appreciate your help, Ævar.
>
> No problem. I was going to add that you can set
> e.g. pack.windowMemory='some.message' to make this go for git-repack
> too, but it sounds like you don't want that.
>
> Is there a reason for why BitBucket isn't using 'git-gc'? Some other
> hosting providers use it, and if you don't run it with "expire now" or
> similarly aggressive non-default values on an active repository it won't
> corrupt anything.

...assuming no other repo has this one as an alternate, which I suspect is the issue at play. (I wrote an alternate-aware gc script years ago when using Atlassian Stash to try to workaround this issue, but think I only used it for a couple repos and never got around to deploying it in prod for continuous use, probably worried I had missed a corner case. Had meant to, but at some point the powers that be decided to push us toward a different repository manager tool, and I've long since forgotten most details.)

Previous: Ævar Arnfjörð BjarmasonNext: Bryan Turner
Message 5 of 8 in “Forcing GC to always fail”
  1. Bryan TurnerNov 27, 2018
  2. Ævar Arnfjörð BjarmasonNov 27, 2018
  3. Bryan TurnerNov 28, 2018
  4. Ævar Arnfjörð BjarmasonNov 28, 2018
  5. Elijah NewrenNov 28, 2018
  6. Bryan TurnerNov 28, 2018
  7. Junio C HamanoNov 29, 2018
  8. Bryan TurnerNov 29, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.