On Fri, Mar 18, 2016 at 11:51 AM, Durham Goode <dur...@fb.com> wrote: > On 3/17/16 4:49 PM, Junio C Hamano wrote: >> >> Thanks for these 5 patches, two of which need to be discarded ;-). >> I think you can pick either one of 1/2, pick the one that says >> "non-NULL" (as opposed to "something") in the log message for 2/2. >> >> Durham, does it fix your issues if you apply the 1/2 and 2/2 (but >> not 3/2) on top of 2.8-rc? >> >> Duy, how comfortable are you with the idea of including this two in >> 2.8 final? We have long passed the final -rc, and while it is >> probably OK to prolong the cycle and do another -rc, we cannot keep >> going like "oops, there is another thing discovered by somebod new" >> forever. >> >> Thanks. > > Patches 1+2 fix the repro steps in the report, yes. But I've found another > case that produces different results in 2.8 than in 2.7: > > Given a repo with files: > > dir1/dir2/show/file > dir1/dir2/hide/file > > and a sparse-checkout of > > /* > /dir1/dir2/show > !/dir1/dir2/
I would say this is "undefined behavior" patterns. The intention of "!" pattern is to revert a subset of a matched pattern, e.g. !/dir1/dir2/show/something. Combining lines 2 and 3 together, "!dir1/dir2/" is not only supposed to revert dir1/dir2/show entirely, but extend the reversion outside of it. At least to me that's not intended. Skipping that tricky pair, the pairs "/*" and "!/dir1/dir2/" means "exclude everything except dir1/dir2" (in .gitignore sense) or "include everything except dir1/dir2" in sparse checkout sense. Which results in empty worktree. 1+2 trips when the trailing slash in the last rule exists and includes both files in show/hide. Patch 3/2 fixes the tripping and exclude both. If the last rule is "!/dir1/dir2" then 1+2 results in empty worktree as well. If I swap the last two rules, then it behaves the way we expect, dir1/dir2/show stays, dir1/dir2/hide is gone (again, the trailing "/" in !dir1/dir2/ requires patch 3/2). v2.7.3 differs in the way "!" is handled. It does extend reversion outside dir1/dir2/show, back to dir1/dir2. While 2.8+1+2 recognizes and follows the "/*" and "!dir1/dir2/" pair. The way I interpreted the rules above, though, may be because I'm just trying to defend the current code. Junio, your call on whether to revert this whole patch series. > the working copy still contains dir1/dir2/hide/file when run from 2.8.0-rc2. > In git 2.6 and 2.7.3 it does not show up (which is the expected behavior, > from what I understand of the docs). Repro script is below. Notice, the > 'dir2/' part of the paths is important. If I drop that directory, the issue > doesn't repro. -- Duy -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html