Skip to content

Instantly share code, notes, and snippets.

@defanator
Created September 3, 2020 10:31
Show Gist options
  • Save defanator/49d54667547650e26da2c294a5cf3507 to your computer and use it in GitHub Desktop.
Save defanator/49d54667547650e26da2c294a5cf3507 to your computer and use it in GitHub Desktop.
Debian changelog to XML converter
#!/usr/bin/env python3.8
import sys
import argparse
from dateutil import parser
from datetime import datetime
argparser = argparse.ArgumentParser(description="convert debian-style changelog to XML")
argparser.add_argument('deb_changelog', type=str, help="existing deb changelog file")
argparser.add_argument('--pkgname', type=str, required=True, help="package name")
argparser.add_argument('--splitver', action='store_true', default=False, help="split version to ver and basever (e.g. for njs)")
args = argparser.parse_args()
f = open(args.deb_changelog, "r")
changes = []
basever = None
for line in f:
done = 0
if line.startswith(args.pkgname):
verstring = line.split('(')[1].split('~')[0]
ver = verstring.split('-')[0]
rev = verstring.split('-')[1]
if args.splitver:
try:
vs = ver.split('.')
basever = "%s.%s.%s" % (vs[0], vs[1], vs[2])
ver = "%s.%s.%s" % (vs[3], vs[4], vs[5])
except:
pass
if line.startswith(" *"):
changes.append(line[4:].rstrip())
if line.startswith(" --"):
packager = line[4:].split('>')[0] + '>'
dtstr = line[4:].split('>')[1].lstrip().rstrip()
done = 1
if done == 1:
dt = parser.parse(dtstr)
datestr = dt.strftime('%Y-%m-%d')
timestr = dt.strftime('%H:%M:%S %z')
packager = packager.replace('<', '&lt;')
packager = packager.replace('>', '&gt;')
if basever:
baseverstr = " basever=\"%s\"" % basever
else:
baseverstr = ''
print("""
<changes apply="%s" ver="%s" rev="%s"%s
date="%s" time="%s"
packager="%s">
""" % (args.pkgname, ver, rev, baseverstr, datestr, timestr, packager), end='')
for change in changes:
print("""
<change>
<para>
%s
</para>
</change>
""" % change, end='')
print("\n</changes>\n")
changes = []
basever = None
done = 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment