summaryrefslogtreecommitdiff
path: root/registry
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2013-02-04 14:45:33 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2013-02-11 15:22:35 +1000
commitf5d6ead6c66a1364554896e97baa199f6fc7b4f0 (patch)
tree5de1c8d8d550ed132d730af8d3b326d6e955c95f /registry
parent5691e3451a2b45b3da6f5d949da883323a7ed008 (diff)
registry: handle multiple registries in one file during merge
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Diffstat (limited to 'registry')
-rwxr-xr-xregistry/xit-bug-registry-test6
-rw-r--r--registry/xit.py138
2 files changed, 90 insertions, 54 deletions
diff --git a/registry/xit-bug-registry-test b/registry/xit-bug-registry-test
index 1f3bd67..7ea33e0 100755
--- a/registry/xit-bug-registry-test
+++ b/registry/xit-bug-registry-test
@@ -368,9 +368,9 @@ class TestXITTestRegistryCLI(unittest.TestCase):
self.assertEquals(e.exception.code, self.EXIT_GENERAL_FAILURE);
def test_merge(self):
- args = self.args
- args += ["merge", self.REGISTRY_FILENAME, self.REGISTRY_FILENAME]
- self.cli.run(args)
+
+ self.cli.run(self.args + ["-r", "server", "merge", self.REGISTRY_FILENAME, self.REGISTRY_FILENAME])
+ self.cli.run(self.args + ["merge", self.REGISTRY_FILENAME, self.REGISTRY_FILENAME])
def test_edit(self):
args = self.args
diff --git a/registry/xit.py b/registry/xit.py
index ecd9446..73444cd 100644
--- a/registry/xit.py
+++ b/registry/xit.py
@@ -141,56 +141,64 @@ class XITTestRegistry:
regs.append(reg)
return regs
- def toXML(self):
- """Generate XML output from this registry and return it"""
+ def toXML(self, others=[]):
+ """Generate XML output from this registry and return it. If others
+ is a list, the resulting XML file contains all of the registries
+ provided including self. Otherwise, only self is written out."""
NSMAP = { "xit" : "http://www.x.org/xorg-integration-testing" }
E = objectify.ElementMaker(annotate = False,
namespace = NSMAP['xit'],
nsmap = NSMAP)
- xit_registries = E.registries()
- xit_registry = E.registry()
- xit_registry.set("name", self.name)
- xit_registries.append(xit_registry)
-
- xit_meta = E.meta()
- xit_registry.append(xit_meta)
- xit_date = E.date(time.strftime("%Y-%m-%d", self.date))
- xit_meta.append(xit_date)
+ xit_registries = E.registries()
- for modversion in sorted(self.moduleversions):
- xit_modversion = E.moduleversion(modversion.version)
- xit_modversion.set("name", modversion.module)
- xit_modversion.set("type", modversion.type)
- xit_meta.append(xit_modversion)
-
- for suite_name, suite in sorted(self.tests.iteritems()):
- xit_suite = E.testsuite()
- xit_suite.set("name", suite_name)
- for name, test in sorted(suite.iteritems()):
- xit_testcase = E.testcase()
- xit_testcase.set("name", test.name)
- xit_testcase.set("success", str(test.status).lower())
-
- for bug in test.getBugs():
- xit_bug = E.bug(bug.url)
- xit_bug.set("type", bug.type)
- xit_testcase.append(xit_bug)
-
- for fix in test.getFixes():
- xit_fix = E.fix(fix.text)
- xit_fix.set("type", fix.type);
- for arg, value in fix.extra_args.iteritems():
- xit_fix.set(arg, value)
- xit_testcase.append(xit_fix)
-
- for info in test.getInfo():
- xit_info = E.testinfo(info.text)
- xit_info.set("type", info.type)
- xit_testcase.append(xit_info)
-
- xit_suite.append(xit_testcase)
- xit_registry.append(xit_suite)
+ if len(others) == 0:
+ others = [self] # yikes
+
+ for r in others:
+ xit_registry = E.registry()
+ xit_registry.set("name", r.name)
+ xit_registries.append(xit_registry)
+
+ xit_meta = E.meta()
+ xit_registry.append(xit_meta)
+
+ xit_date = E.date(time.strftime("%Y-%m-%d", r.date))
+ xit_meta.append(xit_date)
+
+ for modversion in sorted(r.moduleversions):
+ xit_modversion = E.moduleversion(modversion.version)
+ xit_modversion.set("name", modversion.module)
+ xit_modversion.set("type", modversion.type)
+ xit_meta.append(xit_modversion)
+
+ for suite_name, suite in sorted(r.tests.iteritems()):
+ xit_suite = E.testsuite()
+ xit_suite.set("name", suite_name)
+ for name, test in sorted(suite.iteritems()):
+ xit_testcase = E.testcase()
+ xit_testcase.set("name", test.name)
+ xit_testcase.set("success", str(test.status).lower())
+
+ for bug in test.getBugs():
+ xit_bug = E.bug(bug.url)
+ xit_bug.set("type", bug.type)
+ xit_testcase.append(xit_bug)
+
+ for fix in test.getFixes():
+ xit_fix = E.fix(fix.text)
+ xit_fix.set("type", fix.type);
+ for arg, value in fix.extra_args.iteritems():
+ xit_fix.set(arg, value)
+ xit_testcase.append(xit_fix)
+
+ for info in test.getInfo():
+ xit_info = E.testinfo(info.text)
+ xit_info.set("type", info.type)
+ xit_testcase.append(xit_info)
+
+ xit_suite.append(xit_testcase)
+ xit_registry.append(xit_suite)
lxml.etree.cleanup_namespaces(xit_registries)
return lxml.etree.tostring(xit_registries, pretty_print=True)
@@ -765,18 +773,46 @@ class XITTestRegistryCLI:
if args.add:
self.merge_add_registries(args)
- def merge_add_registries(self, args):
- """Merge registry args.reg2 into regs.arg1, leaving all existing information in reg1 untouched"""
- reg1 = XITTestRegistry.fromXML(args.reg1)[0]
- reg2 = XITTestRegistry.fromXML(args.reg2)[0]
-
- # merge 2 into 1
+ def merge_registry(self, reg1, reg2):
tests2 = reg2.listTestNames()
for suite, name, status in tests2:
if reg1.getTest(suite, name) == None:
reg1.addTest(reg2.getTest(suite, name))
- self.registry_from_string(args, reg1.toXML());
+
+ def merge_add_registries(self, args):
+ """Merge registry args.reg2 into regs.arg1, leaving all existing information in reg1 untouched"""
+ regs1 = XITTestRegistry.fromXML(args.reg1)
+ regs2 = XITTestRegistry.fromXML(args.reg2)
+
+ if args.regname != None:
+ r1 = self.find_reg(args.regname, regs1)
+ r2 = self.find_reg(args.regname, regs2)
+ if r1 == None and r2 == None:
+ logging.error("Invalid registrys name '%s'" % (args.regname))
+ sys.exit(1)
+
+ if r2 == None:
+ pass # do nothing
+ elif r1 == None:
+ regs1.append(r2)
+ else:
+ self.merge_registry(r1, r2)
+ else:
+ succeeded = []
+ for r1 in regs1:
+ r2 = self.find_reg(r1.name, regs2)
+ if r2 == None:
+ continue
+ self.merge_registry(r1, r2)
+ succeeded.append(r1.name)
+
+ for r2 in regs2:
+ if r2.name in succeeded:
+ continue
+ regs1.append(r2)
+
+ self.registry_from_string(args, r1.toXML(regs1))
def add_bug(self, args):
registry = self.load_registry(args)