Submitter | Matt Harbison |
---|---|
Date | Nov. 4, 2014, 1:40 a.m. |
Message ID | <a96d95a52e71cb48df9d.1415065252@Envy> |
Download | mbox | patch |
Permalink | /patch/6553/ |
State | Accepted |
Headers | show |
Comments
On Nov 3, 2014, at 8:40 PM, Matt Harbison <matt_harbison@yahoo.com> wrote: > # HG changeset patch > # User Matt Harbison <matt_harbison@yahoo.com> > # Date 1415034483 18000 > # Mon Nov 03 12:08:03 2014 -0500 > # Branch stable > # Node ID a96d95a52e71cb48df9d361768b5bf9ddfa4b673 > # Parent 72a89cf86fcd78dfa500031b5734147e6b830fbc > templater: don't overwrite the keyword mapping in runsymbol() (issue4362) Queued for stable with enthusiasm. Fixes some other templater stuff that had been vexing me greatly. > > This keyword remapping was introduced in e06e9fd2d99f as part of converting > generator based iterators into list based iterators, mentioning "undesired > behavior in template" when a generator is exhausted, but doesn't say what and > introduces no tests. > > The problem with the remapping was that it corrupted the output for keywords > like 'extras', 'file_copies' and 'file_copies_switch' in templates such as: > > $ hg log -r 142b5d5ec9cc --template "{file_copies % ' File: {file_copy}\n'}" > File: mercurial/changelog.py (mercurial/hg.py) > File: mercurial/changelog.py (mercurial/hg.py) > File: mercurial/changelog.py (mercurial/hg.py) > File: mercurial/changelog.py (mercurial/hg.py) > File: mercurial/changelog.py (mercurial/hg.py) > File: mercurial/changelog.py (mercurial/hg.py) > File: mercurial/changelog.py (mercurial/hg.py) > File: mercurial/changelog.py (mercurial/hg.py) > > What was happening was that in the first call to runtemplate() inside runmap(), > 'lm' mapped the keyword (e.g. file_copies) to the appropriate showxxx() method. > On each subsequent call to runtemplate() in that loop however, the keyword was > mapped to a list of the first item's pieces, e.g.: > > 'file_copy': ['mercurial/changelog.py', ' (', 'mercurial/hg.py', ')'] > > Therefore, the dict for the second and any subsequent items were not processed > through the corresponding showxxx() method, and the first item's data was > reused. > > The 'extras' keyword regressed in de7e6c489412, and 'file_copies' regressed in > 0b241d7a8c62 for other reasons. The common thread of things fixed by this seems > to be when a list of dicts are passed to the templatekw._hybrid class. > > diff --git a/mercurial/templater.py b/mercurial/templater.py > --- a/mercurial/templater.py > +++ b/mercurial/templater.py > @@ -153,8 +153,6 @@ > return v(**mapping) > if isinstance(v, types.GeneratorType): > v = list(v) > - mapping[key] = v > - return v > return v > > def buildfilter(exp, context): > diff --git a/tests/test-convert-hg-source.t b/tests/test-convert-hg-source.t > --- a/tests/test-convert-hg-source.t > +++ b/tests/test-convert-hg-source.t > @@ -16,6 +16,12 @@ > $ hg copy foo baz > $ hg ci -m 'make bar and baz copies of foo' -d '2 0' > created new head > + > +Test that template can print all file copies (issue4362) > + $ hg log -r . --template "{file_copies % ' File: {file_copy}\n'}" > + File: bar (foo) > + File: baz (foo) > + > $ hg bookmark premerge1 > $ hg merge -r 1 > merging baz and foo to baz > diff --git a/tests/test-graft.t b/tests/test-graft.t > --- a/tests/test-graft.t > +++ b/tests/test-graft.t > @@ -478,6 +478,12 @@ > date: Thu Jan 01 00:00:00 1970 +0000 > summary: 2 > > +Test that template correctly expands more than one 'extra' (issue4362) > + $ hg -R ../converted log -r 7 --template "{extras % ' Extra: {extra}\n'}" > + Extra: branch=default > + Extra: convert_revision=ef0ef43d49e79e81ddafdc7997401ba0041efc82 > + Extra: source=e0213322b2c1a5d5d236c74e79666441bee67a7d > + > The transplant case > $ hg -R ../converted log -r tip --template "{rev}: {node}\n{join(extras, '\n')}\n" > 21: fbb6c5cc81002f2b4b49c9d731404688bcae5ade > _______________________________________________ > Mercurial-devel mailing list > Mercurial-devel@selenic.com > http://selenic.com/mailman/listinfo/mercurial-devel
Patch
diff --git a/mercurial/templater.py b/mercurial/templater.py --- a/mercurial/templater.py +++ b/mercurial/templater.py @@ -153,8 +153,6 @@ return v(**mapping) if isinstance(v, types.GeneratorType): v = list(v) - mapping[key] = v - return v return v def buildfilter(exp, context): diff --git a/tests/test-convert-hg-source.t b/tests/test-convert-hg-source.t --- a/tests/test-convert-hg-source.t +++ b/tests/test-convert-hg-source.t @@ -16,6 +16,12 @@ $ hg copy foo baz $ hg ci -m 'make bar and baz copies of foo' -d '2 0' created new head + +Test that template can print all file copies (issue4362) + $ hg log -r . --template "{file_copies % ' File: {file_copy}\n'}" + File: bar (foo) + File: baz (foo) + $ hg bookmark premerge1 $ hg merge -r 1 merging baz and foo to baz diff --git a/tests/test-graft.t b/tests/test-graft.t --- a/tests/test-graft.t +++ b/tests/test-graft.t @@ -478,6 +478,12 @@ date: Thu Jan 01 00:00:00 1970 +0000 summary: 2 +Test that template correctly expands more than one 'extra' (issue4362) + $ hg -R ../converted log -r 7 --template "{extras % ' Extra: {extra}\n'}" + Extra: branch=default + Extra: convert_revision=ef0ef43d49e79e81ddafdc7997401ba0041efc82 + Extra: source=e0213322b2c1a5d5d236c74e79666441bee67a7d + The transplant case $ hg -R ../converted log -r tip --template "{rev}: {node}\n{join(extras, '\n')}\n" 21: fbb6c5cc81002f2b4b49c9d731404688bcae5ade