/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.205.33 by Jelmer Vernooij
Import simplifications for upgrade.
1
# Copyright (C) 2006-2009 by Jelmer Vernooij
0.436.177 by Jelmer Vernooij
Remove trailing whitespace.
2
#
0.205.12 by Jelmer Vernooij
Import upgrade code for upgrading mappings.
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 3 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
0.436.140 by Jelmer Vernooij
Remove checks for rebase.
16
17
0.205.12 by Jelmer Vernooij
Import upgrade code for upgrading mappings.
18
"""Upgrading revisions made with older versions of the mapping."""
19
0.436.255 by Jelmer Vernooij
Enable absolute imports everywhere.
20
from __future__ import absolute_import
0.436.140 by Jelmer Vernooij
Remove checks for rebase.
21
7406.3.2 by Jelmer Vernooij
Update for breezy.
22
from ... import (
0.436.173 by Jelmer Vernooij
Add rebase-foreign command.
23
    osutils,
0.205.44 by Jelmer Vernooij
Fix formatting.
24
    trace,
25
    ui,
26
    )
7406.3.2 by Jelmer Vernooij
Update for breezy.
27
from ...errors import (
0.205.33 by Jelmer Vernooij
Import simplifications for upgrade.
28
    BzrError,
0.436.196 by Jelmer Vernooij
Eliminate unnecessary function.
29
    )
7406.3.2 by Jelmer Vernooij
Update for breezy.
30
from .rebase import (
0.436.140 by Jelmer Vernooij
Remove checks for rebase.
31
    generate_transpose_plan,
0.436.204 by Jelmer Vernooij
Split up large method.
32
    CommitBuilderRevisionRewriter,
0.436.140 by Jelmer Vernooij
Remove checks for rebase.
33
    rebase,
34
    rebase_todo,
35
    )
0.205.12 by Jelmer Vernooij
Import upgrade code for upgrading mappings.
36
37
38
class UpgradeChangesContent(BzrError):
39
    """Inconsistency was found upgrading the mapping of a revision."""
40
    _fmt = """Upgrade will change contents in revision %(revid)s. Use --allow-changes to override."""
41
42
    def __init__(self, revid):
43
        self.revid = revid
44
45
0.436.173 by Jelmer Vernooij
Add rebase-foreign command.
46
def create_deterministic_revid(revid, new_parents):
47
    """Create a new deterministic revision id with specified new parents.
0.436.177 by Jelmer Vernooij
Remove trailing whitespace.
48
0.436.173 by Jelmer Vernooij
Add rebase-foreign command.
49
    Prevents suffix to be appended needlessly.
50
51
    :param revid: Original revision id.
52
    :return: New revision id
53
    """
54
    if "-rebase-" in revid:
55
        revid = revid[0:revid.rfind("-rebase-")]
56
    return revid + "-rebase-" + osutils.sha_string(":".join(new_parents))[:8]
57
58
59
def upgrade_tags(tags, repository, generate_rebase_map, determine_new_revid,
0.205.41 by Jelmer Vernooij
Fix typo.
60
                 allow_changes=False, verbose=False, branch_renames=None,
0.205.40 by Jelmer Vernooij
Don't upgrade tags to revisions in branch ancestry.
61
                 branch_ancestry=None):
0.205.16 by Jelmer Vernooij
Import fixes from bzr-svn.
62
    """Upgrade a tags dictionary."""
0.205.33 by Jelmer Vernooij
Import simplifications for upgrade.
63
    renames = {}
64
    if branch_renames is not None:
65
        renames.update(branch_renames)
0.205.16 by Jelmer Vernooij
Import fixes from bzr-svn.
66
    pb = ui.ui_factory.nested_progress_bar()
67
    try:
68
        tags_dict = tags.get_tag_dict()
0.436.144 by Jelmer Vernooij
Use iteritems
69
        for i, (name, revid) in enumerate(tags_dict.iteritems()):
0.205.16 by Jelmer Vernooij
Import fixes from bzr-svn.
70
            pb.update("upgrading tags", i, len(tags_dict))
7406.3.5 by Jelmer Vernooij
Fix formatting.
71
            if revid not in renames:
0.446.1 by Colin Watson
Skip tags referring to a ghost revision.
72
                try:
73
                    repository.lock_read()
74
                    revid_exists = repository.has_revision(revid)
