On Tue, Oct 11, 2016 at 10:11:22AM +0200, Lars Schneider wrote:
>
> > On 10 Oct 2016, at 21:58, Junio C Hamano <[email protected]> wrote:
> >
> > [email protected] writes:
> >
> > [...]
> >> +# Count unique lines except clean invocations in two files and compare
> >> +# them. Clean invocations are not counted because their number can vary.
> >> +# c.f.
> >> http://public-inbox.org/git/[email protected]/
> >> +test_cmp_count_except_clean () {
> >> + for FILE in $@
> >> + do
> >> + sort $FILE | uniq -c | sed "s/^[ ]*//" |
> >> + sed "s/^\([0-9]\) IN: clean/x IN: clean/" >$FILE.tmp
> >> + cat $FILE.tmp >$FILE
> >> + done &&
> >> + test_cmp $@
> >> +}
> >
> > Why do you even _care_ about the number of invocations? While I
> > told you why "clean" could be called multiple times under racy Git
> > as an example, that was not meant to be an exhaustive example. I
> > wouldn't be surprised if we needed to run smudge twice, for example,
> > in some weirdly racy cases in the future.
> >
> > Can we just have the correctness (i.e. "we expect that the working
> > tree file gets this as the result of checking it out, and we made
> > sure that is the case") test without getting into such an
> > implementation detail?
>
> My goal is to check that clean/smudge is invoked at least once. I could
> just run `uniq` to achieve that but then all other filter commands could
> happen multiple times and the test would not detect that.
>
> I also prefer to check the filter commands to ensure the filter is
> working as expected (e.g. no multiple start ups etc) in addition to
> checking the working tree.
>
> Would the patch below work for you? If yes, then please squash it into
> "convert: add filter.<driver>.process option".
>
> Thank you,
> Lars
>
>
>
> diff --git a/t/t0021-conversion.sh b/t/t0021-conversion.sh
> index 9f892c0..714f706 100755
> --- a/t/t0021-conversion.sh
> +++ b/t/t0021-conversion.sh
> @@ -31,38 +31,33 @@ filter_git () {
> rm -f git-stderr.log
> }
>
> -# Count unique lines in two files and compare them.
> -test_cmp_count () {
> - for FILE in $@
> - do
> - sort $FILE | uniq -c | sed "s/^[ ]*//" >$FILE.tmp
> - cat $FILE.tmp >$FILE
> - done &&
> - test_cmp $@
> -}
> -
> -# Count unique lines except clean invocations in two files and compare
> -# them. Clean invocations are not counted because their number can vary.
> +# Compare two files and ensure that `clean` and `smudge` respectively are
> +# called at least once if specified in the `expect` file. The actual
> +# invocation count is not relevant because their number can vary.
> # c.f.
> http://public-inbox.org/git/[email protected]/
> -test_cmp_count_except_clean () {
> - for FILE in $@
> +test_cmp_count () {
> + expect=$1 actual=$2
That could be
expect="$1"
actual="$2"
> + for FILE in "$expect" "$actual"
> do
> + sort "$FILE" | uniq -c | sed "s/^[ ]*//" |
> + sed "s/^\([0-9]\) IN: clean/x IN: clean/" |
> + sed "s/^\([0-9]\) IN: smudge/x IN: smudge/"
> >"$FILE.tmp" &&
> + cat "$FILE.tmp" >"$FILE"
How about
cp "$FILE.tmp" "$FILE"