/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.200.206 by Jelmer Vernooij
Move commands to a separate python module and register them lazily.
1
# Copyright (C) 2006-2009 Canonical Ltd
0.358.2 by Jelmer Vernooij
Refresh copyright headers, add my email.
2
# Copyright (C) 2012-2018 Jelmer Vernooij <jelmer@jelmer.uk>
0.200.206 by Jelmer Vernooij
Move commands to a separate python module and register them lazily.
3
4
# Authors: Robert Collins <robert.collins@canonical.com>
5
#          Jelmer Vernooij <jelmer@samba.org>
6
#          John Carr <john.carr@unrouted.co.uk>
7
#
8
# This program is free software; you can redistribute it and/or modify
9
# it under the terms of the GNU General Public License as published by
10
# the Free Software Foundation; either version 2 of the License, or
11
# (at your option) any later version.
12
#
13
# This program is distributed in the hope that it will be useful,
14
# but WITHOUT ANY WARRANTY; without even the implied warranty of
15
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
# GNU General Public License for more details.
17
#
18
# You should have received a copy of the GNU General Public License
19
# along with this program; if not, write to the Free Software
0.358.1 by Jelmer Vernooij
Fix FSF address.
20
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0.200.206 by Jelmer Vernooij
Move commands to a separate python module and register them lazily.
21
22
"""Git-specific subcommands for Bazaar."""
23
0.200.1594 by Jelmer Vernooij
Use absolute_import everywhere.
24
from __future__ import absolute_import
25
7143.11.1 by Jelmer Vernooij
Remove some unused imports.
26
import breezy.bzr  # noqa: F401
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
27
from ..commands import (
0.200.292 by Jelmer Vernooij
Fix formatting.
28
    Command,
0.200.423 by Jelmer Vernooij
Support pretty-printing git objects.
29
    display_command,
0.200.292 by Jelmer Vernooij
Fix formatting.
30
    )
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
31
from ..option import (
0.200.292 by Jelmer Vernooij
Fix formatting.
32
    Option,
33
    )
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
34
from ..sixish import (
6964.2.4 by Jelmer Vernooij
Fix running on python2.
35
    text_type,
7018.3.7 by Jelmer Vernooij
Fix remaining git tests.
36
    viewitems,
6964.2.4 by Jelmer Vernooij
Fix running on python2.
37
    )
0.200.206 by Jelmer Vernooij
Move commands to a separate python module and register them lazily.
38
0.228.1 by Jelmer Vernooij
Add basic tests for local fetch.
39
0.200.206 by Jelmer Vernooij
Move commands to a separate python module and register them lazily.
40
class cmd_git_import(Command):
41
    """Import all branches from a git repository.
42
43
    """
44
0.200.234 by Jelmer Vernooij
Derive to_location from from_location, simialr to bzr branch.
45
    takes_args = ["src_location", "dest_location?"]
0.200.206 by Jelmer Vernooij
Move commands to a separate python module and register them lazily.
46
0.200.1609 by Jelmer Vernooij
Only create colocated branches in git-import if the --colocated option is specified.
47
    takes_options = [
7143.15.2 by Jelmer Vernooij
Run autopep8.
48
        Option('colocated', help='Create colocated branches.'),
49
        ]
0.200.1609 by Jelmer Vernooij
Only create colocated branches in git-import if the --colocated option is specified.
50
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
51
    def _get_colocated_branch(self, target_controldir, name):
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
52
        from ..errors import NotBranchError
0.200.1452 by Jelmer Vernooij
Support colocated branches in 'bzr git-import', flatten namespace.
53
        try:
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
54
            return target_controldir.open_branch(name=name)
0.200.1452 by Jelmer Vernooij
Support colocated branches in 'bzr git-import', flatten namespace.
55
        except NotBranchError:
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
56
            return target_controldir.create_branch(name=name)
