# [PATCH v3/RFC] Remove the use of '--' in merge program invocation

3 messages from 2008-06-16 to 2008-06-17. Participants: Patrick Higgins, Junio C Hamano, patrick.higgins@cexp.com.
Thread: https://gitlist.dev/t/13989

## Patrick Higgins, 2008-06-16 23:33

Subject: [PATCH v3/RFC] Remove the use of '--' in merge program invocation
Message-ID: <1213659221-27519-1-git-send-email-patrick.higgins@cexp.com>
URL: https://gitlist.dev/e/1213659221-27519-1-git-send-email-patrick.higgins%40cexp.com

```
Put a "./" at the beginning of all paths given to the merge program so
that filenames beginning with a '-' character don't get interpreted as
options.

This deals with a problem where kdiff3 can be compiled with or without
support for the '--' separator between options and filenames.

Signed-off-by: Patrick Higgins <patrick.higgins@cexp.com>
---

This is applying Junio's idea because my earlier attempts would fail on files
that started with a dash. This should work for those files with kdiff3
compiled with or without '--' support, does not require any additional
overhead to determine if kdiff3 has that support, and the technique should
work for all merge programs in case any others have the problem kdiff3 has.

My only concern is if 'git ls-files -u' ever returns absolute paths, then this
will not work.

 git-mergetool.sh |   24 ++++++++++++------------
 1 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/git-mergetool.sh b/git-mergetool.sh
index fcdec4a..94187c3 100755
--- a/git-mergetool.sh
+++ b/git-mergetool.sh
@@ -141,10 +141,10 @@ merge_file () {
     fi
 
     ext="$$$(expr "$MERGED" : '.*\(\.[^/]*\)$')"
-    BACKUP="$MERGED.BACKUP.$ext"
-    LOCAL="$MERGED.LOCAL.$ext"
-    REMOTE="$MERGED.REMOTE.$ext"
-    BASE="$MERGED.BASE.$ext"
+    BACKUP="./$MERGED.BACKUP.$ext"
+    LOCAL="./$MERGED.LOCAL.$ext"
+    REMOTE="./$MERGED.REMOTE.$ext"
+    BASE="./$MERGED.BASE.$ext"
 
     mv -- "$MERGED" "$BACKUP"
     cp -- "$BACKUP" "$MERGED"
@@ -183,29 +183,29 @@ merge_file () {
 	kdiff3)
 	    if base_present ; then
 		("$merge_tool_path" --auto --L1 "$MERGED (Base)" --L2 "$MERGED (Local)" --L3 "$MERGED (Remote)" \
-		    -o "$MERGED" -- "$BASE" "$LOCAL" "$REMOTE" > /dev/null 2>&1)
+		    -o "$MERGED" "$BASE" "$LOCAL" "$REMOTE" > /dev/null 2>&1)
 	    else
 		("$merge_tool_path" --auto --L1 "$MERGED (Local)" --L2 "$MERGED (Remote)" \
-		    -o "$MERGED" -- "$LOCAL" "$REMOTE" > /dev/null 2>&1)
+		    -o "$MERGED" "$LOCAL" "$REMOTE" > /dev/null 2>&1)
 	    fi
 	    status=$?
 	    ;;
 	tkdiff)
 	    if base_present ; then
-		"$merge_tool_path" -a "$BASE" -o "$MERGED" -- "$LOCAL" "$REMOTE"
+		"$merge_tool_path" -a "$BASE" -o "$MERGED" "$LOCAL" "$REMOTE"
 	    else
-		"$merge_tool_path" -o "$MERGED" -- "$LOCAL" "$REMOTE"
+		"$merge_tool_path" -o "$MERGED" "$LOCAL" "$REMOTE"
 	    fi
 	    status=$?
 	    ;;
 	meld|vimdiff)
 	    touch "$BACKUP"
-	    "$merge_tool_path" -- "$LOCAL" "$MERGED" "$REMOTE"
+	    "$merge_tool_path" "$LOCAL" "$MERGED" "$REMOTE"
 	    check_unchanged
 	    ;;
 	gvimdiff)
 	    touch "$BACKUP"
-	    "$merge_tool_path" -f -- "$LOCAL" "$MERGED" "$REMOTE"
+	    "$merge_tool_path" -f "$LOCAL" "$MERGED" "$REMOTE"
 	    check_unchanged
 	    ;;
 	xxdiff)
@@ -215,13 +215,13 @@ merge_file () {
 		    -R 'Accel.SaveAsMerged: "Ctrl-S"' \
 		    -R 'Accel.Search: "Ctrl+F"' \
 		    -R 'Accel.SearchForward: "Ctrl-G"' \
-		    --merged-file "$MERGED" -- "$LOCAL" "$BASE" "$REMOTE"
+		    --merged-file "$MERGED" "$LOCAL" "$BASE" "$REMOTE"
 	    else
 		"$merge_tool_path" -X --show-merged-pane \
 		    -R 'Accel.SaveAsMerged: "Ctrl-S"' \
 		    -R 'Accel.Search: "Ctrl+F"' \
 		    -R 'Accel.SearchForward: "Ctrl-G"' \
-		    --merged-file "$MERGED" -- "$LOCAL" "$REMOTE"
+		    --merged-file "$MERGED" "$LOCAL" "$REMOTE"
 	    fi
 	    check_unchanged
 	    ;;
-- 
1.5.6.rc2

```

