2010-07-30 9 views
0

J'ai une application web pour laquelle je veux créer des patches. Plus précisément, je veux créer des correctifs pour activer des fonctionnalités spécifiques sur le serveur Web.Difficulté à scinder des patchs mercuriels

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" 

Ce que je veux faire est d'économiser un patch pour chaque modification individuelle que je dois apporter à ce dossier de telle sorte que les correctifs peuvent être appliqués individuellement (à l'aide qpush vous suffit de placer) ou tous ensemble (qpush - a)

J'ai d'abord essayé ce qui suit avec une version propre du fichier:

hg qnew jmx.patch 

Je modifié la première ligne du fichier à inclure les éléments suivants

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

puis rafraîchi le patch

hg qrefresh 

Le sauté le patch pour commencer à travailler sur la deuxième modification de la base propre

hg qpop 
hg qnew jelly.patch 

Le I modifié la première ligne du fichier à inclure les éléments suivants

-Djira.jelly.on=true 

puis rafraîchi le patch

Lorsque j'ai ensuite essayé de qpush l'ancien patch, il a échoué à s'appliquer. Alors j'ai essayé une autre approche, qui devait d'abord créer un patch de base:

hg qpop -a 
hg qnew base.patch 

, qui a ajouté ce qui suit au fichier

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

, puis actualisez base.patch

hg qrefresh 

Créez ensuite un nouveau correctif pour jmx alors que base.patch était toujours appliqué:

hg qnew jmx.new 

modifier le fichier comme suit:

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

rafraîchir le patch et la pop:

hg qrefresh 
hg qpop 

Créer un nouveau patch pour la gelée:

hg qnew jelly.patch 

modifié le fichier comme suit:

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

rafraîchi le patch:

hg qrefresh 

Mais encore une fois, quand j'ai essayé de qpush le jmx.patch au-dessus du jelly.patch nouvellement créé, il y avait des conflits.

je pensais Mercurial se comporte comme prévu, mais je me demande si je peux structurer les patchs que je fais différemment afin qu'ils puissent appliquer individuellement ou combinés sans rejet

Répondre

1

Votre deuxième approche ne fonctionnera que si vous insérez à au moins 3 lignes vides entre les lignes que vous voulez changer.

Et vous pouvez aussi mélanger votre file d'attente (après qpop!), Appliquer d'abord jmx, puis jelly. Vous obtiendrez "offset x lines" mais le fichier sera corrigé correctement.

MQ a un nombre fuzz 3 codé en dur (voir patchfile() dans patch.py). Lorsque vous avez vos JMX_OPTS et JELLY_OPTS dans les lignes adjacentes, MQ ne peut pas trouver le contexte dans jmx.patch car il est modifié dans jelly.patch.