0.200.1452 by Jelmer Vernooij
Support colocated branches in 'bzr git-import', flatten namespace.
57
58
    def _get_nested_branch(self, dest_transport, dest_format, name):
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
59
        from ..controldir import ControlDir
60
        from ..errors import NotBranchError
0.200.1452 by Jelmer Vernooij
Support colocated branches in 'bzr git-import', flatten namespace.
61
        head_transport = dest_transport.clone(name)
62
        try:
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
63
            head_controldir = ControlDir.open_from_transport(head_transport)
0.200.1452 by Jelmer Vernooij
Support colocated branches in 'bzr git-import', flatten namespace.
64
        except NotBranchError:
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
65
            head_controldir = dest_format.initialize_on_transport_ex(
0.200.1452 by Jelmer Vernooij
Support colocated branches in 'bzr git-import', flatten namespace.
66
                head_transport, create_prefix=True)[1]
67
        try:
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
68
            return head_controldir.open_branch()
0.200.1452 by Jelmer Vernooij
Support colocated branches in 'bzr git-import', flatten namespace.
69
        except NotBranchError:
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
70
            return head_controldir.create_branch()
0.200.1452 by Jelmer Vernooij
Support colocated branches in 'bzr git-import', flatten namespace.
71
0.200.1609 by Jelmer Vernooij
Only create colocated branches in git-import if the --colocated option is specified.
72
    def run(self, src_location, dest_location=None, colocated=False):
0.200.247 by Jelmer Vernooij
Fix git-import.
73
        import os
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
74
        from .. import (
0.200.1141 by Jelmer Vernooij
Use transports in git-import.
75
            controldir,
0.200.1143 by Jelmer Vernooij
Add note about creating working trees.
76
            trace,
0.200.247 by Jelmer Vernooij
Fix git-import.
77
            ui,
0.200.1390 by Jelmer Vernooij
Set parent path in git-import.
78
            urlutils,
0.200.247 by Jelmer Vernooij
Fix git-import.
79
            )
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
80
        from ..controldir import (
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
81
            ControlDir,
0.200.247 by Jelmer Vernooij
Fix git-import.
82
            )
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
83
        from ..errors import (
7143.15.3 by Jelmer Vernooij
Fix pep8 issues in breezy.git.
84
            BzrError,
0.200.243 by Jelmer Vernooij
Error out on non-git repositories.
85
            BzrCommandError,
86
            NoRepositoryPresent,
87
            NotBranchError,
88
            )
7143.11.5 by Jelmer Vernooij
Fix an import.
89
        from ..i18n import gettext
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
90
        from ..repository import (
0.200.306 by Jelmer Vernooij
Fix tests, split up InterGitNonGitRepository.
91
            InterRepository,
92
            Repository,
93
            )
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
94
        from ..transport import get_transport
0.200.1644 by Jelmer Vernooij
More relative imports.
95
        from .branch import (
0.295.1 by Jelmer Vernooij
Split up branch formats.
96
            LocalGitBranch,
0.200.1487 by Jelmer Vernooij
Use peeling.
97
            )
0.200.1644 by Jelmer Vernooij
More relative imports.
98
        from .refs import (
0.200.1487 by Jelmer Vernooij
Use peeling.
99
            ref_to_branch_name,
100
            )
0.200.1644 by Jelmer Vernooij
More relative imports.
101
        from .repository import GitRepository
0.200.234 by Jelmer Vernooij
Derive to_location from from_location, simialr to bzr branch.
102
0.200.1141 by Jelmer Vernooij
Use transports in git-import.
103
        dest_format = controldir.ControlDirFormat.get_default_format()
0.361.1 by Jelmer Vernooij
Don't use assert.
104
        if dest_format is None:
7143.15.3 by Jelmer Vernooij
Fix pep8 issues in breezy.git.
105
            raise BzrError('no default format')
0.200.1141 by Jelmer Vernooij
Use transports in git-import.
106
0.200.234 by Jelmer Vernooij
Derive to_location from from_location, simialr to bzr branch.
107
        if dest_location is None:
