> > +# Converts bytes into their hexadecimal representation. For example, > > +# "printf 'ab\r\n' | hex_unpack" results in '61620d0a'. > > +hex_unpack () { > > + perl -e '$/ = undef; $input = <>; print unpack("H2" x length($input), $input)' > > +} > > + > > +# Inserts $1 at the start of the string and every 2 characters thereafter. > > +intersperse () { > > + sed 's/\(..\)/'$1'\1/g' > > +} > > + > > +# Create a one-time-sed command to replace the existing packfile with $1. > > +replace_packfile () { > > + # The protocol requires that the packfile be sent in sideband 1, hence > > + # the extra \x01 byte at the beginning. > > + printf "1,/packfile/!c %04x\\\\x01%s0000" \ > > + "$(($(wc -c <$1) + 5))" \ > > + "$(hex_unpack <$1 | intersperse '\\x')" \ > > + >"$HTTPD_ROOT_PATH/one-time-sed" > > } > > Urgh. This is not a problem *this* patch introduces, but why on Earth do > we have to do complicated computations in shell code using an unholy mix > of complex sed and Perl invocations, making things fragile and slow? We do > have such a nice facility is the t/test-tool helper... This might be a good #leftoverbits. I'm not sure which part you think needs to be replaced - maybe the thing that goes into one-time-sed? > The refactoring itself looks correct to me, of course. Thanks, and thanks for taking a look at this.