From 60983a2a228ac0bdc5e2ac25a0df2f0dd41f05fa Mon Sep 17 00:00:00 2001 From: Sophist Date: Sat, 29 Apr 2017 13:27:15 +0100 Subject: [PATCH] Fix copymerge 1. Newsvals deduped 2. Oldvals in original sequence --- picard/script.py | 9 ++++++++- test/test_script.py | 7 ++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/picard/script.py b/picard/script.py index 78c5dd9b6..dd994642d 100644 --- a/picard/script.py +++ b/picard/script.py @@ -501,7 +501,14 @@ def func_copymerge(parser, new, old): old = "~" + old[1:] newvals = parser.context.getall(new) oldvals = parser.context.getall(old) - parser.context[new] = newvals + list(set(oldvals) - set(newvals)) + result = [] + for x in newvals: + if x not in result: + result.append(x) + for x in oldvals: + if x not in result: + result.append(x) + parser.context[new] = result return "" diff --git a/test/test_script.py b/test/test_script.py index d0793280a..9cc806906 100644 --- a/test/test_script.py +++ b/test/test_script.py @@ -274,7 +274,8 @@ class ScriptParserTest(unittest.TestCase): def _eval_and_check_copymerge(self, context, expected): self.parser.eval("$copymerge(target,source)", context) - self.assertEqual(sorted(self.parser.context.getall("target")), sorted(expected)) + #self.assertEqual(sorted(self.parser.context.getall("target")), sorted(expected)) + self.assertEqual(self.parser.context.getall("target"), expected) def test_cmd_copymerge_notarget(self): context = Metadata() @@ -290,8 +291,8 @@ class ScriptParserTest(unittest.TestCase): def test_cmd_copymerge_removedupes(self): context = Metadata() - context["target"] = ["tag1", "tag2"] - context["source"] = ["tag2", "tag3"] + context["target"] = ["tag1", "tag2", "tag1"] + context["source"] = ["tag2", "tag3", "tag2"] self._eval_and_check_copymerge(context, ["tag1", "tag2", "tag3"]) def test_cmd_copymerge_nonlist(self):