From 5a488dc7fd9bcaa9a6eb76496847ebffa3809a7d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 5 Nov 2015 13:15:55 +0530 Subject: [PATCH] Preserve order when tag rule replacement contains multiple tags --- src/calibre/ebooks/metadata/tag_mapper.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/calibre/ebooks/metadata/tag_mapper.py b/src/calibre/ebooks/metadata/tag_mapper.py index 5995e6b0b7..e5d88c08df 100644 --- a/src/calibre/ebooks/metadata/tag_mapper.py +++ b/src/calibre/ebooks/metadata/tag_mapper.py @@ -63,7 +63,7 @@ def apply_rules(tag, rules): self_added = True else: replacement_tags.append(rtag) - tags.extendleft(replacement_tags) + tags.extendleft(reversed(replacement_tags)) else: if icu_lower(tag) == ltag: # Case change or self replacement @@ -104,9 +104,9 @@ def test(): rules = [{'action':'replace', 'query':'(.)1', 'match_type':'matches', 'replace':r'\g<1>2'}] assert map_tags(['t1', 'x1'], rules) == ['t2', 'x2'] rules = [{'action':'replace', 'query':'t1', 'match_type':'one_of', 'replace':'t2, t3'}] - assert map_tags(['t1', 'x1'], rules) == ['t3', 't2', 'x1'] + assert map_tags(['t1', 'x1'], rules) == ['t2', 't3', 'x1'] rules = [{'action':'replace', 'query':'(.)1', 'match_type':'matches', 'replace':r'\g<1>2,3'}] - assert map_tags(['t1', 'x1'], rules) == ['3', 't2', 'x2'] + assert map_tags(['t1', 'x1'], rules) == ['t2', '3', 'x2'] rules = [ {'action':'replace', 'query':'t1', 'match_type':'one_of', 'replace':r't2,t3'}, {'action':'remove', 'query':'t2', 'match_type':'one_of'}, @@ -118,7 +118,7 @@ def test(): {'action':'replace', 'query':'t1', 'match_type':'one_of', 'replace':'t2'}, {'action':'replace', 'query':'t2', 'match_type':'one_of', 'replace':'t1'}, ] - assert set(map_tags(['t1', 't2'], rules)) == {'t1', 't2'} + assert map_tags(['t1', 't2'], rules) == ['t1', 't2'] rules = [ {'action':'replace', 'query':'a', 'match_type':'one_of', 'replace':'A'}, ]