我有一个我希望能够为其创建补丁的Web应用程序。具体来说,我想创建用于在Web服务器中启用特定功能的补丁。
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
但是,当我尝试在新创建的jelly.patch之上对jmx.patch进行qpush时,存在冲突。
我认为Mercurial的行为符合预期,但我想知道我是否可以构建不同的补丁,以便他们可以单独应用或合并而不会被拒绝
答案 0 :(得分:1)
如果在要更改的行之间插入至少3个空行,则第二种方法将起作用。
你也可以洗牌你的队列(在qpop之后!),首先应用jmx,然后是果冻。您将获得“偏移x行”,但文件将被正确修补。
MQ具有硬编码的模糊数3(请参阅patchfile()
中的patch.py
)。当您在相邻行中有JMX_OPTS
和JELLY_OPTS
时,MQ无法在jmx.patch中找到上下文,因为它在jelly.patch中已更改。