On Wed, Jul 27, 2016 at 11:14:28AM +0100, Luis Gutierrez wrote: > Hi, > > Attached is a potential patch for reversing the order on which > git-mergetool presents the files to merge. > > Currently, when running git-mergetool, it performs a sort of the files > to merge by alphabetical ordering. When working on C, this has the > annoying effect of presenting the merge for a .c* files before the > header files; which is always a bit harder to do. Reading the header > first to figure out what the other dude changed is usually preferred. > > The attach patch reverse the order (-r flag to sort) so *.h* are > merged before *.c* files > > PS, given the simplicity of the patch, I have not tested it. > > Regards > > Luis Thanks for the sug, this is an interesting idea and I definitely see why we would want something like this... > diff --git a/git-mergetool.sh b/git-mergetool.sh > index bf86270..cce3b0d 100755 > --- a/git-mergetool.sh > +++ b/git-mergetool.sh > @@ -453,10 +453,10 @@ then > then > files=$(git rerere remaining) > else > - files=$(git ls-files -u | sed -e 's/^[^ ]* //' | sort -u) > + files=$(git ls-files -u | sed -e 's/^[^ ]* //' | sort -u -r) > fi > else > - files=$(git ls-files -u -- "$@" | sed -e 's/^[^ ]* //' | sort -u) > + files=$(git ls-files -u -- "$@" | sed -e 's/^[^ ]* //' | sort -u -r) > fi > > if test -z "$files" While we won't take this patch as-is (please see Documentation/SubmittingPatches for details about the patch submission process), I am interested in the use case you've described. This use case makes me wonder whether the sorting we do here is something that should be opened up a bit so that the it's not quite so set in stone. For example, an extension to the approach taken by this patch would be to have `mergetool.reverseOrder` git config boolean option that would tell us whether or not to use the "-r" flag when calling sort. But, IMO that is too rigid, and only addresses this narrow use case. What if users want a case-insensitive sort, or some other preferred ordering? We can address these concerns, and your use case, by opening it up. Something like, sort=$(git config mergetool.sort || echo sort -u) That preserves the existing behavior, and it opens it up so that we can accomplish the same result as this patch by doing: git config mergetool.sort "sort -u -r" Then, if someone later writes a nicer C/C++-specific sort that sorts in the natural order but also keeps .h files before .c, .cpp, etc. files with the same basename, then they could do: git config mergetool.sort crescent-fresh-sort ...and it'll be totally crescent. Thoughts? Would you be interested in helping work up a patch for this idea? At a minimum we should also write a test case in t/t7610-mergetool.sh to verify that it works as advertised. Let me know if you have any questions. cheers, -- 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