108
            dest_location = os.path.basename(src_location.rstrip("/\\"))
109
0.200.1141 by Jelmer Vernooij
Use transports in git-import.
110
        dest_transport = get_transport(dest_location)
111
0.200.206 by Jelmer Vernooij
Move commands to a separate python module and register them lazily.
112
        source_repo = Repository.open(src_location)
0.200.243 by Jelmer Vernooij
Error out on non-git repositories.
113
        if not isinstance(source_repo, GitRepository):
7143.15.2 by Jelmer Vernooij
Run autopep8.
114
            raise BzrCommandError(
115
                gettext("%r is not a git repository") % src_location)
0.200.206 by Jelmer Vernooij
Move commands to a separate python module and register them lazily.
116
        try:
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
117
            target_controldir = ControlDir.open_from_transport(dest_transport)
0.200.206 by Jelmer Vernooij
Move commands to a separate python module and register them lazily.
118
        except NotBranchError:
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
119
            target_controldir = dest_format.initialize_on_transport_ex(
0.200.1142 by Jelmer Vernooij
Fix use of initialize_on_transport_ex.
120
                dest_transport, shared_repo=True)[1]
0.200.206 by Jelmer Vernooij
Move commands to a separate python module and register them lazily.
121
        try:
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
122
            target_repo = target_controldir.find_repository()
0.200.206 by Jelmer Vernooij
Move commands to a separate python module and register them lazily.
123
        except NoRepositoryPresent:
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
124
            target_repo = target_controldir.create_repository(shared=True)
0.200.206 by Jelmer Vernooij
Move commands to a separate python module and register them lazily.
125
0.200.569 by Jelmer Vernooij
Check for rich root target repository.
126
        if not target_repo.supports_rich_root():
7143.15.2 by Jelmer Vernooij
Run autopep8.
127
            raise BzrCommandError(
128
                gettext("Target repository doesn't support rich roots"))
0.200.569 by Jelmer Vernooij
Check for rich root target repository.
129
0.200.306 by Jelmer Vernooij
Fix tests, split up InterGitNonGitRepository.
130
        interrepo = InterRepository.get(source_repo, target_repo)
0.200.247 by Jelmer Vernooij
Fix git-import.
131
        mapping = source_repo.get_mapping()
0.200.1002 by Jelmer Vernooij
Fix regression in git-import.
132
        refs = interrepo.fetch()
0.200.247 by Jelmer Vernooij
Fix git-import.
133
        pb = ui.ui_factory.nested_progress_bar()
134
        try:
7018.3.7 by Jelmer Vernooij
Fix remaining git tests.
135
            for i, (name, sha) in enumerate(viewitems(refs)):
0.200.1055 by Jelmer Vernooij
Cope with unknown refs.
136
                try:
0.200.1452 by Jelmer Vernooij
Support colocated branches in 'bzr git-import', flatten namespace.
137
                    branch_name = ref_to_branch_name(name)
0.200.1055 by Jelmer Vernooij
Cope with unknown refs.
138
                except ValueError:
139
                    # Not a branch, ignore
0.200.271 by Jelmer Vernooij
Stop importing tags as branches as part of git-import.
140
                    continue
0.377.1 by Jelmer Vernooij
Fix some remote operations and add more tests.
141
                pb.update(gettext("creating branches"), i, len(refs))
7143.15.3 by Jelmer Vernooij
Fix pep8 issues in breezy.git.
142
                if (getattr(target_controldir._format, "colocated_branches",
143
                            False) and colocated):
0.200.1452 by Jelmer Vernooij
Support colocated branches in 'bzr git-import', flatten namespace.
144
                    if name == "HEAD":
145
                        branch_name = None
7143.15.2 by Jelmer Vernooij
Run autopep8.
146
                    head_branch = self._get_colocated_branch(
147
                        target_controldir, branch_name)