## Junio C Hamano, 2008-06-17 00:05

Subject: Re: [PATCH v3/RFC] Remove the use of '--' in merge program invocation
Message-ID: <7vlk157woq.fsf@gitster.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vlk157woq.fsf%40gitster.siamese.dyndns.org
In-Reply-To: <1213659221-27519-1-git-send-email-patrick.higgins@cexp.com>

```
Patrick Higgins <patrick.higgins@cexp.com> writes:

> Put a "./" at the beginning of all paths given to the merge program so
> that filenames beginning with a '-' character don't get interpreted as
> options.
>
> This deals with a problem where kdiff3 can be compiled with or without
> support for the '--' separator between options and filenames.
>
> Signed-off-by: Patrick Higgins <patrick.higgins@cexp.com>
> ---
>
> This is applying Junio's idea because my earlier attempts would fail on files
> that started with a dash. This should work for those files with kdiff3
> compiled with or without '--' support, does not require any additional
> overhead to determine if kdiff3 has that support, and the technique should
> work for all merge programs in case any others have the problem kdiff3 has.
>
> My only concern is if 'git ls-files -u' ever returns absolute paths,
> then this will not work.

What do you mean by "absolute paths"?  The path git proper deals with is
always relative to the root of the repository's work tree, so you won't be
seeing "/home/patrick/src/Makefile" from ls-files if that is what you are
worried about.

This change applies to all the backends not just kdiff3; people who use
different merge backends please give success (or breakage) reports.

Thanks.

```

## patrick.higgins@cexp.com, 2008-06-17 16:52

Subject: RE: [PATCH v3/RFC] Remove the use of '--' in merge program invocation
Message-ID: <911589C97062424796D53B625CEC0025E46165@USCOBRMFA-SE-70.northamerica.cexp.com>
URL: https://gitlist.dev/e/911589C97062424796D53B625CEC0025E46165%40USCOBRMFA-SE-70.northamerica.cexp.com
In-Reply-To: <7vlk157woq.fsf@gitster.siamese.dyndns.org>

```


From: Junio C Hamano [mailto:gitster@pobox.com]
> 
> Patrick Higgins <patrick.higgins@cexp.com> writes:
> 
> > My only concern is if 'git ls-files -u' ever returns absolute paths,
> > then this will not work.
> 
> What do you mean by "absolute paths"?  The path git proper 
> deals with is
> always relative to the root of the repository's work tree, so 
> you won't be
> seeing "/home/patrick/src/Makefile" from ls-files if that is 
> what you are
> worried about.

Yes, that's what I was worried about. Glad to hear that won't ever happen.

```
