WIP XML merging. Handle files without XML document node, as well as without their root node. This means we need a matrix of what file has what root node AND the names of the child nodes!

This commit is contained in:
Daniel Ceregatti 2023-05-19 23:41:34 -07:00
parent ebf961bb73
commit 92f9598910

View file

@ -147,38 +147,51 @@ report() {
mergexml(){ mergexml(){
# Start with the upstream XML files from a pristine mpmissions directory # Start with the upstream XML files from a pristine mpmissions directory
echo "Copying upstream XML files from mpmissions..." echo "Copying upstream XML files from mpmissions..."
pushd /mpmissions > /dev/null ffff for var in CFGEVENTSPAWNS CFGSPAWNABLETYPES EVENTS TYPES
for var in CFGEVENTSPAWNS CFGSPAWNABLETYPES EVENTS TYPES
do do
find -name "${var,,}.xml" -exec cp -vf {} ${SERVER_FILES}/mpmissions/{} \; find /mpmissions -name "${var,,}.xml" -exec cp -vf {} ${SERVER_FILES}/{} \;
done done
for link in $(ls -tdr ${SERVER_PROFILE}/@* 2> /dev/null) for link in $(ls -tdr ${SERVER_PROFILE}/@* 2> /dev/null)
do do
ID=$(readlink ${link} | awk -F/ '{print $NF}') ID=$(readlink ${link} | awk -F/ '{print $NF}')
MODNAME=$(get_mod_name ${ID}) MODNAME=$(get_mod_name ${ID})
# for var in CFGEVENTSPAWNS CFGSPAWNABLETYPES EVENTS TYPES # Going to have to maintain a matrix of file names -> root node -> child node permutations
for var in EVENTS TYPES for i in "CFGEVENTSPAWNS:eventposdef:event" "CFGSPAWNABLETYPES:spawnabletypes:type" "EVENTS:events:event" "TYPES:types:type"
do do
var=$(echo ${i} | cut -d: -f1)
CHECK=$(echo ${i} | cut -d: -f2)
CHILD=$(echo ${i} | cut -d: -f3)
if [ -f "${WORKSHOP_DIR}/${ID}/${var,,}.xml" ] if [ -f "${WORKSHOP_DIR}/${ID}/${var,,}.xml" ]
then then
echo "Merging ${WORKSHOP_DIR}/${ID}/${var,,}.xml..." echo "Merging ${WORKSHOP_DIR}/${ID}/${var,,}.xml..."
if ! grep -q '<?xml' ${WORKSHOP_DIR}/${ID}/${var,,}.xml cp ${WORKSHOP_DIR}/${ID}/${var,,}.xml /tmp/x
if ! grep -q '<'${CHECK}'>' /tmp/x
then then
# When we have no XML or root node echo " - has no root node <${CHECK}>. fixing..."
echo "The file has no root node" xmlstarlet ed -s / -t elem -n "${CHECK}" -m /${CHILD} /${CHECK} /tmp/x > /tmp/y
# xmlstarlet ed -s / -t elem -n "eventposdef" -m /event /eventposdef ${WORKSHOP_DIR}/${ID}/${var,,}.xml mv /tmp/y /tmp/x
fi fi
if ! grep -q '<?xml' ${WORKSHOP_DIR}/${ID}/${var,,}.xml
if ! grep -q '<?xml' /tmp/x
then then
# When we have no XML node echo " - has no XML node, fixing..."
else xmlstarlet fo /tmp/x > /tmp/y
# When it's normalized mv /tmp/y /tmp/x
xmlstarlet ed -s / -t elem -n "eventposdef" -m /event /eventposdef ${WORKSHOP_DIR}/${ID}/${var,,}.xml
fi fi
xmllint --noout /tmp/x || {
echo "The final file failed lint tests, aborting..."
exit 1
}
# At this point it's normalized. Merge to the mpmissions file.
echo " - merging to mpmissions..."
# xmlstarlet ed -s / -t elem -n "eventposdef" -m /event /eventposdef ${WORKSHOP_DIR}/${ID}/${var,,}.xml
fi fi
done done
done done
popd > /dev/null
exit 0 exit 0
} }