Трудность расщепления ртутных заплат - PullRequest
0 голосов
/ 30 июля 2010

У меня есть веб-приложение, для которого я хочу создавать патчи. В частности, я хочу создать патчи для включения определенных функций на веб-сервере.

JAVA_OPTS="-Xms128m -Xmx256m $JAVA_OPTS -Djava.awt.headless=true -Datlassian.standalone=JIRA -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true "

# Perm Gen size needs to be increased if encountering OutOfMemoryError: PermGen problems. Specifying PermGen size is not valid on IBM JDKs
PRGDIR=`dirname $0`
JIRA_MAX_PERM_SIZE=128m
if [ -f "${PRGDIR}/permgen.sh" ]; then
    echo "Detecting JVM PermGen support..."
. ${PRGDIR}/permgen.sh
if [ $JAVA_PERMGEN_SUPPORTED = "true" ]; then
    echo "PermGen switch is supported. Setting to ${JIRA_MAX_PERM_SIZE}"
    JAVA_OPTS="-XX:MaxPermSize=${JIRA_MAX_PERM_SIZE} ${JAVA_OPTS}"
    else
        echo "PermGen switch is NOT supported and will NOT be set automatically."
    fi
fi

# use this if you want to import data without notifications
#JAVA_OPTS=" -Datlassian.mail.senddisabled=true -Datlassian.mail.fetchdisabled=true -Datlassian.mail.popdisabled=true $JAVA_OPTS "

export JAVA_OPTS

echo "If you encounter issues starting up JIRA Standalone Edition, please see the Troubleshooting guide at http://confluence.atlassian.com/display/JIRA/Installation+Troubleshooting+Guide"

Что я хочу сделать, это сохранить патч для каждой отдельной модификации, которую мне нужно внести в этот файл таким образом, чтобы патчи можно было применять по отдельности (используя qpush -move) или все вместе (qpush -a) *

Сначала я попробовал следующее с чистой версией файла:

hg qnew jmx.patch

Затем я изменил первую строку файла, включив в нее следующее

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8089 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

затем обновил патч

hg qrefresh

Выскочил патч, чтобы начать работу над второй модификацией с чистой базы

hg qpop
hg qnew jelly.patch

Я изменил первую строку файла, включив в нее следующее

-Djira.jelly.on=true

затем обновил патч

Когда я попытался qpush более старый патч, его не удалось применить. Затем я попробовал альтернативный подход, который должен был сначала создать базовый патч:

hg qpop -a
hg qnew base.patch

, который добавил следующее в файл

JMX_OPTS=
JELLY_OPTS=
JAVA_OPTS=" ${JAVA_OPTS} ${JELLY_OPTS} ${JMX_OPTS} "

, затем обновите base.patch

hg qrefresh

Затем создайте новый патч для jmx, пока base.patch все еще применялся:

hg qnew jmx.new

отредактируйте файл следующим образом:

JMX_OPTS=" -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8089 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "

обновить патч и всплыть:

hg qrefresh
hg qpop

Создание нового патча для желе:

hg qnew jelly.patch

Отредактировал файл следующим образом:

JELLY_OPTS=" -Djira.jelly.on=true "

обновил патч:

hg qrefresh

Но опять же, когда я попытался qpush jmx.patch поверх вновь созданного jelly.patch, возникли конфликты.

Я думаю, что Mercurial ведет себя так, как ожидалось, но мне интересно, могу ли я структурировать сделанные мной патчи по-разному, чтобы они могли применяться по отдельности или в комбинации без отклонения

1 Ответ

1 голос
/ 03 сентября 2010

Ваш второй подход будет работать, если вы вставите как минимум 3 пустые строки между строками, которые хотите изменить.

И вы также можете перетасовать свою очередь (после qpop!), Сначала примените jmx, а затем желе. Вы получите «смещение x строк», но файл будет корректно исправлен.

MQ имеет жестко запрограммированный фазз № 3 (см. patchfile() в patch.py). Когда у вас есть JMX_OPTS и JELLY_OPTS в соседних строках, MQ не может найти контекст в jmx.patch, потому что он изменился в jelly.patch.

...