/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
7476.2.1 by Jelmer Vernooij
Default to running Python 3.
1
#!/usr/bin/env python3
0.200.1515 by Jelmer Vernooij
Add tests for git_remote_helper.
2
# vim: expandtab
3
0.358.2 by Jelmer Vernooij
Refresh copyright headers, add my email.
4
# Copyright (C) 2011-2018 Jelmer Vernooij <jelmer@jelmer.uk>
0.200.1515 by Jelmer Vernooij
Add tests for git_remote_helper.
5
6
# This program is free software; you can redistribute it and/or modify
7
# it under the terms of the GNU General Public License as published by
8
# the Free Software Foundation; either version 2 of the License, or
9
# (at your option) any later version.
10
#
11
# This program is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
# GNU General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License
17
# along with this program; if not, write to the Free Software
0.358.1 by Jelmer Vernooij
Fix FSF address.
18
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0.200.1515 by Jelmer Vernooij
Add tests for git_remote_helper.
19
0.358.3 by Jelmer Vernooij
Enable absolute import.
20
"""Tests for the git remote helper."""
21
6964.2.1 by Jelmer Vernooij
Initial work to support brz-git on python3.
22
from io import BytesIO
0.200.1515 by Jelmer Vernooij
Add tests for git_remote_helper.
23
import os
7290.11.3 by Jelmer Vernooij
Add test for remote helper.
24
import subprocess
7290.11.6 by Jelmer Vernooij
Use the same python executable as for brz.
25
import sys
0.200.1515 by Jelmer Vernooij
Add tests for git_remote_helper.
26
0.200.1586 by Jelmer Vernooij
Fixes duplicate tag warnings in 'git-remote-bzr' helper.
27
from dulwich.repo import Repo
28
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
29
from ...tests import (
0.200.1582 by Jelmer Vernooij
Print error when bzr-fastimport is not installed.
30
    TestCaseWithTransport,
31
    )
7290.11.4 by Jelmer Vernooij
Check whether git-remote-bzr actually exists.
32
from ...tests.features import PathFeature
0.200.1515 by Jelmer Vernooij
Add tests for git_remote_helper.
33
0.200.1642 by Jelmer Vernooij
Use relative imports in tests.
34
from ..object_store import get_object_store
35
from ..git_remote_helper import (
0.200.1516 by Jelmer Vernooij
Add tests for capabilities command.
36
    RemoteHelper,
37
    open_local_dir,
0.200.1585 by Jelmer Vernooij
Add really basic test for remote helper 'fetch' implementation.
38
    fetch,
0.200.1516 by Jelmer Vernooij
Add tests for capabilities command.
39
    )
0.200.1515 by Jelmer Vernooij
Add tests for git_remote_helper.
40
7045.4.17 by Jelmer Vernooij
Fix tests.
41
from . import FastimportFeature
42
0.200.1515 by Jelmer Vernooij
Add tests for git_remote_helper.
43
0.200.1586 by Jelmer Vernooij
Fixes duplicate tag warnings in 'git-remote-bzr' helper.
44
def map_to_git_sha1(dir, bzr_revid):
45
    object_store = get_object_store(dir.open_repository())
0.200.1788 by Jelmer Vernooij
Use context managers.
46
    with object_store.lock_read():
0.200.1586 by Jelmer Vernooij
Fixes duplicate tag warnings in 'git-remote-bzr' helper.
47
        return object_store._lookup_revision_sha1(bzr_revid)
48
49
7290.11.4 by Jelmer Vernooij
Check whether git-remote-bzr actually exists.
50
git_remote_bzr_path = os.path.abspath(
51
    os.path.join(os.path.dirname(__file__), '..', 'git-remote-bzr'))
52
git_remote_bzr_feature = PathFeature(git_remote_bzr_path)
53
54
0.200.1515 by Jelmer Vernooij
Add tests for git_remote_helper.
55
class OpenLocalDirTests(TestCaseWithTransport):
56
57
    def test_from_env_dir(self):
58
        self.make_branch_and_tree('bla', format='git')
59
        self.overrideEnv('GIT_DIR', os.path.join(self.test_dir, 'bla', '.git'))
60
        open_local_dir()
61
62
    def test_from_dir(self):
63
        self.make_branch_and_tree('.', format='git')
64
        open_local_dir()
0.200.1516 by Jelmer Vernooij
Add tests for capabilities command.
65
66
0.200.1585 by Jelmer Vernooij
Add really basic test for remote helper 'fetch' implementation.
67
class FetchTests(TestCaseWithTransport):
68
69
    def setUp(self):
70
        super(FetchTests, self).setUp()
