Commit 63665cfc authored by Olivier SOLDANO's avatar Olivier SOLDANO

winsparkle: switching to python script for better XML handling

added script to maintain the rss light and beeing
able to suppress cleanly versions of the same day when publishing.
It will also be easier to further implement other tests on the
rss to erase older items from the channel if needed.

Change-Id: I99d6ead3f180ce642a81e0c308c6a10efdd06dea
parent b1be6e57
......@@ -45,25 +45,13 @@ else
#update URI in <link> field
# update URI in <link> field
gawk -i inplace -v source="${SPARKLE_SOURCE}" '/<link>/{printf " <link>";
printf source; print "</link>"; next}1' ${SPARKLE_FILE}
#update list with new image item
cat << EOS > ${TMP_FILE}
<title>Ring nightly $(date "+%Y/%m/%d %H:%M")</title>
<pubDate>$(date -R)</pubDate>
<enclosure url="${REPO_URL}/$(basename ${PACKAGE})" sparkle:version="$(date +%Y%m%d)" sparkle:shortVersionString="nightly-$(date "+%Y%m%d")" sparkle:os="${OS}" length="$(stat -c %s ${PACKAGE})" type="application/octet-stream" />
# update xml list with new image item
if [ -s ${SPARKLE_FILE} ];then
gawk -i inplace -v tmp="${TMP_FILE}" '/language/{print; while(getline line < tmp){print line};close(tmp);next}1' ${SPARKLE_FILE}
rm -f ${TMP_FILE}
echo 'empty SPARKLE_FILE'
rm -f ${TMP_FILE}
exit 1
URL="${REPO_URL}/$(basename ${PACKAGE})"
LENGTH="$(stat -c %s ${PACKAGE})"
python3 ./scripts/ winsparkle-ring.xml "Ring nightly" ${URL} ${OS} ${LENGTH}
* Copyright (C) 2016 Savoir-faire Linux Inc.
* Author: Olivier Soldano <>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
import sys
import xml.etree.ElementTree as ET
from xml.dom import minidom
import datetime
from email.utils import formatdate
def sameDate(timestamp, pub):
date1 = timestamp.split()
date2 = pub.text.split()
return date1[:4] == date2[:4]
def insertNewPackage(parent_element, title, attrib):
now =
new_item = ET.Element("item")
titre = ET.SubElement(new_item,"titre")
titre.text = title + now.strftime("%Y/%m/%d %H:%M")
pubDate = ET.SubElement(new_item, "pubDate")
pubDate.text = formatdate()
enclosure = ET.SubElement(new_item, "enclosure", attrib=attrib)
if __name__ == "__main__":
now =
now_timestamp = formatdate() # rfc 2822
sparkle_file = sys.argv[1]
title = sys.argv[2]
url = sys.argv[3]
os = sys.argv[4]
length = sys.argv[5]
namespace = {'sparkle' : ''}
tree = ET.parse(sparkle_file)
channel = tree.find("channel")
attrib = {'url' : url,
'sparkle:version' : now.strftime("%Y/%m/%d"),
'sparkle:shortVersionString' : "nightly-" + now.strftime("%Y/%m/%d"),
'sparkle:os' : os,
'length' : length,
'type' : "application/octet-stream"
for item in tree.findall(".//item"):
if sameDate(now_timestamp,item.find("pubDate")) and not\
item.find("./enclosure[@sparkle:os='%s']" % os, namespace) is None:
insertNewPackage(channel, title, attrib)
# Pretty printing with xml dom
str_tree = ET.tostring(tree.getroot(),encoding='utf-8').decode('utf-8').replace('\n','').replace('\r','')
reparsed_doc = minidom.parseString(str_tree)
xml_out = open(sparkle_file,"wb")
xml_out.write(reparsed_doc.toprettyxml(indent=' ', newl='\n',encoding="utf-8"))
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment