Daniel Shahaf wrote on Wed, Sep 23, 2015 at 13:07:31 +0000: > Julian Foad wrote on Tue, Sep 22, 2015 at 12:54:58 +0200: > > Daniel Shahaf wrote: > > > Johan Corveleyn wrote: > > >> [...], revision N-1 contains a real > > >> change, but only a short log message; and revision N has a no-op > > >> change to that same path, and a very informative log message [...] > > > > > > The FreeBSD project used to intentionally make no-op commits (they term it > > > "forced commits") as part of their new committer workflow. I don't know > > > whether they still do that. > > > > We need to be careful with terminology. We're not talking about a > > no-op commit, we're talking about a path that is marked as 'changed' > > within a commit, but whose content did not change. (The same commit > > might or might not also contain other paths that have real changes.) > > > > Yes, that is what I was referring to. > > > In fact, I think one of the first things we need to do is a precise > > analysis of the issue: > > > > * What exactly are the existing possible forms of 'no-op change' > > that any part of Subversion can represent? > > - Text-change? > > There's another hair to split here: a "no-op text change" can take two > forms: either an _empty_ delta — that is, an svndiff stream with no > windows — or a non-empty delta that, when applied to the source file, > produces the source file again. > > The former is conceptually > --- iota > +++ iota > [no hunks] > > The latter is conceptually > --- iota > +++ iota > @@ -1 +1 @@ > -This is the file 'iota'. > +This is the file 'iota'. >
Both of these are semantically equivalent, of course. My point is that we can't _detect_ no-op changes by looking for "an svndiff stream with no windows", since such a test wouldn't catch all no-op changes: it would be 100% specific but not 100% sensitive. Cheers, Daniel > (saying "conceptually" because text deltas are _not_ unidiffs) > > Cheers, > > Daniel > > > - Props-change? > > - Whole-node-change? > > - Commit? (not so interesting in the current issue) > > - Only certain combinations of those? > > > > * At which APIs can each those changes be (a) made and (b) seen? > > - FS API? > > - Repos API? > > - RA and client-side APIs? > > - svnadmin dump/load? > > - svnrdump dump/load? > > - svnsync? > > > > - Julian