threads / discuss / 46648

Best way to check whether working tree matches a commit's tree

Subject: Best way to check whether working tree matches a commit's tree

## tl;dr

3 messages between Aug 22, 2017 and Aug 22, 2017.

replies: 2people: 2as markdown or json

Sebastian Schuberth· Aug 22, 2017, 18:00 UTC · lore
Hi,
I'd like to check whether my working tree exactly matches the tree of a given commit. That is, there should not be any untracked, staged or modified files (including ignored files).
Currently, I'm doing this in two steps:
- check for success and empty output of "git status --ignored --porcelain"
- check that the output of "git rev-parse HEAD" matches the given commit
While this works, it feels sub-optimal. Is there a better / smarter way?
-- 
Sebastian Schuberth
Junio C Hamano· Aug 22, 2017, 19:34 UTC · re: Sebastian Schuberth · lore

Re: Best way to check whether working tree matches a commit's tree

Sebastian Schuberth <sschuberth@gmail.com> writes:
Show 10 quoted lines
> Hi,
>
> I'd like to check whether my working tree exactly matches the tree of a given commit. That is, there should not be any untracked, staged or modified files (including ignored files).
>
> Currently, I'm doing this in two steps:
>
> - check for success and empty output of "git status --ignored --porcelain"
> - check that the output of "git rev-parse HEAD" matches the given commit
>
> While this works, it feels sub-optimal. Is there a better / smarter way?

I do not think so; you want three things to match and you have a way to compare two things at a time.

By the way, I think your second check should compare
	rev-parse HEAD^{tree} $that_commit^{tree}
as you are checking if the tree exactly matches.
Sebastian Schuberth· Aug 22, 2017, 20:08 UTC · re: Junio C Hamano · lore

Re: Best way to check whether working tree matches a commit's tree

On Tue, Aug 22, 2017 at 9:34 PM, Junio C Hamano <gitster@pobox.com> wrote:
>> While this works, it feels sub-optimal. Is there a better / smarter way?
>
> I do not think so; you want three things to match and you have a way
> to compare two things at a time.

Right. I was just thinking if there's a lesser known command like "git diff --no-index", but instead of taking two paths, take just one path and a commit.

Show 5 quoted lines
> By the way, I think your second check should compare
>
>         rev-parse HEAD^{tree} $that_commit^{tree}
>
> as you are checking if the tree exactly matches.

In fact, I was considering to use "git diff HEAD $that_commit" as I don't really care whether the SHA1s are equal, but just about the file contents / tree.

-- 
Sebastian Schuberth

← back to recent threads