On Thu, Aug 18, 2011 at 03:13:10AM -0500, Jonathan Nieder wrote: > David Aguilar wrote: > > > use the '--output' option when available. > > Yay. :) > > > --- a/mergetools/meld > > +++ b/mergetools/meld > > @@ -4,6 +4,37 @@ diff_cmd () { > > > > merge_cmd () { > > touch "$BACKUP" > > - "$merge_tool_path" "$LOCAL" "$MERGED" "$REMOTE" > > + if test "$meld_has_output_option" = true > > + then > > + "$merge_tool_path" --output "$MERGED" \ > > + "$BASE" "$LOCAL" "$REMOTE" > > Shouldn't this be "$LOCAL" "$BASE" "$REMOTE"? Yup, thanks. > > > + else > > + "$merge_tool_path" "$LOCAL" "$MERGED" "$REMOTE" > > + fi > > check_unchanged > > I wonder if the version test could be made a little simpler (perhaps > to cope better if future versions use a different numbering system): > > if "$merge_tool_path" --output /dev/null --help >/dev/null 2>&1 > then > "$merge_tool_path" --output ... > else > "$merge_tool_path" "$LOCAL" ... > fi > > Forgive my ignorance: is this function likely to be called in a loop? > If so, it makes sense to precompute or cache the result of detection, > like you already do. Yes, it is called in a loop... > check_meld_for_output_option () { > if ... > then > meld_has_output_option=true > else > meld_has_output_option=false > fi > } > > merge_cmd () { > if test -z "${meld_has_output_option:+set}" > then > check_meld_for_output_option > fi > > if test "$meld_has_output_option" = true > then > ... > > > [...] > > + # Filter meld --version to contain numbers and dots only > > + meld="$(meld --version 2>/dev/null | sed -e 's/[^0-9.]\+//g')" > > \+ is not a BRE. If parsing version numbers seems like the right > thing to do, maybe "tr -cd 0-9."? > > > + meld="${meld:-0.0.0}" > > + > > + meld_major="$(expr "$meld" : '\([0-9]\{1,\}\)' || echo 0)" > > + meld_minor="$(expr "$meld" : '[0-9]\{1,\}\.\([0-9]\{1,\}\)' || echo 0)" > > I think git avoids \{m,n\} ranges where possible (for portability). > This could be: > > meld_major=${meld%%.*} > meld_nonmajor=${meld#${meld_major}.} > meld_minor=${meld_nonmajor%%.*} > > or: > > case $meld in > [2-9].* | [1-9][0-9]* | 1.[5-9]* | 1.[1-9][0-9]*) # >= 1.5.0 > meld_has_output_option=true ;; > *) > meld_has_output_option=false ;; > esac > > It's nice how self-contained this can be now that it's in its own > file. Thanks. Right, I was using \{1,\} since that's what CodingStyle said to use instead of \+ (which I forgot to fixup above as you saw). The case statement is nice and simple enough to understand. By doing meld --output /dev/null --help we're relying on older versions blowing up with --output and --help returning exit status 0. That seems pretty reasonable. The case statement does seem sufficient but just trying --output and seeing what happens is even simpler. Your example also uses $merge_tool_path, which I forgot to do, so I'll be sure to include that too. I'll wait until tomorrow to see if there are any more comments and reroll. Thanks, -- David -- 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