summaryrefslogtreecommitdiffstats
path: root/tools/upgrade/1.3/migrate_sysv_simplename.py
blob: f6599756b194d60819366217b94707e138599e2c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/bin/env python

import os
import sys
import glob
import lxml.etree
import Bcfg2.Options

def main():
    opts = dict(repo=Bcfg2.Options.SERVER_REPOSITORY)
    setup = Bcfg2.Options.OptionParser(opts)
    setup.parse(sys.argv[1:])

    files = []
    for plugin in ['Pkgmgr']:
        files.extend(glob.glob(os.path.join(setup['repo'], plugin, "*")))

    for bfile in files:
        bdata = lxml.etree.parse(bfile)
        changed = False

        if not bdata.xpath("//@type='sysv'"):
            print("%s doesn't contain any sysv packages, skipping" % bfile)
            continue

        pkglist = bdata.getroot()
        if pkglist.tag != "PackageList":
            print("%s doesn't look like a PackageList, skipping" % bfile)
            continue

        for pkg in bdata.xpath("//Package"):
            if "simplename" in pkg.attrib:
                pkg.set("simplefile", pkg.get("simplename"))
                del pkg.attrib["simplename"]
                changed = True

        # if we switched to simplefile, we also need to switch to uri
        if changed and "url" in pkglist.attrib:
            pkglist.set("uri", pkglist.get("url"))
            del pkglist.attrib["url"]

        if changed:
            print("Writing %s" % bfile)
            try:
                open(bfile, "w").write(lxml.etree.tostring(bdata))
            except IOError:
                err = sys.exc_info()[1]
                print("Could not write %s: %s" % (bfile, err))

if __name__ == '__main__':
    sys.exit(main())