0.200.1452 by Jelmer Vernooij
Support colocated branches in 'bzr git-import', flatten namespace.
148
                else:
7143.15.2 by Jelmer Vernooij
Run autopep8.
149
                    head_branch = self._get_nested_branch(
150
                        dest_transport, dest_format, branch_name)
0.200.1487 by Jelmer Vernooij
Use peeling.
151
                revid = mapping.revision_id_foreign_to_bzr(sha)
7143.15.3 by Jelmer Vernooij
Fix pep8 issues in breezy.git.
152
                source_branch = LocalGitBranch(
153
                    source_repo.controldir, source_repo, sha)
0.239.1 by Jelmer Vernooij
Avoid re-connecting to fetch tags we already know.
154
                if head_branch.last_revision() != revid:
155
                    head_branch.generate_revision_history(revid)
0.200.273 by Jelmer Vernooij
Fix import of tags in git-import.
156
                source_branch.tags.merge_to(head_branch.tags)
0.200.1390 by Jelmer Vernooij
Set parent path in git-import.
157
                if not head_branch.get_parent():
0.200.1452 by Jelmer Vernooij
Support colocated branches in 'bzr git-import', flatten namespace.
158
                    url = urlutils.join_segment_parameters(
7143.15.3 by Jelmer Vernooij
Fix pep8 issues in breezy.git.
159
                        source_branch.base,
160
                        {"branch": urlutils.escape(branch_name)})
0.200.1390 by Jelmer Vernooij
Set parent path in git-import.
161
                    head_branch.set_parent(url)
0.200.247 by Jelmer Vernooij
Fix git-import.
162
        finally:
163
            pb.finished()
0.200.1469 by Jelmer Vernooij
Add more strings.
164
        trace.note(gettext(
165
            "Use 'bzr checkout' to create a working tree in "
166
            "the newly created branches."))
0.200.1143 by Jelmer Vernooij
Add note about creating working trees.
167
0.200.206 by Jelmer Vernooij
Move commands to a separate python module and register them lazily.
168
0.200.422 by Jelmer Vernooij
'bzr git-object' without arguments now prints the available git objects.
169
class cmd_git_object(Command):
170
    """List or display Git objects by SHA.
0.200.695 by Jelmer Vernooij
Clean up trailing whitespace.
171
0.200.422 by Jelmer Vernooij
'bzr git-object' without arguments now prints the available git objects.
172
    Cat a particular object's Git representation if a SHA is specified.
173
    List all available SHAs otherwise.
174
    """
0.200.419 by Jelmer Vernooij
Add hidden git-cat command that can cat git objects from Bazaar repositories.
175
176
    hidden = True
177
0.200.422 by Jelmer Vernooij
'bzr git-object' without arguments now prints the available git objects.
178
    aliases = ["git-objects", "git-cat"]
179
    takes_args = ["sha1?"]
0.200.695 by Jelmer Vernooij
Clean up trailing whitespace.
180
    takes_options = [Option('directory',
7143.15.2 by Jelmer Vernooij
Run autopep8.
181
                            short_name='d',
182
                            help='Location of repository.', type=text_type),
183
                     Option('pretty', help='Pretty-print objects.')]
0.200.423 by Jelmer Vernooij
Support pretty-printing git objects.
184
    encoding_type = 'exact'
0.200.419 by Jelmer Vernooij
Add hidden git-cat command that can cat git objects from Bazaar repositories.
185
0.200.423 by Jelmer Vernooij
Support pretty-printing git objects.
186
    @display_command
187
    def run(self, sha1=None, directory=".", pretty=False):
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
188
        from ..errors import (
0.200.419 by Jelmer Vernooij
Add hidden git-cat command that can cat git objects from Bazaar repositories.
189
            BzrCommandError,
190
            )
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
191
        from ..controldir import (
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
192
            ControlDir,
0.200.419 by Jelmer Vernooij
Add hidden git-cat command that can cat git objects from Bazaar repositories.
193
            )
