Download raw body.
allow log -x to accept keywords and fix diffstat duplicates
On 2023/08/07 23:47:53 +1000, Mark Jamsek <mark@jamsek.com> wrote:
> Thanks, op! Sorry I didn't get this out last night.
not a problem at all!
> I've just added the other combinations to your diff so we test for -dPp,
> -dP, and -dp, and also added some 'log -x keyword' cases to the keywords
> regress.
>
> The diff, however, also includes quite a few log regress copypasta
> errors where I cmp(1)'d stdout{,.expected} instead of stderr! I was
> very fortunate that we are producing the correct output; the tests and
> behaviour are all correct but I failed to check that it indeed was
> right. There was also one diff keyword case with the same problem
> although the test still wrongly checked for the original BASE output,
> which I have also now fixed.
oops! sorry for not catching these while reviewing.
> I checked the many keyword tests I did around that time and it looks
> like I only committed this error repeatedly in the log tests and that
> last diff keyword test. I'm going to double check them again tomorrow
> with fresher eyes to be sure though.
>
> I will _never_ copypasta regress scripts ever again; that was equal
> parts stupid and lucky!
>
> btw, regarding log -dP, I was wondering if we should even make these
> mutually exclusive? It seems like it might be the right thing to do
> because it doesn't really make sense to ask for both as they both print
> the changed paths, just the diffstat annotates them with lines added
> and/or removed plus a summary total. It's fine as it is now the
> duplication is fixed but I was thinking about this when writing the
> test so thought I'd float the idea.
got tends to reject (partially) conflicting options instead of having
late flags overriding the previous, so declaring -d and -P conflicting
doesn't seem a bad idea to me, it would be somewhat coherent.
I don't have a strong opinion on this. For the scripting /
interactive usage it's handier to handle also (partially) conflicting
flags, so that if you alias gl='got log -P' and later use `gl -d' it
works, but to simplify the internal handling making them conflicting
also makes sense. Your call, I guess :-)
two suggestions below, it's ok op@ in any case. Thanks!
> [...]
> --- regress/cmdline/log.sh
> +++ regress/cmdline/log.sh
> @@ -896,7 +896,43 @@ EOF
> ret=$?
> if [ $ret -ne 0 ]; then
> diff -u $testroot/stdout.expected $testroot/stdout
> + test_done "$testroot" "$ret"
> + return 1
> fi
since it's quite a few copypasta we could consider use a loop to
generate all the cases, for e.g.
for flags in -d -dp -dP -dPp; do
(cd ... && got log $flags ... )
... cmp ...
done
> + # try again with -dPp
> + (cd $testroot/wt && got log -dPp | grep -A2 '^ [MDmA]' | \
> + sed '/^--/d' > $testroot/stdout)
> +
> + cmp -s $testroot/stdout.expected $testroot/stdout
> + ret=$?
> + if [ $ret -ne 0 ]; then
> + diff -u $testroot/stdout.expected $testroot/stdout
> + test_done "$testroot" "$ret"
> + return 1
> + fi
> +
> + # try again with -dP
> + (cd $testroot/wt && got log -dP | grep -A2 '^ [MDmA]' | \
> + sed '/^--/d' > $testroot/stdout)
> +
> + cmp -s $testroot/stdout.expected $testroot/stdout
> + ret=$?
> + if [ $ret -ne 0 ]; then
> + diff -u $testroot/stdout.expected $testroot/stdout
> + test_done "$testroot" "$ret"
> + return 1
> + fi
> +
> + # try again with -dp
> + (cd $testroot/wt && got log -dp | grep -A2 '^ [MDmA]' | \
> + sed '/^--/d' > $testroot/stdout)
> +
> + cmp -s $testroot/stdout.expected $testroot/stdout
> + ret=$?
> + if [ $ret -ne 0 ]; then
> + diff -u $testroot/stdout.expected $testroot/stdout
> + fi
> test_done "$testroot" "$ret"
> }
>
> @@ -944,6 +980,17 @@ test_log_commit_keywords() {
> return 1
> fi
>
> + # request same set of commits now with log -x
> + got log -r "$testroot/repo" -scmaster:- -xmaster:-15 > $testroot/stdout
not an issue, and during interactive usage i tend to join flags too,
but for readability in the regress I'd use the slightly more verbose
got log -r "$testroot/repo" -s -cmaster:- ...
there are some more instances below.
> @@ -972,6 +1019,25 @@ test_log_commit_keywords() {
> return 1
> fi
>
> + # from head to the base commit using -x
> + printf '%s %-7s commit number 16\n' "$d" "master" > \
> + $testroot/stdout.expected
> + for i in $(seq 16 9); do
> + printf '%s %.7s commit number %s\n' \
> + "$d" $(pop_idx $i $@) "$(( i-1 ))" \
not an issue but since $(pop_idx) was not quoted, $((i-1)) doesn't
need to be quoted either
(I'm not opposed to over-quoting things since how tricky word
splitting is on the bourne shell, pointed out only because pop_idx
wasn't quoted)
> + >> $testroot/stdout.expected
> + done
allow log -x to accept keywords and fix diffstat duplicates