Hi Junio & Lars, On Thu, 20 Oct 2016, Junio C Hamano wrote: > * ls/filter-process (2016-10-17) 14 commits > (merged to 'next' on 2016-10-19 at ffd0de042c) > + contrib/long-running-filter: add long running filter example > + convert: add filter.<driver>.process option > + convert: prepare filter.<driver>.process option > + convert: make apply_filter() adhere to standard Git error handling > + pkt-line: add functions to read/write flush terminated packet streams > + pkt-line: add packet_write_gently() > + pkt-line: add packet_flush_gently() > + pkt-line: add packet_write_fmt_gently() > + pkt-line: extract set_packet_header() > + pkt-line: rename packet_write() to packet_write_fmt() > + run-command: add clean_on_exit_handler > + run-command: move check_pipe() from write_or_die to run_command > + convert: modernize tests > + convert: quote filter names in error messages > > The smudge/clean filter API expect an external process is spawned > to filter the contents for each path that has a filter defined. A > new type of "process" filter API has been added to allow the first > request to run the filter for a path to spawn a single process, and > all filtering need is served by this single process for multiple > paths, reducing the process creation overhead. > > Will merge to 'master'. This breaks in Git for Windows' SDK (I only now realized that t0060 was not the only thing breaking in `next` for a while now): -- snip -- not ok 15 - required process filter should filter data # # test_config_global filter.protocol.process # "$TEST_DIRECTORY/t002 # 1/rot13-filter.pl clean smudge" && # test_config_global filter.protocol.required true && # rm -rf repo && # mkdir repo && # ( # cd repo && # git init && # # echo "git-stderr.log" >.gitignore && # echo "*.r filter=protocol" >.gitattributes && # git add . && # git commit . -m "test commit 1" && # git branch empty-branch && # # cp "$TEST_ROOT/test.o" test.r && # cp "$TEST_ROOT/test2.o" test2.r && # mkdir testsubdir && # cp "$TEST_ROOT/test3 'sq',\$x.o" "testsubdir/test3 # 'sq', # \$x.r" && # >test4-empty.r && # # S=$(file_size test.r) && # S2=$(file_size test2.r) && # S3=$(file_size "testsubdir/test3 'sq',\$x.r") && # # filter_git add . && # cat >expected.log <<-EOF && # START # init handshake complete # IN: clean test.r $S [OK] -- OUT: $S . [OK] # IN: clean test2.r $S2 [OK] -- OUT: $S2 . # [OK] # IN: clean test4-empty.r 0 [OK] -- OUT: 0 # [OK] # IN: clean testsubdir/test3 'sq',\$x.r $S3 # [OK] - # - OUT: $S3 . [OK] # STOP # EOF # test_cmp_count expected.log rot13-filter.log && # # filter_git commit . -m "test commit 2" && # cat >expected.log <<-EOF && # START # init handshake complete # IN: clean test.r $S [OK] -- OUT: $S . [OK] # IN: clean test2.r $S2 [OK] -- OUT: $S2 . # [OK] # IN: clean test4-empty.r 0 [OK] -- OUT: 0 # [OK] # IN: clean testsubdir/test3 'sq',\$x.r $S3 # [OK] - # - OUT: $S3 . [OK] # IN: clean test.r $S [OK] -- OUT: $S . [OK] # IN: clean test2.r $S2 [OK] -- OUT: $S2 . # [OK] # IN: clean test4-empty.r 0 [OK] -- OUT: 0 # [OK] # IN: clean testsubdir/test3 'sq',\$x.r $S3 # [OK] - # - OUT: $S3 . [OK] # STOP # EOF # test_cmp_count expected.log rot13-filter.log && # # rm -f test2.r "testsubdir/test3 'sq',\$x.r" && # # filter_git checkout --quiet --no-progress . && # cat >expected.log <<-EOF && # START # init handshake complete # IN: smudge test2.r $S2 [OK] -- OUT: $S2 . # [OK] # IN: smudge testsubdir/test3 'sq',\$x.r $S3 # [OK] # -- OUT: $S3 . [OK] # STOP # EOF # test_cmp_exclude_clean expected.log # rot13-filter.log && # # filter_git checkout --quiet --no-progress # empty-branch & # & # cat >expected.log <<-EOF && # START # init handshake complete # IN: clean test.r $S [OK] -- OUT: $S . [OK] # STOP # EOF # test_cmp_exclude_clean expected.log # rot13-filter.log && # # filter_git checkout --quiet --no-progress master # && # cat >expected.log <<-EOF && # START # init handshake complete # IN: smudge test.r $S [OK] -- OUT: $S . # [OK] # IN: smudge test2.r $S2 [OK] -- OUT: $S2 . # [OK] # IN: smudge test4-empty.r 0 [OK] -- OUT: 0 # [OK] # IN: smudge testsubdir/test3 'sq',\$x.r $S3 # [OK] # -- OUT: $S3 . [OK] # STOP # EOF # test_cmp_exclude_clean expected.log # rot13-filter.log && # # test_cmp_committed_rot13 "$TEST_ROOT/test.o" # test.r && # test_cmp_committed_rot13 "$TEST_ROOT/test2.o" # test2.r && # test_cmp_committed_rot13 "$TEST_ROOT/test3 # 'sq',\$x.o" " # testsubdir/test3 'sq',\$x.r" # ) # ok 16 - required process filter takes precedence not ok 17 - required process filter should be used only for "clean" operation on ly # # test_config_global filter.protocol.process # "$TEST_DIRECTORY/t002 # 1/rot13-filter.pl clean" && # rm -rf repo && # mkdir repo && # ( # cd repo && # git init && # # echo "*.r filter=protocol" >.gitattributes && # cp "$TEST_ROOT/test.o" test.r && # S=$(file_size test.r) && # # filter_git add . && # cat >expected.log <<-EOF && # START # init handshake complete # IN: clean test.r $S [OK] -- OUT: $S . [OK] # STOP # EOF # test_cmp_count expected.log rot13-filter.log && # # rm test.r && # # filter_git checkout --quiet --no-progress . && # # If the filter would be used for "smudge", too, # we woul # d see # # "IN: smudge test.r 57 [OK] -- OUT: 57 . [OK]" # here # cat >expected.log <<-EOF && # START # init handshake complete # STOP # EOF # test_cmp_exclude_clean expected.log # rot13-filter.log # ) -- snap -- Unsurprisingly, bisect identifies "convert: add filter.<driver>.process option" as the first bad commit, although it only fails on the test case 15, but not on 17. I am unfortunately still busy with trying to figure out what exactly makes t6030 hang on `pu` (seems it thinks stdin is a tty and just waits for an answer), and then trying to reduce that insane amount of time wasted on running, and waiting for, the test suite, and for unrelated reasons I'll have to go offline for the rest of the day, so I will most likely be unable to assist further with this. Sorry, Johannes