0.200.1644 by Jelmer Vernooij
More relative imports.
194
        from .object_store import (
0.200.1484 by Jelmer Vernooij
Fix import.
195
            get_object_store,
196
            )
7233.2.1 by Jelmer Vernooij
Fix import for git-objects.
197
        from ..i18n import gettext
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
198
        controldir, _ = ControlDir.open_containing(directory)
199
        repo = controldir.find_repository()
0.200.452 by Jelmer Vernooij
Rename converter -> object_store, provide utility function for getting ObjectStore's.
200
        object_store = get_object_store(repo)
0.200.1788 by Jelmer Vernooij
Use context managers.
201
        with object_store.lock_read():
0.200.422 by Jelmer Vernooij
'bzr git-object' without arguments now prints the available git objects.
202
            if sha1 is not None:
203
                try:
7233.2.2 by Jelmer Vernooij
Fix python3 compat.
204
                    obj = object_store[sha1.encode('ascii')]
0.200.422 by Jelmer Vernooij
'bzr git-object' without arguments now prints the available git objects.
205
                except KeyError:
7143.15.2 by Jelmer Vernooij
Run autopep8.
206
                    raise BzrCommandError(
207
                        gettext("Object not found: %s") % sha1)
0.200.423 by Jelmer Vernooij
Support pretty-printing git objects.
208
                if pretty:
209
                    text = obj.as_pretty_string()
210
                else:
211
                    text = obj.as_raw_string()
212
                self.outf.write(text)
0.200.419 by Jelmer Vernooij
Add hidden git-cat command that can cat git objects from Bazaar repositories.
213
            else:
0.200.422 by Jelmer Vernooij
'bzr git-object' without arguments now prints the available git objects.
214
                for sha1 in object_store:
7233.2.2 by Jelmer Vernooij
Fix python3 compat.
215
                    self.outf.write("%s\n" % sha1.decode('ascii'))
0.200.873 by Jelmer Vernooij
Add convenience command for accessing virtual git refs.
216
217
218
class cmd_git_refs(Command):
219
    """Output all of the virtual refs for a repository.
220
221
    """
222
223
    hidden = True
224
0.200.1521 by Jelmer Vernooij
Fix git-refs command.
225
    takes_args = ["location?"]
0.200.873 by Jelmer Vernooij
Add convenience command for accessing virtual git refs.
226
227
    @display_command
0.200.1521 by Jelmer Vernooij
Fix git-refs command.
228
    def run(self, location="."):
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
229
        from ..controldir import (
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
230
            ControlDir,
0.200.873 by Jelmer Vernooij
Add convenience command for accessing virtual git refs.
231
            )
0.200.1644 by Jelmer Vernooij
More relative imports.
232
        from .refs import (
0.200.1487 by Jelmer Vernooij
Use peeling.
233
            get_refs_container,
0.200.873 by Jelmer Vernooij
Add convenience command for accessing virtual git refs.
234
            )
0.200.1644 by Jelmer Vernooij
More relative imports.
235
        from .object_store import (
0.200.873 by Jelmer Vernooij
Add convenience command for accessing virtual git refs.
236
            get_object_store,
237
            )
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
238
        controldir, _ = ControlDir.open_containing(location)
239
        repo = controldir.find_repository()
0.200.1212 by Jelmer Vernooij
Support read locking object stores.
240
        object_store = get_object_store(repo)
0.200.1788 by Jelmer Vernooij
Use context managers.
241
        with object_store.lock_read():
0.200.1648 by Jelmer Vernooij
Fix compatibility with newer versions of breezy.
242
            refs = get_refs_container(controldir, object_store)
7018.3.7 by Jelmer Vernooij
Fix remaining git tests.
243
            for k, v in sorted(viewitems(refs.as_dict())):
7143.15.2 by Jelmer Vernooij
Run autopep8.
244
                self.outf.write("%s -> %s\n" %
245
                                (k.decode('utf-8'), v.decode('utf-8')))
