1from tests import common
2from hglib import error
3from hglib.util import b, strtobytes
4
5class test_update(common.basetest):
6    def setUp(self):
7        common.basetest.setUp(self)
8        self.append('a', 'a')
9        self.rev0, self.node0 = self.client.commit(b('first'), addremove=True)
10        self.append('a', 'a')
11        self.rev1, self.node1 = self.client.commit(b('second'))
12
13    def test_basic(self):
14        u, m, r, ur = self.client.update(self.rev0)
15        self.assertEquals(u, 1)
16        self.assertEquals(m, 0)
17        self.assertEquals(r, 0)
18        self.assertEquals(ur, 0)
19
20    def test_unresolved(self):
21        self.client.update(self.rev0)
22        self.append('a', 'b')
23        u, m, r, ur = self.client.update()
24        self.assertEquals(u, 0)
25        self.assertEquals(m, 0)
26        self.assertEquals(r, 0)
27        self.assertEquals(ur, 1)
28        self.assertTrue((b('M'), b('a')) in self.client.status())
29
30    def test_merge(self):
31        self.append('a', '\n\n\n\nb')
32        rev2, node2 = self.client.commit(b('third'))
33        self.append('a', 'b')
34        self.client.commit(b('fourth'))
35        self.client.update(rev2)
36        old = open('a').read()
37        f = open('a', 'wb')
38        f.write(b('a') + old.encode('latin-1'))
39        f.close()
40        u, m, r, ur = self.client.update()
41        self.assertEquals(u, 0)
42        self.assertEquals(m, 1)
43        self.assertEquals(r, 0)
44        self.assertEquals(ur, 0)
45        self.assertEquals(self.client.status(), [(b('M'), b('a'))])
46
47    def test_tip(self):
48        self.client.update(self.rev0)
49        u, m, r, ur = self.client.update()
50        self.assertEquals(u, 1)
51        self.assertEquals(self.client.parents()[0].node, self.node1)
52
53        self.client.update(self.rev0)
54        self.append('a', 'b')
55        rev2, node2 = self.client.commit(b('new head'))
56        self.client.update(self.rev0)
57
58        self.client.update()
59        self.assertEquals(self.client.parents()[0].node, node2)
60
61    def test_check_clean(self):
62        self.assertRaises(ValueError, self.client.update, clean=True,
63                          check=True)
64
65    def test_clean(self):
66        old = open('a').read()
67        self.append('a', 'b')
68        self.assertRaises(error.CommandError, self.client.update, check=True)
69
70        u, m, r, ur = self.client.update(clean=True)
71        self.assertEquals(u, 1)
72        self.assertEquals(old, open('a').read())
73
74    def test_basic_plain(self):
75        f = open('.hg/hgrc', 'a')
76        f.write('[defaults]\nupdate=-v\n')
77        f.close()
78        self.test_basic()
79
80    def disabled_largefiles(self):
81        # we don't run reposetup after a session has started, so this
82        # test is broken
83        import os
84        f = open('.hg/hgrc', 'a')
85        f.write('[extensions]\nlargefiles=\n')
86        f.close()
87        self.append('b', 'a')
88        try:
89            self.client.rawcommand([b('add'), b('b'), b('--large')])
90        except error.CommandError:
91            return
92
93        rev2, node2 = self.client.commit(b('third'))
94        # Go back to 0
95        self.client.rawcommand([b('update'), strtobytes(self.rev0)],
96                                # Keep the 'changed' version
97                               prompt=lambda s, d: 'c\n')
98        u, m, r, ur = self.client.update(rev2, clean=True)
99        self.assertEquals(u, 2)
100        self.assertEquals(m, 0)
101        self.assertEquals(r, 0)
102        self.assertEquals(ur, 0)
103