{"thread":{"id":"8496","subject":"Re: [PATCH/RFC] filter-branch: support skipping of commits more easily","startedAt":"2007-06-08T02:11:57Z","lastAt":"2007-06-08T05:12:17Z","messageCount":2,"participants":["linux@horizon.com","Johannes Schindelin"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"44299","messageId":"20070608021157.18066.qmail@science.horizon.com","threadId":"8496","inReplyTo":null,"subject":"Re: [PATCH/RFC] filter-branch: support skipping of commits more easily","fromName":"","fromEmail":"linux@horizon.com","sentAt":"2007-06-08T02:11:57Z","receivedAt":"2007-06-08T02:11:57Z","isPatch":true,"sender":{"key":"linux@horizon.com","avatar":null},"body":"> I think that is fine; in effect, by saying \"skip\" B, you are\n> squashing B-C into C'.\n> \n> Does this mean that, given\n> \n>           C---D---E\n>          /   /\n>         A---B\n> \n> and if commit-filter says \"skip\" on D, the written history would\n> look like this?\n> \n>           C'------E'\n>          /       /\n>         A'--B'--'\n> \n> The new commit E' would become an evil merge that has difference\n> between D and E in the original history?\n> \n> I am not objecting; just trying to get a mental picture.\n\nI think, for compatibility with the existing git path limiter,\nit should delete D from the history only if:\n1) Told to skip D, and\n2) Told to skip B or C (or both).\n\nSo you could get A--B--E' or A--C--E' or even A--E', but D would only\nbe deleted if it wasn't needed as a merge marker.\n\nThat's probably a little more complex to implement, but it feels like\nThe Right Thing.\n"},{"id":"44306","messageId":"Pine.LNX.4.64.0706080605500.4059@racer.site","threadId":"8496","inReplyTo":"20070608021157.18066.qmail@science.horizon.com","subject":"Re: [PATCH/RFC] filter-branch: support skipping of commits more easily","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2007-06-08T05:12:17Z","receivedAt":"2007-06-08T05:12:17Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Fri, 7 Jun 2007, linux@horizon.com wrote:\n\n> > I think that is fine; in effect, by saying \"skip\" B, you are\n> > squashing B-C into C'.\n> > \n> > Does this mean that, given\n> > \n> >           C---D---E\n> >          /   /\n> >         A---B\n> > \n> > and if commit-filter says \"skip\" on D, the written history would\n> > look like this?\n> > \n> >           C'------E'\n> >          /       /\n> >         A'--B'--'\n> > \n> > The new commit E' would become an evil merge that has difference\n> > between D and E in the original history?\n> > \n> > I am not objecting; just trying to get a mental picture.\n> \n> I think, for compatibility with the existing git path limiter,\n> it should delete D from the history only if:\n> 1) Told to skip D, and\n> 2) Told to skip B or C (or both).\n> \n> So you could get A--B--E' or A--C--E' or even A--E', but D would only\n> be deleted if it wasn't needed as a merge marker.\n> \n> That's probably a little more complex to implement, but it feels like\n> The Right Thing.\n\n... but if that script should do that, the name \"filter\"-branch was a \nmisnomer.\n\nIt filters the _branch_. In the sense that a branch is one or more perls \nof commits, uniting in the tip of that branch.\n\nIf you want to skip a commit, that is fine. But a commit is _not_ a patch, \nno sir. It is a revision.\n\nThe fact that we actually are able to extract nice patches from any patch \nseries, does not mean that the revisions are actually only deltas with \nregard to the previous commit. To the contrary: we actually allow -- and \nencourage -- git-diff between different revisions, be they on the same \nbranch or not. That alone should tell everybody that a revision is a \nrevision is a revision, and _not_ a delta.\n\nSo, when you filter commits, you should not expect a certain _patch_ to be \nskipped when you say \"skip\" (or maybe \"squash\", which I actually like \nbetter, because it is as unambiguous as you get it), but a _commit_ (AKA \nrevision) to be skipped.\n\nCiao,\nDscho\n"}]}