0.200.895 by Jelmer Vernooij
Add initial work on git-apply.
246
247
248
class cmd_git_apply(Command):
249
    """Apply a series of git-am style patches.
250
7143.15.3 by Jelmer Vernooij
Fix pep8 issues in breezy.git.
251
    This command will in the future probably be integrated into "bzr pull".
0.200.895 by Jelmer Vernooij
Add initial work on git-apply.
252
    """
253
0.200.1050 by Jelmer Vernooij
Add --force option to 'bzr git-apply'.
254
    takes_options = [
255
        Option('signoff', short_name='s', help='Add a Signed-off-by line.'),
0.272.1 by Martin Packman
Add help for git-apply --force option
256
        Option('force',
7143.15.2 by Jelmer Vernooij
Run autopep8.
257
               help='Apply patches even if tree has uncommitted changes.')
0.272.1 by Martin Packman
Add help for git-apply --force option
258
        ]
0.200.895 by Jelmer Vernooij
Add initial work on git-apply.
259
    takes_args = ["patches*"]
260
0.200.1049 by Jelmer Vernooij
Add --signoff option to 'bzr git-apply'.
261
    def _apply_patch(self, wt, f, signoff):
262
        """Apply a patch.
263
264
        :param wt: A Bazaar working tree object.
265
        :param f: Patch file to read.
266
        :param signoff: Add Signed-Off-By flag.
267
        """
7233.2.1 by Jelmer Vernooij
Fix import for git-objects.
268
        from ..i18n import gettext
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
269
        from ..errors import BzrCommandError
0.200.895 by Jelmer Vernooij
Add initial work on git-apply.
270
        from dulwich.patch import git_am_patch_split
0.200.1043 by Jelmer Vernooij
Finish git-apply command.
271
        import subprocess
0.200.895 by Jelmer Vernooij
Add initial work on git-apply.
272
        (c, diff, version) = git_am_patch_split(f)
0.200.1043 by Jelmer Vernooij
Finish git-apply command.
273
        # FIXME: Cope with git-specific bits in patch
0.200.1298 by Jelmer Vernooij
Fix compatibility with newer versions of dulwich.
274
        # FIXME: Add new files to working tree
275
        p = subprocess.Popen(["patch", "-p1"], stdin=subprocess.PIPE,
7143.15.2 by Jelmer Vernooij
Run autopep8.
276
                             cwd=wt.basedir)
0.200.1043 by Jelmer Vernooij
Finish git-apply command.
277
        p.communicate(diff)
278
        exitcode = p.wait()
279
        if exitcode != 0:
0.200.1483 by Jelmer Vernooij
Translate more strings.
280
            raise BzrCommandError(gettext("error running patch"))
7268.7.1 by Jelmer Vernooij
Fix git-apply.
281
        message = c.message.decode('utf-8')
0.200.1049 by Jelmer Vernooij
Add --signoff option to 'bzr git-apply'.
282
        if signoff:
283
            signed_off_by = wt.branch.get_config().username()
7268.7.1 by Jelmer Vernooij
Fix git-apply.
284
            message += "Signed-off-by: %s\n" % (signed_off_by, )
285
        wt.commit(authors=[c.author.decode('utf-8')], message=message)
0.200.895 by Jelmer Vernooij
Add initial work on git-apply.
286
0.200.1050 by Jelmer Vernooij
Add --force option to 'bzr git-apply'.
287
    def run(self, patches_list=None, signoff=False, force=False):
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
288
        from ..errors import UncommittedChanges
289
        from ..workingtree import WorkingTree
0.200.895 by Jelmer Vernooij
Add initial work on git-apply.
290
        if patches_list is None:
291
            patches_list = []
0.200.1040 by Jelmer Vernooij
Error out about applying to a tree with changes.
292
0.200.895 by Jelmer Vernooij
Add initial work on git-apply.
293
        tree, _ = WorkingTree.open_containing(".")
