Hi, On Thu, 29 Mar 2018, Jeff King wrote: > On Thu, Mar 29, 2018 at 11:15:33AM -0700, Stefan Beller wrote: > > > > When calling `git config --unset abc.a` on this file, it leaves this > > > (invalid) config behind: > > > > > > [ > > > [xyz] > > > key = value > > > > > > The reason is that we try to search for the beginning of the line (or > > > for the end of the preceding section header on the same line) that > > > defines abc.a, but as an optimization, we subtract 2 from the offset > > > pointing just after the definition before we call > > > find_beginning_of_line(). That function, however, *also* performs that > > > optimization and promptly fails to find the section header correctly. > > > > This commit message would be more convincing if we had it in test form. > > I agree a test might be nice. But I don't find the commit message > unconvincing at all. It explains pretty clearly why the bug occurs, and > you can verify it by looking at find_beginning_of_line. > > > [abc]a > > > > is not written by Git, but would be written from an outside tool or person > > and we barely cope with it? > > Yes, I don't think git would ever write onto the same line. But clearly > we should handle anything that's syntactically valid. I was tempted to add the test case, because it is easy to test it. But I then decided *not* to add it. Why? Testing is a balance between "can do" and "need to do". Can you imagine that I did *not* run the entire test suite before submitting this patch series, because it takes an incredible *90 minutes* to run *on a fast Windows machine*? Seriously, this is hurting me. I do not complain about this due to some mental illness forcing me to do it. I complain about this so often *because it slows me down*, you gentle people. And you don't seem to care, at least the test suite gets noticably worse by the month. I frankly do not know what to do about this, as you keep adding and adding and it gets less and less feasible for me to run the full test suite. I seem to be totally unable to get through to you with the message that this is a real problem with a real need to get fixed. So with this in mind, I do not want to add a test case for a concocted example that won't affect anybody except users who *want* to trigger this bug. I hope you agree, Dscho P.S.: Of course I ran the entire test suite. Not on Windows, but in a Linux VM, because Linux is what Git is fine-tuned for, most obviously so. An alien digging up ancient Earth history in the far future might be tempted to assume that Git was developed to develop Linux which was developed to develop Git, and then ask herself why humans bothered at all. I actually ran the entire test suite on Linux on every single patch, via `git rebase -x "make -j15 DEVELOPER=1 test" @{u}`, as I usually do before submitting a patch series. And it *did* find an obscure bug in an earlier iteration, where t5512-ls-remote.sh demonstrated that looking at only one entry at a time is not enough: `git config --unset-all uploadpack.hiderefs` *also* needs to remove the now-empty section, because we might end up with the empty sections in the wrong order, and the order of [transfer] and [uploadpack] *matters* if the transfer.hiderefs setting is negative and the uploadpack.hiderefs setting is positive, as is the case in 'overrides work between mixed transfer/upload-pack hideRefs'. (Side-note: this looks like a pretty obvious design bug to me, as there is *no tooling* to switch around the order of these settings. Even worse: if somebody gets instructions to add those settings, and there is already a [transfer] section in the config: you're out of luck! You will have to *know* that the order matters, *and add a second [transfer] section manually*!)