7143.15.2 by Jelmer Vernooij
Run autopep8.
71
        self.local_dir = self.make_branch_and_tree(
72
            'local', format='git').controldir
0.200.1585 by Jelmer Vernooij
Add really basic test for remote helper 'fetch' implementation.
73
        self.remote_tree = self.make_branch_and_tree('remote')
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
74
        self.remote_dir = self.remote_tree.controldir
0.200.1585 by Jelmer Vernooij
Add really basic test for remote helper 'fetch' implementation.
75
        self.shortname = 'bzr'
76
77
    def fetch(self, wants):
6964.2.1 by Jelmer Vernooij
Initial work to support brz-git on python3.
78
        outf = BytesIO()
0.200.1585 by Jelmer Vernooij
Add really basic test for remote helper 'fetch' implementation.
79
        fetch(outf, wants, self.shortname, self.remote_dir, self.local_dir)
80
        return outf.getvalue()
81
82
    def test_no_wants(self):
83
        r = self.fetch([])
6973.13.2 by Jelmer Vernooij
Fix some more tests.
84
        self.assertEqual(b"\n", r)
0.200.1585 by Jelmer Vernooij
Add really basic test for remote helper 'fetch' implementation.
85
0.200.1586 by Jelmer Vernooij
Fixes duplicate tag warnings in 'git-remote-bzr' helper.
86
    def test_simple(self):
87
        self.build_tree(['remote/foo'])
88
        self.remote_tree.add("foo")
89
        revid = self.remote_tree.commit("msg")
90
        git_sha1 = map_to_git_sha1(self.remote_dir, revid)
91
        out = self.fetch([(git_sha1, 'HEAD')])
6973.13.2 by Jelmer Vernooij
Fix some more tests.
92
        self.assertEqual(out, b"\n")
0.200.1586 by Jelmer Vernooij
Fixes duplicate tag warnings in 'git-remote-bzr' helper.
93
        r = Repo('local')
94
        self.assertTrue(git_sha1 in r.object_store)
7290.11.5 by Jelmer Vernooij
don't check for import, fastimport may not be installed.
95
        self.assertEqual({}, r.get_refs())
0.200.1586 by Jelmer Vernooij
Fixes duplicate tag warnings in 'git-remote-bzr' helper.
96
0.200.1585 by Jelmer Vernooij
Add really basic test for remote helper 'fetch' implementation.
97
7290.11.3 by Jelmer Vernooij
Add test for remote helper.
98
class ExecuteRemoteHelperTests(TestCaseWithTransport):
99
100
    def test_run(self):
7290.11.4 by Jelmer Vernooij
Check whether git-remote-bzr actually exists.
101
        self.requireFeature(git_remote_bzr_feature)
7290.11.3 by Jelmer Vernooij
Add test for remote helper.
102
        local_dir = self.make_branch_and_tree('local', format='git').controldir
103
        local_path = local_dir.control_transport.local_abspath('.')
104
        remote_tree = self.make_branch_and_tree('remote')
105
        remote_dir = remote_tree.controldir
106
        shortname = 'bzr'
107
        env = dict(os.environ)
108
        env['GIT_DIR'] = local_path
7290.11.7 by Jelmer Vernooij
Set PYTHONPATH.
109
        env['PYTHONPATH'] = ':'.join(sys.path)
7290.11.3 by Jelmer Vernooij
Add test for remote helper.
110
        p = subprocess.Popen(
7290.11.6 by Jelmer Vernooij
Use the same python executable as for brz.
111
            [sys.executable, git_remote_bzr_path, local_path, remote_dir.user_url],
7290.11.3 by Jelmer Vernooij
Add test for remote helper.
112
            stdin=subprocess.PIPE, stdout=subprocess.PIPE,
113
            stderr=subprocess.PIPE, env=env)
114
        (out, err) = p.communicate(b'capabilities\n')
115
        lines = out.splitlines()
7290.11.5 by Jelmer Vernooij
don't check for import, fastimport may not be installed.
116
        self.assertIn(b'push', lines, "no 'push' in %r, error: %r" % (lines, err))
7490.57.2 by Jelmer Vernooij
Fix test.
117
        self.assertEqual(
118
            b"git-remote-bzr is experimental and has not been optimized "
119
            b"for performance. Use 'brz fast-export' and 'git fast-import' "
120
            b"for large repositories.\n", err)
7290.11.3 by Jelmer Vernooij
Add test for remote helper.
121
122
0.200.1516 by Jelmer Vernooij
Add tests for capabilities command.
123
class RemoteHelperTests(TestCaseWithTransport):
124
125
    def setUp(self):
126
        super(RemoteHelperTests, self).setUp()
