0 votos

¿Cómo puedo hacer que SnailSvn ejecute un comando diff personalizado?

¿Cómo puedo hacer que SnailSvn use vimdiff o cualquier diff personalizado script? Sólo tiene una lista predefinida de opciones.

Para configurar su soporte de diff (para opendiff aka FileMerge), te pide que copies el siguiente script en: ~/Library/Application Scripts/net.langui.SnailSVN.DiffTool/difftool.sh

#!/bin/bash
pkill -nf ScriptMonitor
sh "$@"

El argumento es un archivo diff-cmd.sh generado que se parece a esto:

#/bin/bash
"/Applications/Xcode.app/Contents/Developer/usr/bin/opendiff" "/var/folders/nn/000000000000000000000000000000/T/net.langui.SnailSVNFree//r422640 Code.cs" "/Users/idbrii/code/game/Assets/Standard Assets/Unlit/Planes/Code.cs"

Intenté sustituirlo por algo así:

#!/bin/bash
args=$(grep opendiff "$@" | cut -d\  -f2-)
echo mvimdiff $args >> ~/snailsvndifftool.log 2>&1

Pero en lugar de eso, obtengo demasiados archivos - a pesar de que los archivos contienen comillas, siguen estando divididos por espacios.

1voto

Matt Gutting Puntos 251

Con la ayuda de esta respuesta Encontré eval :

#!/bin/bash
args=$(grep opendiff "$@" | sed -e 's,"/Applications/Xcode.app/Contents/Developer/usr/bin/opendiff",/usr/local/bin/mvimdiff,')
echo diff: $args >> ~/snailsvndifftool.log 2>&1
# What's this shady thing?
eval       $args >> ~/snailsvndifftool.log 2>&1

Sin embargo, al hacer eval en argumentos arbitrarios parece innecesariamente inseguro y no pude conseguir matrices para trabajar (es decir, mvimdiff ${args[@]} ), así que en su lugar fuerzo a mvimdiff a estar al principio de la línea y a permitir sólo un conjunto de caracteres:

#!/bin/bash

args=$(grep opendiff "$@" | sed -E 's,"/Applications/Xcode.app/Contents/Developer/usr/bin/opendiff",,; s/[^A-Za-z0-9.~/"_ -]//g; s,^,/usr/local/bin/mvimdiff,')
echo diff: $args >> ~/snailsvndifftool.log 2>&1
eval $args >> ~/snailsvndifftool.log 2>&1

Seguramente hay algo que se me escapa, así que espero que alguien tenga una respuesta mejor.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X