75
                finally:
76
                    repository.unlock()
77
                if revid_exists:
7406.3.5 by Jelmer Vernooij
Fix formatting.
78
                    renames.update(upgrade_repository(
79
                        repository,
80
                        generate_rebase_map, determine_new_revid,
81
                        revision_id=revid, allow_changes=allow_changes,
82
                        verbose=verbose))
83
            if (revid in renames and
84
                    (branch_ancestry is None or revid not in branch_ancestry)):
0.205.16 by Jelmer Vernooij
Import fixes from bzr-svn.
85
                tags.set_tag(name, renames[revid])
86
    finally:
87
        pb.finished()
0.205.12 by Jelmer Vernooij
Import upgrade code for upgrading mappings.
88
89
0.436.173 by Jelmer Vernooij
Add rebase-foreign command.
90
def upgrade_branch(branch, generate_rebase_map, determine_new_revid,
0.227.1 by Jelmer Vernooij
Import foreign-mapping-upgrade.
91
                   allow_changes=False, verbose=False):
0.205.12 by Jelmer Vernooij
Import upgrade code for upgrading mappings.
92
    """Upgrade a branch to the current mapping version.
0.436.177 by Jelmer Vernooij
Remove trailing whitespace.
93
0.205.12 by Jelmer Vernooij
Import upgrade code for upgrading mappings.
94
    :param branch: Branch to upgrade.
95
    :param foreign_repository: Repository to fetch new revisions from
96
    :param allow_changes: Allow changes in mappings.
97
    :param verbose: Whether to print verbose list of rewrites
98
    """
99
    revid = branch.last_revision()
7406.3.5 by Jelmer Vernooij
Fix formatting.
100
    renames = upgrade_repository(
101
        branch.repository, generate_rebase_map,
102
        determine_new_revid, revision_id=revid,
103
        allow_changes=allow_changes, verbose=verbose)
0.205.40 by Jelmer Vernooij
Don't upgrade tags to revisions in branch ancestry.
104
    if revid in renames:
105
        branch.generate_revision_history(renames[revid])
7406.3.5 by Jelmer Vernooij
Fix formatting.
106
    ancestry = branch.repository.get_ancestry(
107
        branch.last_revision(), topo_sorted=False)
108
    upgrade_tags(
109
        branch.tags, branch.repository, generate_rebase_map,
110
        determine_new_revid, allow_changes=allow_changes, verbose=verbose,
111
        branch_renames=renames, branch_ancestry=ancestry)
0.205.12 by Jelmer Vernooij
Import upgrade code for upgrading mappings.
112
    return renames
113
114
115
def check_revision_changed(oldrev, newrev):
0.436.177 by Jelmer Vernooij
Remove trailing whitespace.
116
    """Check if two revisions are different. This is exactly the same
0.205.12 by Jelmer Vernooij
Import upgrade code for upgrading mappings.
117
    as Revision.equals() except that it does not check the revision_id."""
118
    if (newrev.inventory_sha1 != oldrev.inventory_sha1 or
7406.3.5 by Jelmer Vernooij
Fix formatting.
119
            newrev.timestamp != oldrev.timestamp or
120
            newrev.message != oldrev.message or
121
            newrev.timezone != oldrev.timezone or
122
            newrev.committer != oldrev.committer or
123
            newrev.properties != oldrev.properties):
0.205.12 by Jelmer Vernooij
Import upgrade code for upgrading mappings.
124
        raise UpgradeChangesContent(oldrev.revision_id)
125
126
0.436.173 by Jelmer Vernooij
Add rebase-foreign command.
127
def create_upgrade_plan(repository, generate_rebase_map, determine_new_revid,
0.436.172 by Jelmer Vernooij
Split up code for generating rebase map.
128
                        revision_id=None, allow_changes=False):
129
    """Generate a rebase plan for upgrading revisions.
130
131
    :param repository: Repository to do upgrade in
0.436.178 by Jelmer Vernooij
Finish rename to 'bzr-rewrite'.
132
    :param foreign_repository: Subversion repository to fetch new revisions
133
        from.
0.436.172 by Jelmer Vernooij
Split up code for generating rebase map.
134
    :param new_mapping: New mapping to use.
0.436.177 by Jelmer Vernooij
Remove trailing whitespace.
135
    :param revision_id: Revision to upgrade (None for all revisions in
0.436.172 by Jelmer Vernooij
Split up code for generating rebase map.
136
        repository.)
137
    :param allow_changes: Whether an upgrade is allowed to change the contents
138
        of revisions.
139
    :return: Tuple with a rebase plan and map of renamed revisions.
140
    """
