2013-02-19 2 views
3

Я звоню git-крюку для предварительной фиксации. Это вызывает вызов groovy-скрипта и делает это таким образом, который позволяет удаленно отлаживать выполнение крюка. Как так:Ошибка Groovy bootstrap с использованием GIT BASH на Windows 7

#!/usr/bin/env groovy 
groovy -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=8085,suspend=y "C:\Users\.......hooks\PreCommit.groovy" 

, когда я вызвать крюк с использованием ГИТ BASH я вижу следующую ошибку:

/c/Program Files (x86)/Groovy/Groovy-2.1.0/bin/startGroovy: line 96: [: too many arguments org.codehaus......: startup failed: .... expected EOF, found ':' @ line 3 column 35] 

, когда я беру быстрый взгляд на файл startGroovy я вижу следующий неясный код - где линия 96 является, если условие с Groovy дома:

# For Cygwin, ensure paths are in UNIX format before anything is touched. 
if $cygwin ; then 
    [ -n "$GROOVY_HOME" ] && GROOVY_HOME=`cygpath --unix "$GROOVY_HOME"` 
    [ -n "$JAVACMD" ] && JAVACMD=`cygpath --unix "$JAVACMD"` 
    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 
    [ -n "$CP" ] && CP=`cygpath --path --unix "$CP"` 
else 
    if [ -n "$GROOVY_HOME" -a `expr "$GROOVY_HOME":'\/$'` ] ; then 
     GROOVY_HOME=`echo $GROOVY_HOME | sed -e 's/\/$//'` 
    fi 
fi 

является ли это ошибка в заводной начальной загрузки? мои окна 7 имеет это переменная окружения GROOVY_HOME правильно указывает на: C: \ файл программы (x86) \ Groovy \ Groovy-2.1.0

ответ

4

Проблема в скрипте от Groovy. Скрипт не ссылается на переменную GROOVY_HOME в правильном месте во всех правильных местах. Пространства в пути, представленные GROOVY_HOME, в моем случае «Program Files (x86)» имеют 2 пробела, интерпретируются как разделители и заставляют путь анализироваться как более чем один аргумент. Чтобы исправить это, измените определение переменной окружения Windows GROOVY_HOME, чтобы использовать версию пути тильды. Измените переменную окружения GROOVY_HOME (в Vista, запустите/щелкните правой кнопкой мыши компьютер/свойства/расширенные системные настройки/переменные среды/пользователь или система, моя система) и установите c: /Progra~2/Groovy/Groovy-2.1. 3. Когда вы запускаете свою оболочку Git, MinGW или CygWin, у вас не будет пробелов и не должно возникать никаких ошибок.

+0

Это было именно то, что мне нужно, спасибо! –

1

Команда cygpath отсутствует Git Bash, который реализует только усеченную версию cgywin , Одним из решений является использование полной установки Cygwin для мерзавец, но это, вероятно, похоже, чтобы создать свой собственный .bashrc с Unix стиле имен каталогов:

# Check to see what the DOS directories are 
echo GROOVY_HOME=$GROOVY_HOME 
echo JAVACMD=$JAVACMD 
echo JAVA_HOME=$JAVA_HOME 
echo CP=$CP 

# Add the directories you found to .bashrc in a unix style 
cat - >>~.bashrc 
export GROOVY_HOME='/c/program file (x86)/Groovy/Groovy-2.1.0' 
export JAVACMD="..." 
export JAVA_HOME="/c/Program files/Java/jre7/bin/java" 
export CP= "..." 

Пожалуйста, измените пути в зависимости от обстоятельств. Вы можете редактировать .bashrc, используя notepad ++ или другой редактор вместо использования cat. Помните, что команда cat завершается с помощью Control-D в Bash, тогда как в файле DOS copy file.txt используется Control-Z. Поместив эти переменные в .bashrc, они не будут мешать вашим переменным окружения DOS.

+0

Это было интересное наблюдение. Тем не менее, я просто испытал это без везения. Оказывается, что 'if $ cygwin' является ложным, и поэтому никакой cygpath не вызывается, поэтому ошибка должна быть вокруг' if [-n "$ GROOVY_HOME" -a 'expr "$ GROOVY_HOME":' \/$ ' ']; затем GROOVY_HOME = 'echo $ GROOVY_HOME | sed -e 's/\/$ //' ' fi'. Я вставил экспорт в мой .bashrc, и хотя кажется, что правильно установлено, эхо в файле startGroovy покажет, что формат GROOVY_HOME - это все еще окна. –