Patchwork conrib: properly quote variables in editmerge

login
register
mail settings
Submitter Ryan McElroy
Date Oct. 17, 2015, 10:49 p.m.
Message ID <eb4b0e4b5d6e920b0769.1445122146@devbig314.prn1.facebook.com>
Download mbox | patch
Permalink /patch/11171/
State Accepted
Headers show

Comments

Ryan McElroy - Oct. 17, 2015, 10:49 p.m.
# HG changeset patch
# User Ryan McElroy <rmcelroy@fb.com>
# Date 1445122094 25200
#      Sat Oct 17 15:48:14 2015 -0700
# Node ID eb4b0e4b5d6e920b0769cb103fdc6bee4176ad0b
# Parent  50fc80e46786301bcf775649ef8f6d121f62fa5c
conrib: properly quote variables in editmerge

Previously, files with spaces would break editmerge.
Yuya Nishihara - Oct. 18, 2015, 7:33 a.m.
On Sat, 17 Oct 2015 15:49:06 -0700, Ryan McElroy wrote:
> # HG changeset patch
> # User Ryan McElroy <rmcelroy@fb.com>
> # Date 1445122094 25200
> #      Sat Oct 17 15:48:14 2015 -0700
> # Node ID eb4b0e4b5d6e920b0769cb103fdc6bee4176ad0b
> # Parent  50fc80e46786301bcf775649ef8f6d121f62fa5c
> conrib: properly quote variables in editmerge
> 
> Previously, files with spaces would break editmerge.
> 
> diff --git a/contrib/editmerge b/contrib/editmerge
> --- a/contrib/editmerge
> +++ b/contrib/editmerge
> @@ -10,23 +10,23 @@
>  # editmerge.check=changed
>  # editmerge.premerge=keep
>  
> -FILE=$1
> +FILE="$1"
>  
>  getlines() {
> -  grep -n "^<<<<<<" $FILE | cut -f1 -d:
> +  grep -n "^<<<<<<" "$FILE" | cut -f1 -d:
>  }
>  
>  # editor preference loosely based on https://mercurial-scm.org/wiki/editor
>  # hg showconfig is at the bottom though, since it's slow to run (0.15 seconds)
> -ED=$HGEDITOR
> +ED="$HGEDITOR"
>  if [ "$ED" = "" ] ; then
> -  ED=$VISUAL
> +  ED="$VISUAL"
>  fi
>  if [ "$ED" = "" ] ; then
> -  ED=$EDITOR
> +  ED="$EDITOR"
>  fi
>  if [ "$ED" = "" ] ; then
> -  ED=$(hg showconfig ui.editor)
> +  ED="$(hg showconfig ui.editor)"
>  fi
>  if [ "$ED" = "" ] ; then
>    echo "merge failed - unable to find editor"
> @@ -34,22 +34,22 @@ if [ "$ED" = "" ] ; then
>  fi
>  
>  if [ "$ED" = "emacs" ] || [ "$ED" = "nano" ] || [ "$ED" = "vim" ] ; then
> -  FIRSTLINE=$(getlines | head -n 1)
> +  FIRSTLINE="$(getlines | head -n 1)"
>    PREVIOUSLINE=""
>  
>    # open the editor to the first conflict until there are no more
>    # or the user stops editing the file
>    while [ ! "$FIRSTLINE" = "" ] && [ ! "$FIRSTLINE" = "$PREVIOUSLINE" ] ; do
> -    $ED +$FIRSTLINE $FILE
> -    PREVIOUSLINE=$FIRSTLINE
> -    FIRSTLINE=$(getlines | head -n 1)
> +    "$ED" "+$FIRSTLINE" "$FILE"
> +    PREVIOUSLINE="$FIRSTLINE"
> +    FIRSTLINE="$(getlines | head -n 1)"
>    done
>  else
> -  $ED $FILE
> +  "$ED" "$FILE"

$EDITOR may have command arguments, e.g. EDITOR="emacs -nw", so it shouldn't
be quoted here.
Matt Mackall - Oct. 18, 2015, 9:58 p.m.
On Sat, 2015-10-17 at 15:49 -0700, Ryan McElroy wrote:
> # HG changeset patch
> # User Ryan McElroy <rmcelroy@fb.com>
> # Date 1445122094 25200
> #      Sat Oct 17 15:48:14 2015 -0700
> # Node ID eb4b0e4b5d6e920b0769cb103fdc6bee4176ad0b
> # Parent  50fc80e46786301bcf775649ef8f6d121f62fa5c
> conrib: properly quote variables in editmerge

Queued for default with a better summary and Yuya's fix, thanks.

Patch

diff --git a/contrib/editmerge b/contrib/editmerge
--- a/contrib/editmerge
+++ b/contrib/editmerge
@@ -10,23 +10,23 @@ 
 # editmerge.check=changed
 # editmerge.premerge=keep
 
-FILE=$1
+FILE="$1"
 
 getlines() {
-  grep -n "^<<<<<<" $FILE | cut -f1 -d:
+  grep -n "^<<<<<<" "$FILE" | cut -f1 -d:
 }
 
 # editor preference loosely based on https://mercurial-scm.org/wiki/editor
 # hg showconfig is at the bottom though, since it's slow to run (0.15 seconds)
-ED=$HGEDITOR
+ED="$HGEDITOR"
 if [ "$ED" = "" ] ; then
-  ED=$VISUAL
+  ED="$VISUAL"
 fi
 if [ "$ED" = "" ] ; then
-  ED=$EDITOR
+  ED="$EDITOR"
 fi
 if [ "$ED" = "" ] ; then
-  ED=$(hg showconfig ui.editor)
+  ED="$(hg showconfig ui.editor)"
 fi
 if [ "$ED" = "" ] ; then
   echo "merge failed - unable to find editor"
@@ -34,22 +34,22 @@  if [ "$ED" = "" ] ; then
 fi
 
 if [ "$ED" = "emacs" ] || [ "$ED" = "nano" ] || [ "$ED" = "vim" ] ; then
-  FIRSTLINE=$(getlines | head -n 1)
+  FIRSTLINE="$(getlines | head -n 1)"
   PREVIOUSLINE=""
 
   # open the editor to the first conflict until there are no more
   # or the user stops editing the file
   while [ ! "$FIRSTLINE" = "" ] && [ ! "$FIRSTLINE" = "$PREVIOUSLINE" ] ; do
-    $ED +$FIRSTLINE $FILE
-    PREVIOUSLINE=$FIRSTLINE
-    FIRSTLINE=$(getlines | head -n 1)
+    "$ED" "+$FIRSTLINE" "$FILE"
+    PREVIOUSLINE="$FIRSTLINE"
+    FIRSTLINE="$(getlines | head -n 1)"
   done
 else
-  $ED $FILE
+  "$ED" "$FILE"
 fi
 
 # get the line numbers of the remaining conflicts
-CONFLICTS=$(getlines | sed ':a;N;$!ba;s/\n/, /g')
+CONFLICTS="$(getlines | sed ':a;N;$!ba;s/\n/, /g')"
 if [ ! "$CONFLICTS" = "" ] ; then
   echo "merge failed - resolve the conflicts (line $CONFLICTS) then use 'hg resolve --mark'"
   exit 1