annotate tests/test_tags.py @ 1526:5adfb81c4680

util: add method for forcing unicode objects back to utf8 bytes Use this to force all filenames to be bytes, even when underlying svn bindings really want to give us unicodes instead.
author Augie Fackler <raf@durin42.com>
date Thu, 31 Aug 2017 00:45:27 -0400
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)