141
142
    graph = repository.get_graph()
0.436.173 by Jelmer Vernooij
Add rebase-foreign command.
143
    upgrade_map = generate_rebase_map(revision_id)
0.436.177 by Jelmer Vernooij
Remove trailing whitespace.
144
0.205.12 by Jelmer Vernooij
Import upgrade code for upgrading mappings.
145
    if not allow_changes:
0.205.22 by Jelmer Vernooij
Merge improvements from bzr-svn.
146
        for oldrevid, newrevid in upgrade_map.iteritems():
0.205.12 by Jelmer Vernooij
Import upgrade code for upgrading mappings.
147
            oldrev = repository.get_revision(oldrevid)
148
            newrev = repository.get_revision(newrevid)
149
            check_revision_changed(oldrev, newrev)
150
151
    if revision_id is None:
0.436.177 by Jelmer Vernooij
Remove trailing whitespace.
152
        heads = repository.all_revision_ids()
0.205.12 by Jelmer Vernooij
Import upgrade code for upgrading mappings.
153
    else:
154
        heads = [revision_id]
155
7406.3.5 by Jelmer Vernooij
Fix formatting.
156
    plan = generate_transpose_plan(
157
        graph.iter_ancestry(heads), upgrade_map, graph, determine_new_revid)
7406.3.3 by Jelmer Vernooij
Fix python3 compatibility.
158
    def remove_parents(entry):
159
        (oldrevid, (newrevid, parents)) = entry
0.205.12 by Jelmer Vernooij
Import upgrade code for upgrading mappings.
160
        return (oldrevid, newrevid)
0.205.22 by Jelmer Vernooij
Merge improvements from bzr-svn.
161
    upgrade_map.update(dict(map(remove_parents, plan.iteritems())))
0.205.12 by Jelmer Vernooij
Import upgrade code for upgrading mappings.
162
163
    return (plan, upgrade_map)
164
0.436.177 by Jelmer Vernooij
Remove trailing whitespace.
165
166
def upgrade_repository(repository, generate_rebase_map,
167
                       determine_new_revid, revision_id=None,
0.436.173 by Jelmer Vernooij
Add rebase-foreign command.
168
                       allow_changes=False, verbose=False):
0.205.12 by Jelmer Vernooij
Import upgrade code for upgrading mappings.
169
    """Upgrade the revisions in repository until the specified stop revision.
170
171
    :param repository: Repository in which to upgrade.
172
    :param foreign_repository: Repository to fetch new revisions from.
173
    :param new_mapping: New mapping.
0.436.177 by Jelmer Vernooij
Remove trailing whitespace.
174
    :param revision_id: Revision id up until which to upgrade, or None for
0.205.12 by Jelmer Vernooij
Import upgrade code for upgrading mappings.
175
                        all revisions.
176
    :param allow_changes: Allow changes to mappings.
177
    :param verbose: Whether to print list of rewrites
178
    :return: Dictionary of mapped revisions
179
    """
180
    # Find revisions that need to be upgraded, create
181
    # dictionary with revision ids in key, new parents in value
7406.3.5 by Jelmer Vernooij
Fix formatting.
182
    with repository.lock_write():
183
        (plan, revid_renames) = create_upgrade_plan(
184
            repository, generate_rebase_map, determine_new_revid,
0.436.173 by Jelmer Vernooij
Add rebase-foreign command.
185
            revision_id=revision_id, allow_changes=allow_changes)
0.205.12 by Jelmer Vernooij
Import upgrade code for upgrading mappings.
186
        if verbose:
187
            for revid in rebase_todo(repository, plan):
0.436.167 by Jelmer Vernooij
Use trace.note rather than trace.info.
188
                trace.note("%s -> %s" % (revid, plan[revid][0]))
0.436.204 by Jelmer Vernooij
Split up large method.
189
        rebase(repository, plan, CommitBuilderRevisionRewriter(repository))
0.205.12 by Jelmer Vernooij
Import upgrade code for upgrading mappings.
190
        return revid_renames