On Fri, Sep 02, 2016 at 03:36:58PM +0100, Beau Martinez wrote:
> I'd like to inquire as to why `git add -p` can only split hunks so
> much. The limit is too large; why can't you split until each hunk is
> only a line? I often have to run `edit` and split them manually
There's some previous discussion in this thread:
and further back, this message:
I think one problem is that in a given contiguous hunk, not all of the
lines are independent, because edits are represented as a pair of -/+
lines. E.g., if the preimage is:
and the postimage is:
your diff will be:
The ideal split is two groups:
So you could possibly achieve that by specifying the exact line to split
at. But let's imagine "two" was the missing item, and we modified
"three". Then your diff is:
Now the related lines are non-adjacent! I don't think there's a general
solution, and of course it can get arbitrarily complicated, with many
interleaved pairs. I don't think we can rely on figuring out which lines
form a pair. In this toy example it's obvious, but in real diffs the
lines might not bear any resemblance.
Splitting to single lines means you need to remember to add the matched
pairs, which might be arbitrarily far apart. That's not really any
different than dumping the hunk in your editor, but I find there that
it's easy to rearrange and group things as appropriate.
> I'd like to contribute a patch to change it, although my C is rusty.
> Are there resources that will help me to do this?
The good news (or maybe the bad) is that "add -p" is implemented
entirely in Perl. :) It's in git-add--interactive.perl.