threads / discuss / 36076

Testing for commit reachability through plumbing commands

Subject: Testing for commit reachability through plumbing commands

## tl;dr

4 messages between Mar 6, 2014 and Mar 6, 2014.

replies: 3people: 3as markdown or json

Martin Langhoff· Mar 6, 2014, 17:17 UTC · lore

I have a shell script that trims old history on a cronjob. This is for a repo that is used to track reports that have limited "life" (like logs). Old history is trimmed with grafts pointing to an empty "root" commit.

Right now, info/graft grows unbound. I am looking for a way to trim unreachable grafts, I would like to be able to say something like:

 git is-reachable treeish

Grepping through docs and existing code hasn't helped, but perhaps I'm missing something obvious...

This repository has a couple hundred branches (one per server tracked). For a single branch, I can picture a relatively easy approach with git merge-base.

thanks!
m
-- 
 martin.langhoff@gmail.com
 -  ask interesting questions
 - don't get distracted with shiny stuff  - working code first
 ~ http://docs.moodle.org/en/User:Martin_Langhoff
Andreas Schwab· Mar 6, 2014, 19:17 UTC · re: Martin Langhoff · lore

Re: Testing for commit reachability through plumbing commands

Martin Langhoff <martin.langhoff@gmail.com> writes:
Show 12 quoted lines
> I have a shell script that trims old history on a cronjob. This is for
> a repo that is used to track reports that have limited "life" (like
> logs). Old history is trimmed with grafts pointing to an empty "root"
> commit.
>
> Right now, info/graft grows unbound. I am looking for a way to trim
> unreachable grafts, I would like to be able to say something like:
>
>  git is-reachable treeish
>
> Grepping through docs and existing code hasn't helped, but perhaps I'm
> missing something obvious...
Does git fsck --unreachable --no-reflogs help?
Andreas.
-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."
Martin Langhoff· Mar 6, 2014, 19:29 UTC · re: Andreas Schwab · lore

Re: Testing for commit reachability through plumbing commands

On Thu, Mar 6, 2014 at 2:17 PM, Andreas Schwab <schwab@linux-m68k.org> wrote:
> Does git fsck --unreachable --no-reflogs help?
Well, my script, called regularly, does:
 - adds grafts
 - git repack -AFfd (which unpacks unreachable objects)
 - git prune --expire now

.... hmm, I guess could prune the grafts using git fsck --unreachable --no-reflogs before pruning the objects themselves.

we'll find out if it works :-)
m
-- 
 martin.langhoff@gmail.com
 -  ask interesting questions
 - don't get distracted with shiny stuff  - working code first
 ~ http://docs.moodle.org/en/User:Martin_Langhoff
Jeff King· Mar 6, 2014, 20:23 UTC · re: Martin Langhoff · lore

Re: Testing for commit reachability through plumbing commands

On Thu, Mar 06, 2014 at 12:17:34PM -0500, Martin Langhoff wrote:
Show 9 quoted lines
> I have a shell script that trims old history on a cronjob. This is for
> a repo that is used to track reports that have limited "life" (like
> logs). Old history is trimmed with grafts pointing to an empty "root"
> commit.
> 
> Right now, info/graft grows unbound. I am looking for a way to trim
> unreachable grafts, I would like to be able to say something like:
> 
>  git is-reachable treeish
How about:
    git rev-list --objects --all |
    cut -d' ' -f1 |
    grep $(git rev-parse treeish)

Add "--reflog" to the rev-list invocation if you want to catch things referenced by the reflog, too.

If you're looking for a commit, you can drop the "--objects", and it will run much faster.

-Peff

← back to recent threads