• J
    add--interactive.perl: specify --no-color explicitly · 1c6ffb54
    Jeff King 提交于
    Our color tests of "git add -p" do something a bit different from how a
    normal user would behave: we pretend there's a pager in use, so that Git
    thinks it's OK to write color to a non-tty stdout.  This comes from
    8539b465 (t3701: avoid depending on the TTY prerequisite, 2019-12-06),
    which allows us to avoid a lot of complicated mock-tty code.
    
    However, those environment variables also make their way down to
    sub-processes of add--interactive, including the "diff-files" we run to
    generate the patches. As a result, it thinks it should output color,
    too. So in t3701.50, for example, the machine-readable version of the
    diff we get unexpectedly has color in it. We fail to parse it as a diff
    and think there are zero hunks.
    
    The test does still pass, though, because even with zero hunks we'll
    dump the diff header (and we consider those unparseable bits to be part
    of the header!), and so the output still has the expected color codes in
    it. We don't notice that the command was totally broken and failed to
    apply anything.
    
    And in fact we're not really testing what we think we are about the
    color, either. While add--interactive does correctly show the version we
    got from running "diff-files --color", we'd also pass the test if we had
    accidentally shown the machine-readable version, too, since it
    (erroneously) has color codes in it.
    
    One could argue that the test isn't very realistic; it's setting up this
    "pretend there's a pager" situation to get around the tty restrictions
    of the test environment. So one option would be to move back towards
    using a real tty. But the behavior of add--interactive really is
    user-visible here. If a user, for whatever reason, did run "git
    --paginate add --patch" (perhaps because their pager is really a filter
    or something), the command would totally fail to do anything useful.
    
    Since we know that we don't want color in this output, let's just make
    add--interactive more defensive, and say "--no-color" explicitly. It
    doesn't hurt anything in the common case, but it fixes this odd case and
    lets our test function properly again.
    
    Note that the C builtin run_add_p() already passes --no-color, so it
    doesn't need a similar fix. That will eventually replace this perl code
    anyway, but the test change here will be valuable for ensuring that.
    Signed-off-by: NJeff King <peff@peff.net>
    Acked-by: NJohannes Schindelin <johannes.schindelin@gmx.de>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    1c6ffb54
git-add--interactive.perl 46.0 KB