Re: [PATCH v3 1/9] t5520: fixup file contents comparisons

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Junio,

On Sat, May 16, 2015 at 2:37 AM, Junio C Hamano <gitster@xxxxxxxxx> wrote:
> Just to avoid misunderstanding, please do not remove 'verbose '
> blindly without thinking while doing so, as you already did 1/3 of
> the necessary job to make things better.

Eh? I thought we established that using "verbose" does not provide
anything more than what "set -x" already provides. So at the very
least, its use should be removed completely.

Here is my understanding of the current situation, please correct me
if I am wrong:

When a test fails, it would be useful to know the exact, unexpanded,
unsubstituted command which failed (additionally with a nice stack
trace and line numbers). However, the output of -v and -x (and by
extension, the "verbose" function) is not very helpful, as it still
requires the debugger to understand the test script.

-v will print out the stdout and stderr of the executed commands, but
it requires the debugger to match up the output of the commands with
the test script to understand where the test failed. It is also not
very helpful in the case of "test", which does not print anything when
it fails.

-x will trace the commands being executed, but the tracing output is
so verbose it still requires the debugger to understand the test
script. e.g:

     test "$(cat file)" "expected"

If the above test fails (e.g. the content of the file is
"unexpected"), the tracing output will be:

     + cat file
     + test unexpected = expected
     error: last command exited with $?=1

Furthermore, the format of the tracing output is not specified by
POSIX, so we can't count on it being consistent among all shells (e.g.
for users who submit bug reports with the test output)

> You might have noticed, while adding them, there were something
> common that we currently do with a bare 'test' only because we
> haven't identified common needs.  As I already said, it may be that
> we often try to see a file has a known single line content (I didn't
> check if that were the case; I am just giving you an example) and
> only because there is no ready-made test_file_contents helper to be
> used, the current tests say
>
>         test expected_string = "$(cat file)"
>
> And if that were the case, it is a good thing to have a new helper
> like this
>
>         test_file_contents () {
>                 if test "$(cat "$1")" != "$2"
>                 then
>                         echo "Contents of file '$1' is not '$2'"
>                         false
>                 fi
>         }
>
> in t/test-lib-functions.sh and convert them to say
>
>         test_file_contents file expected_string
>
> That would be an improvement (and that is the remaining 2/3 ;-).

Yeah, this kind of comparison with file contents is something that is
done often in t5520, so I agree with adding it.

However, what about these kind of tests:

     test new = "$(git show HEAD:file2)"

or these:

     test $(git rev-parse HEAD^2) = $(git rev-parse keep-merge)

So, perhaps we could introduce a generic function like:

    # Compares that the output of $1 eval'ed is identical to $2.
    test_output () {
        output=$(eval $1)
        if "$output" != "$2"
        then
             echo >&2 "Output of '$1' ('$output') != '$2'"
             false
        fi
    }

So the first example would be:

    test_output "git show HEAD:file2" new

And the error output will thus be:

     Output of 'git show HEAD:file2' ('some unexpected output') != 'new'

So we know the exact comparison that failed, and we know how the
expected and actual output differs.

What do you think?

Thanks,
Paul
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]