annotate tests/test_tags.py @ 1547:910f56f0d09c

revset: make "fromsvn()" lazy "fromsvn()" could be a huge revset. Therefore a lazy version makes more sense. This also resolves a subtle ordering issue. See https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-August/103368.html for the context.
author Jun Wu <quark@fb.com>
date Tue, 19 Dec 2017 14:18:01 -0800
parents 9a6bb3657861
children d55c9d0ba350
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
643
d2ef7220a079 tests: import test_util as the first module in all relevant tests
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 596
diff changeset
1 import test_util
d2ef7220a079 tests: import test_util as the first module in all relevant tests
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 596
diff changeset
2
521
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
3 import os, sys, cStringIO, difflib
23
1f8854804795 Add tests for tags and fix a bug in the tag-finding code that was found by the tests.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
4 import unittest
1f8854804795 Add tests for tags and fix a bug in the tag-finding code that was found by the tests.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
5
453
bb612e625be6 tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents: 452
diff changeset
6 from mercurial import commands
1439
ab15749252b0 TagMap: stop automagically running 'hg svn rebuildmeta'
Augie Fackler <raf@durin42.com>
parents: 1321
diff changeset
7 from mercurial import error
23
1f8854804795 Add tests for tags and fix a bug in the tag-finding code that was found by the tests.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
8 from mercurial import hg
1f8854804795 Add tests for tags and fix a bug in the tag-finding code that was found by the tests.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
9 from mercurial import node
1f8854804795 Add tests for tags and fix a bug in the tag-finding code that was found by the tests.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
10 from mercurial import ui
1f8854804795 Add tests for tags and fix a bug in the tag-finding code that was found by the tests.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
11
1103
6e1dbf6cbc92 compathacks: new module to collect hacks to work around hg internals changing
Augie Fackler <raf@durin42.com>
parents: 1076
diff changeset
12 from hgsubversion import compathacks
474
63cb630d667d tags: handle the most recent commit being an edit to an svn tag properly
Augie Fackler <durin42@gmail.com>
parents: 453
diff changeset
13 from hgsubversion import svncommands
337
46e69be8e2c8 Reorganize to have a more conventional module structure.
Augie Fackler <durin42@gmail.com>
parents: 331
diff changeset
14 from hgsubversion import svnrepo
23
1f8854804795 Add tests for tags and fix a bug in the tag-finding code that was found by the tests.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
15
91
7d10165cf3d9 tests: Mock the mercurial.ui.ui class like we really should to capture output.
Augie Fackler <durin42@gmail.com>
parents: 78
diff changeset
16 class TestTags(test_util.TestBase):
1076
58b2d84df5e7 test_tags: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
17 stupid_mode_tests = True
58b2d84df5e7 test_tags: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
18
58b2d84df5e7 test_tags: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
19 def test_tags(self):
58b2d84df5e7 test_tags: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
20 repo = self._load_fixture_and_fetch('basic_tag_tests.svndump')
376
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
21 self.assertEqual(sorted(repo.tags()), ['copied_tag', 'tag_r3', 'tip'])
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
22 self.assertEqual(repo['tag_r3'], repo['copied_tag'])
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
23 self.assertEqual(repo['tag_r3'].rev(), 1)
91
7d10165cf3d9 tests: Mock the mercurial.ui.ui class like we really should to capture output.
Augie Fackler <durin42@gmail.com>
parents: 78
diff changeset
24
1076
58b2d84df5e7 test_tags: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
25 def test_remove_tag(self):
58b2d84df5e7 test_tags: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
26 repo = self._load_fixture_and_fetch('remove_tag_test.svndump')
376
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
27 self.assertEqual(repo['tag_r3'].rev(), 1)
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
28 self.assert_('copied_tag' not in repo.tags())
91
7d10165cf3d9 tests: Mock the mercurial.ui.ui class like we really should to capture output.
Augie Fackler <durin42@gmail.com>
parents: 78
diff changeset
29
1076
58b2d84df5e7 test_tags: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
30 def test_rename_tag(self):
530
76e9504db03b test_tags: rewrite both the test and the fixture script
Patrick Mezard <pmezard@gmail.com>
parents: 521
diff changeset
31 expected = """\
76e9504db03b test_tags: rewrite both the test and the fixture script
Patrick Mezard <pmezard@gmail.com>
parents: 521
diff changeset
32 node: hg=default@2:svn=trunk@4
76e9504db03b test_tags: rewrite both the test and the fixture script
Patrick Mezard <pmezard@gmail.com>
parents: 521
diff changeset
33 tagging r3
76e9504db03b test_tags: rewrite both the test and the fixture script
Patrick Mezard <pmezard@gmail.com>
parents: 521
diff changeset
34 tag_r3: hg=default@1:svn=trunk@3
76e9504db03b test_tags: rewrite both the test and the fixture script
Patrick Mezard <pmezard@gmail.com>
parents: 521
diff changeset
35
76e9504db03b test_tags: rewrite both the test and the fixture script
Patrick Mezard <pmezard@gmail.com>
parents: 521
diff changeset
36 node: hg=default@3:svn=trunk@5
76e9504db03b test_tags: rewrite both the test and the fixture script
Patrick Mezard <pmezard@gmail.com>
parents: 521
diff changeset
37 tag from a tag
76e9504db03b test_tags: rewrite both the test and the fixture script
Patrick Mezard <pmezard@gmail.com>
parents: 521
diff changeset
38 tag_r3: hg=default@1:svn=trunk@3
76e9504db03b test_tags: rewrite both the test and the fixture script
Patrick Mezard <pmezard@gmail.com>
parents: 521
diff changeset
39 copied_tag: hg=default@1:svn=trunk@3
76e9504db03b test_tags: rewrite both the test and the fixture script
Patrick Mezard <pmezard@gmail.com>
parents: 521
diff changeset
40
76e9504db03b test_tags: rewrite both the test and the fixture script
Patrick Mezard <pmezard@gmail.com>
parents: 521
diff changeset
41 node: hg=default@4:svn=trunk@6
76e9504db03b test_tags: rewrite both the test and the fixture script
Patrick Mezard <pmezard@gmail.com>
parents: 521
diff changeset
42 rename a tag
76e9504db03b test_tags: rewrite both the test and the fixture script
Patrick Mezard <pmezard@gmail.com>
parents: 521
diff changeset
43 tag_r3: hg=default@1:svn=trunk@3
76e9504db03b test_tags: rewrite both the test and the fixture script
Patrick Mezard <pmezard@gmail.com>
parents: 521
diff changeset
44 copied_tag: hg=default@1:svn=trunk@3
76e9504db03b test_tags: rewrite both the test and the fixture script
Patrick Mezard <pmezard@gmail.com>
parents: 521
diff changeset
45 copied_tag: hg=default@-1:svn=unk@unk
76e9504db03b test_tags: rewrite both the test and the fixture script
Patrick Mezard <pmezard@gmail.com>
parents: 521
diff changeset
46 other_tag_r3: hg=default@1:svn=trunk@3
76e9504db03b test_tags: rewrite both the test and the fixture script
Patrick Mezard <pmezard@gmail.com>
parents: 521
diff changeset
47 """
1076
58b2d84df5e7 test_tags: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
48 self._test_tags('rename_tag_test.svndump', expected)
91
7d10165cf3d9 tests: Mock the mercurial.ui.ui class like we really should to capture output.
Augie Fackler <durin42@gmail.com>
parents: 78
diff changeset
49
1076
58b2d84df5e7 test_tags: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
50 def test_branch_from_tag(self):
58b2d84df5e7 test_tags: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
51 repo = self._load_fixture_and_fetch('branch_from_tag.svndump')
1103
6e1dbf6cbc92 compathacks: new module to collect hacks to work around hg internals changing
Augie Fackler <raf@durin42.com>
parents: 1076
diff changeset
52 self.assert_('branch_from_tag' in compathacks.branchset(repo))
376
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
53 self.assertEqual(repo[1], repo['tag_r3'])
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
54 self.assertEqual(repo['branch_from_tag'].parents()[0], repo['copied_tag'])
91
7d10165cf3d9 tests: Mock the mercurial.ui.ui class like we really should to capture output.
Augie Fackler <durin42@gmail.com>
parents: 78
diff changeset
55
1076
58b2d84df5e7 test_tags: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
56 def test_tag_by_renaming_branch(self):
58b2d84df5e7 test_tags: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
57 repo = self._load_fixture_and_fetch('tag_by_rename_branch.svndump')
425
f5222d021665 tests: fix for new branch heads change in upstream hg.
Augie Fackler <durin42@gmail.com>
parents: 399
diff changeset
58 branches = set(repo[h] for h in repo.heads())
375
af9fc01299b4 Make branch closing more Mercurial-like.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 337
diff changeset
59 self.assert_('dummy' not in branches)
596
066453cf2014 test_tags: improve test output.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 573
diff changeset
60 self.assertEqual(repo['dummy'], repo['tip'].parents()[0],
066453cf2014 test_tags: improve test output.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 573
diff changeset
61 '%r != %r[0]' % (repo['dummy'],
066453cf2014 test_tags: improve test output.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 573
diff changeset
62 repo['tip'].parents()))
375
af9fc01299b4 Make branch closing more Mercurial-like.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 337
diff changeset
63 extra = repo['tip'].extra().copy()
af9fc01299b4 Make branch closing more Mercurial-like.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 337
diff changeset
64 extra.pop('convert_revision', None)
af9fc01299b4 Make branch closing more Mercurial-like.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 337
diff changeset
65 self.assertEqual(extra, {'branch': 'dummy', 'close': '1'})
91
7d10165cf3d9 tests: Mock the mercurial.ui.ui class like we really should to capture output.
Augie Fackler <durin42@gmail.com>
parents: 78
diff changeset
66
379
e1b23a6ca093 test_tags: Add a test that verifies tags get deleted properly even in the presence of somewhat odd branching.
Augie Fackler <durin42@gmail.com>
parents: 376
diff changeset
67 def test_deletion_of_tag_on_trunk_after_branching(self):
e1b23a6ca093 test_tags: Add a test that verifies tags get deleted properly even in the presence of somewhat odd branching.
Augie Fackler <durin42@gmail.com>
parents: 376
diff changeset
68 repo = self._load_fixture_and_fetch('tag_deletion_tag_branch.svndump')
425
f5222d021665 tests: fix for new branch heads change in upstream hg.
Augie Fackler <durin42@gmail.com>
parents: 399
diff changeset
69 branches = set(repo[h].extra()['branch'] for h in repo.heads())
379
e1b23a6ca093 test_tags: Add a test that verifies tags get deleted properly even in the presence of somewhat odd branching.
Augie Fackler <durin42@gmail.com>
parents: 376
diff changeset
70 self.assertEqual(branches, set(['default', 'from_2', ]))
e1b23a6ca093 test_tags: Add a test that verifies tags get deleted properly even in the presence of somewhat odd branching.
Augie Fackler <durin42@gmail.com>
parents: 376
diff changeset
71 self.assertEqual(
e1b23a6ca093 test_tags: Add a test that verifies tags get deleted properly even in the presence of somewhat odd branching.
Augie Fackler <durin42@gmail.com>
parents: 376
diff changeset
72 repo.tags(),
e1b23a6ca093 test_tags: Add a test that verifies tags get deleted properly even in the presence of somewhat odd branching.
Augie Fackler <durin42@gmail.com>
parents: 376
diff changeset
73 {'tip': 'g\xdd\xcd\x93\x03g\x1e\x7f\xa6-[V%\x99\x07\xd3\x9d>(\x94',
e1b23a6ca093 test_tags: Add a test that verifies tags get deleted properly even in the presence of somewhat odd branching.
Augie Fackler <durin42@gmail.com>
parents: 376
diff changeset
74 'new_tag': '=\xb8^\xb5\x18\xa9M\xdb\xf9\xb62Z\xa0\xb5R6+\xfe6.'})
e1b23a6ca093 test_tags: Add a test that verifies tags get deleted properly even in the presence of somewhat odd branching.
Augie Fackler <durin42@gmail.com>
parents: 376
diff changeset
75
381
a441ba143ac8 tags: fix handling for certain nonstandard tag layouts.
Augie Fackler <durin42@gmail.com>
parents: 379
diff changeset
76 def test_tags_in_unusual_location(self):
a441ba143ac8 tags: fix handling for certain nonstandard tag layouts.
Augie Fackler <durin42@gmail.com>
parents: 379
diff changeset
77 repo = self._load_fixture_and_fetch('unusual_tags.svndump')
a441ba143ac8 tags: fix handling for certain nonstandard tag layouts.
Augie Fackler <durin42@gmail.com>
parents: 379
diff changeset
78 branches = set(repo[h].extra()['branch']
425
f5222d021665 tests: fix for new branch heads change in upstream hg.
Augie Fackler <durin42@gmail.com>
parents: 399
diff changeset
79 for h in repo.heads())
381
a441ba143ac8 tags: fix handling for certain nonstandard tag layouts.
Augie Fackler <durin42@gmail.com>
parents: 379
diff changeset
80 self.assertEqual(branches, set(['default', 'dev_branch']))
a441ba143ac8 tags: fix handling for certain nonstandard tag layouts.
Augie Fackler <durin42@gmail.com>
parents: 379
diff changeset
81 tags = repo.tags()
a441ba143ac8 tags: fix handling for certain nonstandard tag layouts.
Augie Fackler <durin42@gmail.com>
parents: 379
diff changeset
82 del tags['tip']
a441ba143ac8 tags: fix handling for certain nonstandard tag layouts.
Augie Fackler <durin42@gmail.com>
parents: 379
diff changeset
83 self.assertEqual(
a441ba143ac8 tags: fix handling for certain nonstandard tag layouts.
Augie Fackler <durin42@gmail.com>
parents: 379
diff changeset
84 tags,
a441ba143ac8 tags: fix handling for certain nonstandard tag layouts.
Augie Fackler <durin42@gmail.com>
parents: 379
diff changeset
85 {'blah/trunktag': '\xd3$@\xd7\xd8Nu\xce\xa6%\xf1u\xd9b\x1a\xb2\x81\xc2\xb0\xb1',
a441ba143ac8 tags: fix handling for certain nonstandard tag layouts.
Augie Fackler <durin42@gmail.com>
parents: 379
diff changeset
86 'versions/branch_version': 'I\x89\x1c>z#\xfc._K#@:\xd6\x1f\x96\xd6\x83\x1b|',
a441ba143ac8 tags: fix handling for certain nonstandard tag layouts.
Augie Fackler <durin42@gmail.com>
parents: 379
diff changeset
87 })
a441ba143ac8 tags: fix handling for certain nonstandard tag layouts.
Augie Fackler <durin42@gmail.com>
parents: 379
diff changeset
88
1076
58b2d84df5e7 test_tags: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
89 def test_most_recent_is_edited(self):
58b2d84df5e7 test_tags: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
90 repo, repo_path = self.load_and_fetch('most-recent-is-edit-tag.svndump')
474
63cb630d667d tags: handle the most recent commit being an edit to an svn tag properly
Augie Fackler <durin42@gmail.com>
parents: 453
diff changeset
91 self.repo.ui.status(
63cb630d667d tags: handle the most recent commit being an edit to an svn tag properly
Augie Fackler <durin42@gmail.com>
parents: 453
diff changeset
92 "Note: this test failing may be because of a rebuildmeta failure.\n"
63cb630d667d tags: handle the most recent commit being an edit to an svn tag properly
Augie Fackler <durin42@gmail.com>
parents: 453
diff changeset
93 "You should check that before assuming issues with this test.\n")
63cb630d667d tags: handle the most recent commit being an edit to an svn tag properly
Augie Fackler <durin42@gmail.com>
parents: 453
diff changeset
94 wc2_path = self.wc_path + '2'
816
86d124a8768e Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents: 643
diff changeset
95 src, dest = test_util.hgclone(repo.ui, self.wc_path, wc2_path, update=False)
930
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 916
diff changeset
96 dest = test_util.getlocalpeer(dest)
474
63cb630d667d tags: handle the most recent commit being an edit to an svn tag properly
Augie Fackler <durin42@gmail.com>
parents: 453
diff changeset
97 svncommands.rebuildmeta(repo.ui,
63cb630d667d tags: handle the most recent commit being an edit to an svn tag properly
Augie Fackler <durin42@gmail.com>
parents: 453
diff changeset
98 dest,
867
50c13e01c7e3 test_util: add a load_and_fetch() returning the repo_path
Patrick Mezard <patrick@mezard.eu>
parents: 865
diff changeset
99 args=[test_util.fileurl(repo_path), ])
1076
58b2d84df5e7 test_tags: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
100 commands.pull(self.repo.ui, self.repo)
474
63cb630d667d tags: handle the most recent commit being an edit to an svn tag properly
Augie Fackler <durin42@gmail.com>
parents: 453
diff changeset
101 dtags, srctags = dest.tags(), self.repo.tags()
63cb630d667d tags: handle the most recent commit being an edit to an svn tag properly
Augie Fackler <durin42@gmail.com>
parents: 453
diff changeset
102 dtags.pop('tip')
63cb630d667d tags: handle the most recent commit being an edit to an svn tag properly
Augie Fackler <durin42@gmail.com>
parents: 453
diff changeset
103 srctags.pop('tip')
63cb630d667d tags: handle the most recent commit being an edit to an svn tag properly
Augie Fackler <durin42@gmail.com>
parents: 453
diff changeset
104 self.assertEqual(dtags, srctags)
63cb630d667d tags: handle the most recent commit being an edit to an svn tag properly
Augie Fackler <durin42@gmail.com>
parents: 453
diff changeset
105 self.assertEqual(dest.heads(), self.repo.heads())
63cb630d667d tags: handle the most recent commit being an edit to an svn tag properly
Augie Fackler <durin42@gmail.com>
parents: 453
diff changeset
106
1076
58b2d84df5e7 test_tags: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
107 def test_edited_tag(self):
58b2d84df5e7 test_tags: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
108 repo = self._load_fixture_and_fetch('commit-to-tag.svndump')
547
9e6499c415a9 tags: fix files edited during tag creation
Augie Fackler <durin42@gmail.com>
parents: 545
diff changeset
109 headcount = 6
9e6499c415a9 tags: fix files edited during tag creation
Augie Fackler <durin42@gmail.com>
parents: 545
diff changeset
110 self.assertEqual(len(repo.heads()), headcount)
447
0d3b5acb1d51 tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents: 425
diff changeset
111 heads = repo.heads()
0d3b5acb1d51 tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents: 425
diff changeset
112 openheads = [h for h in heads if not repo[h].extra().get('close', False)]
0d3b5acb1d51 tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents: 425
diff changeset
113 closedheads = set(heads) - set(openheads)
453
bb612e625be6 tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents: 452
diff changeset
114 self.assertEqual(len(openheads), 1)
832
e9af7eba88db globally: clean up whitespace around operators and commas to conform with PEP8
Yonggang Luo <luoyonggang@gmail.com>
parents: 816
diff changeset
115 self.assertEqual(len(closedheads), headcount - 1)
453
bb612e625be6 tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents: 452
diff changeset
116 closedheads = sorted(list(closedheads),
832
e9af7eba88db globally: clean up whitespace around operators and commas to conform with PEP8
Yonggang Luo <luoyonggang@gmail.com>
parents: 816
diff changeset
117 cmp=lambda x, y: cmp(repo[x].rev(), repo[y].rev()))
453
bb612e625be6 tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents: 452
diff changeset
118
452
ae35c389cdef tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents: 451
diff changeset
119 # closeme has no open heads
ae35c389cdef tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents: 451
diff changeset
120 for h in openheads:
ae35c389cdef tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents: 451
diff changeset
121 self.assertNotEqual('closeme', repo[openheads[0]].branch())
ae35c389cdef tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents: 451
diff changeset
122
ae35c389cdef tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents: 451
diff changeset
123 self.assertEqual(1, len(self.repo.branchheads('magic')))
ae35c389cdef tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents: 451
diff changeset
124
547
9e6499c415a9 tags: fix files edited during tag creation
Augie Fackler <durin42@gmail.com>
parents: 545
diff changeset
125 alsoedit, editlater, closeme, willedit, editcreate, = closedheads
447
0d3b5acb1d51 tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents: 425
diff changeset
126 self.assertEqual(
449
bda5b47ad2a2 tags: handle editing a tag and its source branch simultaneously
Augie Fackler <durin42@gmail.com>
parents: 447
diff changeset
127 repo[willedit].extra(),
447
0d3b5acb1d51 tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents: 425
diff changeset
128 {'close': '1',
0d3b5acb1d51 tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents: 425
diff changeset
129 'branch': 'magic',
453
bb612e625be6 tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents: 452
diff changeset
130 'convert_revision': 'svn:af82cc90-c2d2-43cd-b1aa-c8a78449440a/tags/will-edit@19'})
449
bda5b47ad2a2 tags: handle editing a tag and its source branch simultaneously
Augie Fackler <durin42@gmail.com>
parents: 447
diff changeset
131 self.assertEqual(willedit, repo.tags()['will-edit'])
1482
253b2ab253a1 tests: add some sorted() calls on unsorted sets
Augie Fackler <raf@durin42.com>
parents: 1321
diff changeset
132 self.assertEqual(sorted(repo['will-edit'].manifest().keys()),
253b2ab253a1 tests: add some sorted() calls on unsorted sets
Augie Fackler <raf@durin42.com>
parents: 1321
diff changeset
133 ['alpha', 'beta', 'gamma'])
449
bda5b47ad2a2 tags: handle editing a tag and its source branch simultaneously
Augie Fackler <durin42@gmail.com>
parents: 447
diff changeset
134 self.assertEqual(
bda5b47ad2a2 tags: handle editing a tag and its source branch simultaneously
Augie Fackler <durin42@gmail.com>
parents: 447
diff changeset
135 repo[alsoedit].extra(),
bda5b47ad2a2 tags: handle editing a tag and its source branch simultaneously
Augie Fackler <durin42@gmail.com>
parents: 447
diff changeset
136 {'close': '1',
bda5b47ad2a2 tags: handle editing a tag and its source branch simultaneously
Augie Fackler <durin42@gmail.com>
parents: 447
diff changeset
137 'branch': 'magic',
451
e533e78f1b2f tags: handle tags from edited tags.
Augie Fackler <durin42@gmail.com>
parents: 450
diff changeset
138 'convert_revision': 'svn:af82cc90-c2d2-43cd-b1aa-c8a78449440a/tags/also-edit@14'})
e533e78f1b2f tags: handle tags from edited tags.
Augie Fackler <durin42@gmail.com>
parents: 450
diff changeset
139 self.assertEqual(repo[alsoedit].parents()[0].node(), repo.tags()['also-edit'])
1321
a36e87ae2380 tests: always compare manifest keys in sorted order
Siddharth Agarwal <sid0@fb.com>
parents: 1160
diff changeset
140 self.assertEqual(sorted(repo['also-edit'].manifest().keys()),
a36e87ae2380 tests: always compare manifest keys in sorted order
Siddharth Agarwal <sid0@fb.com>
parents: 1160
diff changeset
141 ['.hgtags', 'alpha', 'beta', 'delta', 'gamma', 'iota',
a36e87ae2380 tests: always compare manifest keys in sorted order
Siddharth Agarwal <sid0@fb.com>
parents: 1160
diff changeset
142 'lambda', 'omega'])
379
e1b23a6ca093 test_tags: Add a test that verifies tags get deleted properly even in the presence of somewhat odd branching.
Augie Fackler <durin42@gmail.com>
parents: 376
diff changeset
143
452
ae35c389cdef tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents: 451
diff changeset
144 self.assertEqual(editlater, repo['edit-later'].node())
ae35c389cdef tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents: 451
diff changeset
145 self.assertEqual(
ae35c389cdef tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents: 451
diff changeset
146 repo[closeme].extra(),
ae35c389cdef tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents: 451
diff changeset
147 {'close': '1',
ae35c389cdef tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents: 451
diff changeset
148 'branch': 'closeme',
ae35c389cdef tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents: 451
diff changeset
149 'convert_revision': 'svn:af82cc90-c2d2-43cd-b1aa-c8a78449440a/branches/closeme@17'})
547
9e6499c415a9 tags: fix files edited during tag creation
Augie Fackler <durin42@gmail.com>
parents: 545
diff changeset
150 self.assertEqual('alpha\nalpha\n', repo['edit-at-create']['alpha'].data())
452
ae35c389cdef tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents: 451
diff changeset
151
389
a8811c84e3ee tags: Fix an improper parent calculation.
Augie Fackler <durin42@gmail.com>
parents: 381
diff changeset
152 def test_tags_in_unusual_location(self):
a8811c84e3ee tags: Fix an improper parent calculation.
Augie Fackler <durin42@gmail.com>
parents: 381
diff changeset
153 repo = self._load_fixture_and_fetch('tag_name_same_as_branch.svndump')
a8811c84e3ee tags: Fix an improper parent calculation.
Augie Fackler <durin42@gmail.com>
parents: 381
diff changeset
154 self.assertEqual(len(repo.heads()), 1)
a8811c84e3ee tags: Fix an improper parent calculation.
Augie Fackler <durin42@gmail.com>
parents: 381
diff changeset
155 branches = set(repo[h].extra()['branch']
425
f5222d021665 tests: fix for new branch heads change in upstream hg.
Augie Fackler <durin42@gmail.com>
parents: 399
diff changeset
156 for h in repo.heads())
389
a8811c84e3ee tags: Fix an improper parent calculation.
Augie Fackler <durin42@gmail.com>
parents: 381
diff changeset
157 self.assertEqual(branches, set(['magic', ]))
a8811c84e3ee tags: Fix an improper parent calculation.
Augie Fackler <durin42@gmail.com>
parents: 381
diff changeset
158 tags = repo.tags()
a8811c84e3ee tags: Fix an improper parent calculation.
Augie Fackler <durin42@gmail.com>
parents: 381
diff changeset
159 del tags['tip']
a8811c84e3ee tags: Fix an improper parent calculation.
Augie Fackler <durin42@gmail.com>
parents: 381
diff changeset
160 self.assertEqual(
a8811c84e3ee tags: Fix an improper parent calculation.
Augie Fackler <durin42@gmail.com>
parents: 381
diff changeset
161 tags,
a8811c84e3ee tags: Fix an improper parent calculation.
Augie Fackler <durin42@gmail.com>
parents: 381
diff changeset
162 {'magic': '\xa2b\xb9\x03\xc6\xbd\x903\x95\xf5\x0f\x94\xcey\xc4E\xfaE6\xaa',
a8811c84e3ee tags: Fix an improper parent calculation.
Augie Fackler <durin42@gmail.com>
parents: 381
diff changeset
163 'magic2': '\xa3\xa2D\x86aM\xc0v\xb9\xb0\x18\x14\xad\xacwBUi}\xe2',
a8811c84e3ee tags: Fix an improper parent calculation.
Augie Fackler <durin42@gmail.com>
parents: 381
diff changeset
164 })
a8811c84e3ee tags: Fix an improper parent calculation.
Augie Fackler <durin42@gmail.com>
parents: 381
diff changeset
165
1439
ab15749252b0 TagMap: stop automagically running 'hg svn rebuildmeta'
Augie Fackler <raf@durin42.com>
parents: 1321
diff changeset
166 def test_old_tag_map_aborts(self):
453
bb612e625be6 tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents: 452
diff changeset
167 repo = self._load_fixture_and_fetch('tag_name_same_as_branch.svndump')
bb612e625be6 tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents: 452
diff changeset
168 tm = os.path.join(repo.path, 'svn', 'tagmap')
bb612e625be6 tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents: 452
diff changeset
169 open(tm, 'w').write('1\n')
1160
f06bb42bd2b2 svnmeta: turn tags into lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1103
diff changeset
170 # force tags to load since it is lazily loaded when needed
1439
ab15749252b0 TagMap: stop automagically running 'hg svn rebuildmeta'
Augie Fackler <raf@durin42.com>
parents: 1321
diff changeset
171 self.assertRaises(error.Abort, lambda: repo.svnmeta().tags)
453
bb612e625be6 tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents: 452
diff changeset
172
521
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
173 def _debug_print_tags(self, repo, ctx, fp):
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
174 def formatnode(ctx):
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
175 crev = ctx.extra().get('convert_revision', 'unk/unk@unk')
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
176 path, rev = crev.rsplit('@', 1)
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
177 path = path.split('/', 1)[-1]
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
178 branch = ctx.branch() or 'default'
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
179 return 'hg=%s@%d:svn=%s@%s' % (branch, ctx.rev(), path, rev)
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
180
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
181 w = fp.write
541
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
182 desc = ctx.description().splitlines()[0].strip()
521
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
183 if '.hgtags' not in ctx or not ctx['.hgtags'].data().strip():
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
184 return
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
185 w('node: %s\n' % formatnode(ctx))
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
186 w('%s\n' % desc)
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
187 for line in ctx['.hgtags'].data().splitlines(False):
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
188 node, name = line.split(None, 1)
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
189 w(' %s: %s\n' % (name, formatnode(repo[node])))
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
190 w('\n')
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
191
1076
58b2d84df5e7 test_tags: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
192 def _test_tags(self, testpath, expected):
58b2d84df5e7 test_tags: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
193 repo = self._load_fixture_and_fetch(testpath)
521
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
194 fp = cStringIO.StringIO()
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
195 for r in repo:
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
196 self._debug_print_tags(repo, repo[r], fp=fp)
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
197 output = fp.getvalue().strip()
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
198 expected = expected.strip()
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
199 if expected == output:
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
200 return
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
201 expected = expected.splitlines()
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
202 output = output.splitlines()
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
203 diff = difflib.unified_diff(expected, output, 'expected', 'output')
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
204 self.assert_(False, '\n' + '\n'.join(diff))
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
205
1076
58b2d84df5e7 test_tags: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
206 def test_tagging_into_tag(self):
521
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
207 expected = """\
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
208 node: hg=test@2:svn=branches/test@4
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
209 First tag.
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
210 test-0.1: hg=test@1:svn=branches/test@3
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
211
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
212 node: hg=test@3:svn=branches/test@5
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
213 Weird tag.
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
214 test-0.1: hg=test@1:svn=branches/test@3
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
215 test-0.1/test: hg=test@1:svn=branches/test@3
541
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
216
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
217 node: hg=test@4:svn=branches/test@6
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
218 Fix tag pt 1.
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
219 test-0.1: hg=test@1:svn=branches/test@3
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
220 test-0.1/test: hg=test@1:svn=branches/test@3
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
221 test-0.1/test: hg=default@-1:svn=unk@unk
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
222 test-0.1-real: hg=test@1:svn=branches/test@3
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
223
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
224 node: hg=test@5:svn=branches/test@7
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
225 Remove weird.
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
226 test-0.1: hg=test@1:svn=branches/test@3
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
227 test-0.1/test: hg=test@1:svn=branches/test@3
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
228 test-0.1/test: hg=default@-1:svn=unk@unk
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
229 test-0.1-real: hg=test@1:svn=branches/test@3
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
230 test-0.1: hg=default@-1:svn=unk@unk
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
231
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
232 node: hg=test@6:svn=branches/test@8
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
233 Fix tag pt 2.
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
234 test-0.1: hg=test@1:svn=branches/test@3
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
235 test-0.1/test: hg=test@1:svn=branches/test@3
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
236 test-0.1/test: hg=default@-1:svn=unk@unk
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
237 test-0.1-real: hg=test@1:svn=branches/test@3
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
238 test-0.1: hg=default@-1:svn=unk@unk
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
239 test-0.1-real: hg=default@-1:svn=unk@unk
d380e7e4175a Extend issue119 to full original weirdness
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
240 test-0.1: hg=test@1:svn=branches/test@3
521
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 474
diff changeset
241 """
1076
58b2d84df5e7 test_tags: use stupid mode metaclass
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1044
diff changeset
242 self._test_tags('renametagdir.svndump', expected)