annotate tests/test_template_keywords.py @ 1229:46523cdfd3b0 stable 1.6.3

pushmod: prepend "link " to base text for links http://svn.apache.org/viewvc?view=revision&revision=1223036 exposes what is arguably a bug in hgsubversion push code. Specifically, when we are receiving text from the server in an editor, we prepend a "link " to the text of symlinks when opening a file and strip it when closing a file. We don't, however, prepend "link " to the base we use when sending text changes to the server. This was working before because prior to that revision, the first thing subversion did was to check whether the entirety of the before text or the entirety of the after text was less than 64 bytes. In that case, it just sent the entirety of the after text as a single insert operation. I'd expect most, but not all symlinks to fit under the 64 byte limit, including the leading "link " text on the subversion end. After the change, the first thing subversion does is check for a leading match that is more than 4 bytes long, or that is the full length of the after text. In this case, it sends a copy operation for the leading match, and then goes into the if < 64 bytes remaining send the whole thing behavior. It also looks for trailing matches of more than 4 bytes even in the <64 byte case, but that's not what breaks the tests. Incidentally, changing the destination of long symlinks was broken even before this subversion change. This diff includes test additions that cover that breakage.
author David Schleimer <dschleimer@gmail.com>
date Thu, 07 Aug 2014 19:30:26 -0700
parents 8caf1226adec
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
684
8687c5aa4f35 Add svnrev, svnpath and svnuuid keyword.
Andi Albrecht <albrecht.andi@gmail.com>
parents:
diff changeset
1 import test_util
8687c5aa4f35 Add svnrev, svnpath and svnuuid keyword.
Andi Albrecht <albrecht.andi@gmail.com>
parents:
diff changeset
2
8687c5aa4f35 Add svnrev, svnpath and svnuuid keyword.
Andi Albrecht <albrecht.andi@gmail.com>
parents:
diff changeset
3 import unittest
8687c5aa4f35 Add svnrev, svnpath and svnuuid keyword.
Andi Albrecht <albrecht.andi@gmail.com>
parents:
diff changeset
4
8687c5aa4f35 Add svnrev, svnpath and svnuuid keyword.
Andi Albrecht <albrecht.andi@gmail.com>
parents:
diff changeset
5 from mercurial import commands
722
aa24148a7454 uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 721
diff changeset
6 from mercurial import error
684
8687c5aa4f35 Add svnrev, svnpath and svnuuid keyword.
Andi Albrecht <albrecht.andi@gmail.com>
parents:
diff changeset
7 from mercurial import ui
687
d424bd1ac647 templatekw: restore compatibility with hg < 1.5
Augie Fackler <durin42@gmail.com>
parents: 684
diff changeset
8 try:
d424bd1ac647 templatekw: restore compatibility with hg < 1.5
Augie Fackler <durin42@gmail.com>
parents: 684
diff changeset
9 from mercurial import templatekw
d424bd1ac647 templatekw: restore compatibility with hg < 1.5
Augie Fackler <durin42@gmail.com>
parents: 684
diff changeset
10 templatekw.keywords
d424bd1ac647 templatekw: restore compatibility with hg < 1.5
Augie Fackler <durin42@gmail.com>
parents: 684
diff changeset
11 except ImportError:
d424bd1ac647 templatekw: restore compatibility with hg < 1.5
Augie Fackler <durin42@gmail.com>
parents: 684
diff changeset
12 templatekw = None
684
8687c5aa4f35 Add svnrev, svnpath and svnuuid keyword.
Andi Albrecht <albrecht.andi@gmail.com>
parents:
diff changeset
13
722
aa24148a7454 uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 721
diff changeset
14 try:
aa24148a7454 uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 721
diff changeset
15 from mercurial import revset
aa24148a7454 uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 721
diff changeset
16 revset.methods
aa24148a7454 uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 721
diff changeset
17 except ImportError:
835
f089ca13cc4c test_template_keywords.py: fix indentation of revset except block
Yonggang Luo <luoyonggang@gmail.com>
parents: 833
diff changeset
18 revset = None
684
8687c5aa4f35 Add svnrev, svnpath and svnuuid keyword.
Andi Albrecht <albrecht.andi@gmail.com>
parents:
diff changeset
19
8687c5aa4f35 Add svnrev, svnpath and svnuuid keyword.
Andi Albrecht <albrecht.andi@gmail.com>
parents:
diff changeset
20 class CapturingUI(ui.ui):
8687c5aa4f35 Add svnrev, svnpath and svnuuid keyword.
Andi Albrecht <albrecht.andi@gmail.com>
parents:
diff changeset
21
8687c5aa4f35 Add svnrev, svnpath and svnuuid keyword.
Andi Albrecht <albrecht.andi@gmail.com>
parents:
diff changeset
22 def __init__(self, *args, **kwds):
8687c5aa4f35 Add svnrev, svnpath and svnuuid keyword.
Andi Albrecht <albrecht.andi@gmail.com>
parents:
diff changeset
23 super(CapturingUI, self).__init__(*args, **kwds)
8687c5aa4f35 Add svnrev, svnpath and svnuuid keyword.
Andi Albrecht <albrecht.andi@gmail.com>
parents:
diff changeset
24 self._output = ""
8687c5aa4f35 Add svnrev, svnpath and svnuuid keyword.
Andi Albrecht <albrecht.andi@gmail.com>
parents:
diff changeset
25
8687c5aa4f35 Add svnrev, svnpath and svnuuid keyword.
Andi Albrecht <albrecht.andi@gmail.com>
parents:
diff changeset
26 def write(self, msg, *args, **kwds):
8687c5aa4f35 Add svnrev, svnpath and svnuuid keyword.
Andi Albrecht <albrecht.andi@gmail.com>
parents:
diff changeset
27 self._output += msg
8687c5aa4f35 Add svnrev, svnpath and svnuuid keyword.
Andi Albrecht <albrecht.andi@gmail.com>
parents:
diff changeset
28
721
af817963897e test_template_keywords: use new requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 707
diff changeset
29
707
cb32d90f915e templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 687
diff changeset
30 class TestLogKeywords(test_util.TestBase):
721
af817963897e test_template_keywords: use new requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 707
diff changeset
31 @test_util.requiresmodule(templatekw)
af817963897e test_template_keywords: use new requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 707
diff changeset
32 def test_svn_keywords(self):
1177
8caf1226adec test_template_keywords: handle changeset output ordering change in hg 3.0
Augie Fackler <raf@durin42.com>
parents: 1044
diff changeset
33 defaults = {'date': None, 'rev': None, 'user': None, 'graph': True}
721
af817963897e test_template_keywords: use new requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 707
diff changeset
34 repo = self._load_fixture_and_fetch('two_revs.svndump')
af817963897e test_template_keywords: use new requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 707
diff changeset
35
af817963897e test_template_keywords: use new requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 707
diff changeset
36 # we want one commit that isn't from Subversion
af817963897e test_template_keywords: use new requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 707
diff changeset
37 self.commitchanges([('foo', 'foo', 'frobnicate\n')])
af817963897e test_template_keywords: use new requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 707
diff changeset
38
af817963897e test_template_keywords: use new requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 707
diff changeset
39 ui = CapturingUI()
1177
8caf1226adec test_template_keywords: handle changeset output ordering change in hg 3.0
Augie Fackler <raf@durin42.com>
parents: 1044
diff changeset
40 commands.log(ui, repo, template=(' rev: {rev} svnrev:{svnrev} '
8caf1226adec test_template_keywords: handle changeset output ordering change in hg 3.0
Augie Fackler <raf@durin42.com>
parents: 1044
diff changeset
41 'svnpath:{svnpath} svnuuid:{svnuuid}\n'),
8caf1226adec test_template_keywords: handle changeset output ordering change in hg 3.0
Augie Fackler <raf@durin42.com>
parents: 1044
diff changeset
42 **defaults)
8caf1226adec test_template_keywords: handle changeset output ordering change in hg 3.0
Augie Fackler <raf@durin42.com>
parents: 1044
diff changeset
43 print ui._output
8caf1226adec test_template_keywords: handle changeset output ordering change in hg 3.0
Augie Fackler <raf@durin42.com>
parents: 1044
diff changeset
44 self.assertEqual(ui._output.strip(), '''
8caf1226adec test_template_keywords: handle changeset output ordering change in hg 3.0
Augie Fackler <raf@durin42.com>
parents: 1044
diff changeset
45 rev: 2 svnrev: svnpath: svnuuid:
8caf1226adec test_template_keywords: handle changeset output ordering change in hg 3.0
Augie Fackler <raf@durin42.com>
parents: 1044
diff changeset
46 @
8caf1226adec test_template_keywords: handle changeset output ordering change in hg 3.0
Augie Fackler <raf@durin42.com>
parents: 1044
diff changeset
47 |
8caf1226adec test_template_keywords: handle changeset output ordering change in hg 3.0
Augie Fackler <raf@durin42.com>
parents: 1044
diff changeset
48 rev: 1 svnrev:3 svnpath:/trunk svnuuid:df2126f7-00ab-4d49-b42c-7e981dde0bcf
8caf1226adec test_template_keywords: handle changeset output ordering change in hg 3.0
Augie Fackler <raf@durin42.com>
parents: 1044
diff changeset
49 o
8caf1226adec test_template_keywords: handle changeset output ordering change in hg 3.0
Augie Fackler <raf@durin42.com>
parents: 1044
diff changeset
50 |
8caf1226adec test_template_keywords: handle changeset output ordering change in hg 3.0
Augie Fackler <raf@durin42.com>
parents: 1044
diff changeset
51 rev: 0 svnrev:2 svnpath:/trunk svnuuid:df2126f7-00ab-4d49-b42c-7e981dde0bcf
8caf1226adec test_template_keywords: handle changeset output ordering change in hg 3.0
Augie Fackler <raf@durin42.com>
parents: 1044
diff changeset
52 o
8caf1226adec test_template_keywords: handle changeset output ordering change in hg 3.0
Augie Fackler <raf@durin42.com>
parents: 1044
diff changeset
53 '''.strip())
687
d424bd1ac647 templatekw: restore compatibility with hg < 1.5
Augie Fackler <durin42@gmail.com>
parents: 684
diff changeset
54
723
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
55 @test_util.requiresmodule(revset)
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
56 @test_util.requiresmodule(templatekw)
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
57 def test_svn_revsets(self):
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
58 repo = self._load_fixture_and_fetch('two_revs.svndump')
722
aa24148a7454 uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 721
diff changeset
59
723
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
60 # we want one commit that isn't from Subversion
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
61 self.commitchanges([('foo', 'foo', 'frobnicate\n')])
722
aa24148a7454 uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 721
diff changeset
62
723
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
63 defaults = {'date': None, 'rev': ['fromsvn()'], 'user': None}
722
aa24148a7454 uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 721
diff changeset
64
723
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
65 ui = CapturingUI()
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
66 commands.log(ui, repo, template='{rev}:{svnrev} ', **defaults)
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
67 self.assertEqual(ui._output, '0:2 1:3 ')
722
aa24148a7454 uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 721
diff changeset
68
723
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
69 defaults = {'date': None, 'rev': ['svnrev(2)'], 'user': None}
722
aa24148a7454 uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 721
diff changeset
70
723
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
71 ui = CapturingUI()
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
72 commands.log(ui, repo, template='{rev}:{svnrev} ', **defaults)
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
73 self.assertEqual(ui._output, '0:2 ')
722
aa24148a7454 uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 721
diff changeset
74
723
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
75 defaults = {'date': None, 'rev': ['fromsvn(1)'], 'user': None}
722
aa24148a7454 uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 721
diff changeset
76
723
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
77 self.assertRaises(error.ParseError,
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
78 commands.log, self.ui(), repo,
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
79 template='{rev}:{svnrev} ', **defaults)
722
aa24148a7454 uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 721
diff changeset
80
723
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
81 defaults = {'date': None, 'rev': ['svnrev(1, 2)'], 'user': None}
722
aa24148a7454 uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 721
diff changeset
82
723
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
83 self.assertRaises(error.ParseError,
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
84 commands.log, self.ui(), repo,
4baa41e0f8ad revset tests: use requiresmodule decorator
Augie Fackler <durin42@gmail.com>
parents: 722
diff changeset
85 template='{rev}:{svnrev} ', **defaults)