0.200.1050 by Jelmer Vernooij
Add --force option to 'bzr git-apply'.
294
        if tree.basis_tree().changes_from(tree).has_changed() and not force:
0.200.1040 by Jelmer Vernooij
Error out about applying to a tree with changes.
295
            raise UncommittedChanges(tree)
0.200.1788 by Jelmer Vernooij
Use context managers.
296
        with tree.lock_write():
0.200.895 by Jelmer Vernooij
Add initial work on git-apply.
297
            for patch in patches_list:
0.200.1788 by Jelmer Vernooij
Use context managers.
298
                with open(patch, 'r') as f:
0.200.1049 by Jelmer Vernooij
Add --signoff option to 'bzr git-apply'.
299
                    self._apply_patch(tree, f, signoff=signoff)
0.277.6 by Jelmer Vernooij
Add 'bzr git-push-pristine-tar' command.
300
301
302
class cmd_git_push_pristine_tar_deltas(Command):
303
    """Push pristine tar deltas to a git repository."""
304
305
    takes_options = [Option('directory',
7143.15.2 by Jelmer Vernooij
Run autopep8.
306
                            short_name='d',
307
                            help='Location of repository.', type=text_type)]
0.277.6 by Jelmer Vernooij
Add 'bzr git-push-pristine-tar' command.
308
    takes_args = ['target', 'package']
309
310
    def run(self, target, package, directory='.'):
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
311
        from ..branch import Branch
312
        from ..errors import (
0.277.6 by Jelmer Vernooij
Add 'bzr git-push-pristine-tar' command.
313
            BzrCommandError,
314
            NoSuchRevision,
315
            )
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
316
        from ..trace import warning
317
        from ..repository import Repository
0.200.1644 by Jelmer Vernooij
More relative imports.
318
        from .object_store import get_object_store
319
        from .pristine_tar import (
0.277.6 by Jelmer Vernooij
Add 'bzr git-push-pristine-tar' command.
320
            revision_pristine_tar_data,
321
            store_git_pristine_tar_data,
322
            )
323
        source = Branch.open_containing(directory)[0]
324
        target_bzr = Repository.open(target)
325
        target = getattr(target_bzr, '_git', None)
326
        if target is None:
327
            raise BzrCommandError("Target not a git repository")
0.200.1788 by Jelmer Vernooij
Use context managers.
328
        git_store = get_object_store(source.repository)
329
        with git_store.lock_read():
330
            tag_dict = source.tags.get_tag_dict()
331
            for name, revid in tag_dict.iteritems():
332
                try:
333
                    rev = source.repository.get_revision(revid)
334
                except NoSuchRevision:
335
                    continue
336
                try:
337
                    delta, kind = revision_pristine_tar_data(rev)
338
                except KeyError:
339
                    continue
340
                gitid = git_store._lookup_revision_sha1(revid)
7143.15.3 by Jelmer Vernooij
Fix pep8 issues in breezy.git.
341
                if (not (name.startswith('upstream/') or
342
                         name.startswith('upstream-'))):
343
                    warning(
344
                        "Unexpected pristine tar revision tagged %s. "
345
                        "Ignoring.", name)
0.200.1788 by Jelmer Vernooij
Use context managers.
346
                    continue
347
                upstream_version = name[len("upstream/"):]
7143.15.2 by Jelmer Vernooij
Run autopep8.
348
                filename = '%s_%s.orig.tar.%s' % (
349
                    package, upstream_version, kind)
7143.15.3 by Jelmer Vernooij
Fix pep8 issues in breezy.git.
350
                if gitid not in target:
351
                    warning(
352
                        "base git id %s for %s missing in target repository",
353
                        gitid, filename)
0.200.1788 by Jelmer Vernooij
Use context managers.
354
                store_git_pristine_tar_data(target, filename.encode('utf-8'),
7143.15.2 by Jelmer Vernooij
Run autopep8.
355
                                            delta, gitid)