Re: What's cooking in git.git (Jun 2010, #04; Wed, 23)
- From
Finn Arne Gangstad <finnag@pvv.org>
- Date
- Jun 25, 2010, 07:46 UTC
- Message-ID
- <20100625074623.GA4734@pvv.org>
- In-Reply-To
- <7veifwchb6.fsf@alter.siamese.dyndns.org>
On Thu, Jun 24, 2010 at 01:21:49PM -0700, Junio C Hamano wrote:
Show 6 quoted lines
> > > > If .gitattributes is different on the different sides, or if you > > enable autocrlf, the current repo contents may change after > > git-to-worktree and worktree-to-git again. > > IOW, g2w-then-w2g may not be an identity function.
Absolutely, pretty much by definition this cannot be the case (and is not the case for any of the built-in filters like eol, autocrlf, ident), since you have no control of what you have in the repository before you enable the filter.
What we assume though is that g2w(g2w(x)) == g2w(x). I think it is very hard to come up with a reasonable case for a filter where that is not the case.
> If we were to encourage use of this codepath to wider audiences, we may > need to have a document for people who write smudge/clean filters. In > order for the result to be stable, applying g2w-then-w2g once again on top > of the result of running g2w-then-w2g on anything should be no-op, no?
This _has_ to work, otherwise you would get dirty contents after a checkout, and that would be horrible.
So, the follolwing should be true:
g2w(x) == g2w(g2w(x)) A -> g2w() -> B -> g2w() -> B ...
w2g(g2w(x)) == w2g(g2w(w2g(g2w(x)))) X -> g2w() -> w2g() -> Y -> g2w() -> w2g() -> Y ...
Running w2g() twice should also be the same as running it once. I thought nothing in git required it as such, but in the case of a missing smudge filter git will call w2g() on something that is already cleaned. I think the clean/smudge guidelines should be:
"Both clean and smudge filters should be idempotent; running them multiple times should not alter the contents further."
- Finn Arne