7143.15.2 by Jelmer Vernooij
Run autopep8.
127
        self.local_dir = self.make_branch_and_tree(
128
            'local', format='git').controldir
0.200.1581 by Jelmer Vernooij
Fix support for newer versions of bzr-fastimport, add more tests.
129
        self.remote_tree = self.make_branch_and_tree('remote')
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
130
        self.remote_dir = self.remote_tree.controldir
0.200.1516 by Jelmer Vernooij
Add tests for capabilities command.
131
        self.shortname = 'bzr'
7143.15.2 by Jelmer Vernooij
Run autopep8.
132
        self.helper = RemoteHelper(
133
            self.local_dir, self.shortname, self.remote_dir)
0.200.1516 by Jelmer Vernooij
Add tests for capabilities command.
134
135
    def test_capabilities(self):
6964.2.1 by Jelmer Vernooij
Initial work to support brz-git on python3.
136
        f = BytesIO()
0.200.1516 by Jelmer Vernooij
Add tests for capabilities command.
137
        self.helper.cmd_capabilities(f, [])
138
        capabs = f.getvalue()
7018.3.2 by Jelmer Vernooij
Fix some git tests.
139
        base = b"fetch\noption\npush\n"
7463.3.8 by Jelmer Vernooij
Fix test.
140
        self.assertTrue(capabs in (base + b"\n", base + b"import\nrefspec *:*\n\n"), capabs)
0.200.1517 by Jelmer Vernooij
Add test for option command in git-remote-helper.
141
142
    def test_option(self):
6964.2.1 by Jelmer Vernooij
Initial work to support brz-git on python3.
143
        f = BytesIO()
0.200.1517 by Jelmer Vernooij
Add test for option command in git-remote-helper.
144
        self.helper.cmd_option(f, [])
6973.13.2 by Jelmer Vernooij
Fix some more tests.
145
        self.assertEqual(b"unsupported\n", f.getvalue())
0.200.1517 by Jelmer Vernooij
Add test for option command in git-remote-helper.
146
0.200.1518 by Jelmer Vernooij
Add basic test for list command.
147
    def test_list_basic(self):
6964.2.1 by Jelmer Vernooij
Initial work to support brz-git on python3.
148
        f = BytesIO()
0.200.1518 by Jelmer Vernooij
Add basic test for list command.
149
        self.helper.cmd_list(f, [])
6964.2.3 by Jelmer Vernooij
Review comments.
150
        self.assertEqual(
7018.3.2 by Jelmer Vernooij
Fix some git tests.
151
            b'\n',
0.200.1518 by Jelmer Vernooij
Add basic test for list command.
152
            f.getvalue())
0.200.1581 by Jelmer Vernooij
Fix support for newer versions of bzr-fastimport, add more tests.
153
154
    def test_import(self):
7045.4.17 by Jelmer Vernooij
Fix tests.
155
        self.requireFeature(FastimportFeature)
7018.3.8 by Jelmer Vernooij
Disable some flaky tests on python3, allow running without fastimport.
156
        self.build_tree_contents([("remote/afile", b"somecontent")])
0.200.1581 by Jelmer Vernooij
Fix support for newer versions of bzr-fastimport, add more tests.
157
        self.remote_tree.add(["afile"])
7018.3.8 by Jelmer Vernooij
Disable some flaky tests on python3, allow running without fastimport.
158
        self.remote_tree.commit(b"A commit message", timestamp=1330445983,
7143.15.2 by Jelmer Vernooij
Run autopep8.
159
                                timezone=0, committer=b'Somebody <jrandom@example.com>')
6964.2.1 by Jelmer Vernooij
Initial work to support brz-git on python3.
160
        f = BytesIO()
7027.5.2 by Jelmer Vernooij
Fix some more git tests.
161
        self.helper.cmd_import(f, ["import", "refs/heads/master"])
6964.2.3 by Jelmer Vernooij
Review comments.
162
        self.assertEqual(
7194.1.3 by Jelmer Vernooij
Fix test.
163
            b'reset refs/heads/master\n'
7018.3.8 by Jelmer Vernooij
Disable some flaky tests on python3, allow running without fastimport.
164
            b'commit refs/heads/master\n'
165
            b'mark :1\n'
166
            b'committer Somebody <jrandom@example.com> 1330445983 +0000\n'
167
            b'data 16\n'
168
            b'A commit message\n'
169
            b'M 644 inline afile\n'
170
            b'data 11\n'
171
            b'somecontent\n',
0.200.1581 by Jelmer Vernooij
Fix support for newer versions of bzr-fastimport, add more tests.
172
            f.getvalue())