~bzr-pqm/bzr/bzr.dev

2052.3.1 by John Arbash Meinel
Add tests to cleanup the copyright of all source files
1
# Copyright (C) 2005, 2006 Canonical Ltd
2
#
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 2 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
16
1759.2.1 by Jelmer Vernooij
Fix some types (found using aspell).
17
"""Display what revisions are missing in 'other' from 'this' and vice versa."""
1534.5.15 by Robert Collins
Review fixups
18
2490.1.2 by John Arbash Meinel
Cleanup according to PEP8 and some other small whitespace fixes
19
from bzrlib import ui
20
from bzrlib.log import (
2466.8.1 by Kent Gibson
Reworked LogFormatter API to simplify extending the attributes of the revision being logged. Added support for begin_log() and end_log() hooks in LogFormatters.
21
    LogRevision,
22
    )
2490.1.2 by John Arbash Meinel
Cleanup according to PEP8 and some other small whitespace fixes
23
from bzrlib.symbol_versioning import (
2466.8.1 by Kent Gibson
Reworked LogFormatter API to simplify extending the attributes of the revision being logged. Added support for begin_log() and end_log() hooks in LogFormatters.
24
    deprecated_function,
25
    zero_seventeen,
26
    )
1534.5.15 by Robert Collins
Review fixups
27
28
2466.8.1 by Kent Gibson
Reworked LogFormatter API to simplify extending the attributes of the revision being logged. Added support for begin_log() and end_log() hooks in LogFormatters.
29
@deprecated_function(zero_seventeen)
1185.54.19 by Aaron Bentley
All tests pass
30
def iter_log_data(revisions, revision_source, verbose):
2466.8.1 by Kent Gibson
Reworked LogFormatter API to simplify extending the attributes of the revision being logged. Added support for begin_log() and end_log() hooks in LogFormatters.
31
    for revision in iter_log_revisions(revisions, revision_source, verbose):
32
        yield revision.revno, revision.rev, revision.delta
33
34
35
def iter_log_revisions(revisions, revision_source, verbose):
1852.5.1 by Robert Collins
Deprecate EmptyTree in favour of using Repository.revision_tree.
36
    last_tree = revision_source.revision_tree(None)
1185.54.19 by Aaron Bentley
All tests pass
37
    last_rev_id = None
38
    for revno, rev_id in revisions:
39
        rev = revision_source.get_revision(rev_id)
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
40
        if verbose:
1185.67.1 by Aaron Bentley
Merged the mainline
41
            remote_tree = revision_source.revision_tree(rev_id)
1185.35.30 by Aaron Bentley
Fixed missing --verbose
42
            parent_rev_id = rev.parent_ids[0]
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
43
            if last_rev_id == parent_rev_id:
44
                parent_tree = last_tree
45
            else:
1185.54.19 by Aaron Bentley
All tests pass
46
                parent_tree = revision_source.revision_tree(parent_rev_id)
47
            revision_tree = revision_source.revision_tree(rev_id)
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
48
            last_rev_id = rev_id
49
            last_tree = revision_tree
2204.1.1 by John Arbash Meinel
'bzr missing -v' was showing adds as deletes.
50
            delta = revision_tree.changes_from(parent_tree)
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
51
        else:
52
            delta = None
2490.1.2 by John Arbash Meinel
Cleanup according to PEP8 and some other small whitespace fixes
53
        yield LogRevision(rev, revno, delta=delta)
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
54
1185.54.7 by Aaron Bentley
More refactoring, handled branches with no commits
55
1185.54.3 by Aaron Bentley
Factored out find_unmerged
56
def find_unmerged(local_branch, remote_branch):
1594.1.3 by Robert Collins
Fixup pb usage to use nested_progress_bar.
57
    progress = ui.ui_factory.nested_progress_bar()
1185.54.3 by Aaron Bentley
Factored out find_unmerged
58
    local_branch.lock_read()
59
    try:
60
        remote_branch.lock_read()
61
        try:
1185.54.9 by Aaron Bentley
Added revision-history shortcuts
62
            local_rev_history, local_rev_history_map = \
63
                _get_history(local_branch, progress, "local", 0)
64
            remote_rev_history, remote_rev_history_map = \
65
                _get_history(remote_branch, progress, "remote", 1)
66
            result = _shortcut(local_rev_history, remote_rev_history)
67
            if result is not None:
68
                local_extra, remote_extra = result
69
                local_extra = sorted_revisions(local_extra, 
70
                                               local_rev_history_map)
71
                remote_extra = sorted_revisions(remote_extra, 
72
                                                remote_rev_history_map)
73
                return local_extra, remote_extra
74
1185.67.2 by Aaron Bentley
Renamed Branch.storage to Branch.repository
75
            local_ancestry = _get_ancestry(local_branch.repository, progress, 
1185.67.1 by Aaron Bentley
Merged the mainline
76
                                           "local", 2, local_rev_history)
1185.67.2 by Aaron Bentley
Renamed Branch.storage to Branch.repository
77
            remote_ancestry = _get_ancestry(remote_branch.repository, progress,
1185.67.1 by Aaron Bentley
Merged the mainline
78
                                            "remote", 3, remote_rev_history)
1185.54.3 by Aaron Bentley
Factored out find_unmerged
79
            progress.update('pondering', 4, 5)
1185.54.6 by Aaron Bentley
Used more set operations
80
            extras = local_ancestry.symmetric_difference(remote_ancestry) 
81
            local_extra = extras.intersection(set(local_rev_history))
82
            remote_extra = extras.intersection(set(remote_rev_history))
1185.54.4 by Aaron Bentley
Restructured find_unmerged, so it returns lists of (revno, revision) pairs
83
            local_extra = sorted_revisions(local_extra, local_rev_history_map)
84
            remote_extra = sorted_revisions(remote_extra, 
85
                                            remote_rev_history_map)
1185.54.3 by Aaron Bentley
Factored out find_unmerged
86
                    
87
        finally:
88
            remote_branch.unlock()
89
    finally:
90
        local_branch.unlock()
1594.1.3 by Robert Collins
Fixup pb usage to use nested_progress_bar.
91
        progress.finished()
1185.54.4 by Aaron Bentley
Restructured find_unmerged, so it returns lists of (revno, revision) pairs
92
    return (local_extra, remote_extra)
93
1185.54.9 by Aaron Bentley
Added revision-history shortcuts
94
def _shortcut(local_rev_history, remote_rev_history):
95
    local_history = set(local_rev_history)
96
    remote_history = set(remote_rev_history)
97
    if len(local_rev_history) == 0:
98
        return set(), remote_history
99
    elif len(remote_rev_history) == 0:
100
        return local_history, set()
101
    elif local_rev_history[-1] in remote_history:
1185.54.10 by Aaron Bentley
Refactored shortcut
102
        return set(), _after(remote_rev_history, local_rev_history)
1185.54.9 by Aaron Bentley
Added revision-history shortcuts
103
    elif remote_rev_history[-1] in local_history:
1185.54.10 by Aaron Bentley
Refactored shortcut
104
        return _after(local_rev_history, remote_rev_history), set()
1185.54.9 by Aaron Bentley
Added revision-history shortcuts
105
    else:
106
        return None
107
1185.54.10 by Aaron Bentley
Refactored shortcut
108
def _after(larger_history, smaller_history):
109
    return set(larger_history[larger_history.index(smaller_history[-1])+1:])
1185.54.9 by Aaron Bentley
Added revision-history shortcuts
110
111
def _get_history(branch, progress, label, step):
112
    progress.update('%s history' % label, step, 5)
1185.54.7 by Aaron Bentley
More refactoring, handled branches with no commits
113
    rev_history = branch.revision_history()
114
    rev_history_map = dict(
1185.54.9 by Aaron Bentley
Added revision-history shortcuts
115
        [(rev, rev_history.index(rev) + 1)
1185.54.7 by Aaron Bentley
More refactoring, handled branches with no commits
116
         for rev in rev_history])
1185.54.9 by Aaron Bentley
Added revision-history shortcuts
117
    return rev_history, rev_history_map
118
1185.67.1 by Aaron Bentley
Merged the mainline
119
def _get_ancestry(repository, progress, label, step, rev_history):
1185.54.9 by Aaron Bentley
Added revision-history shortcuts
120
    progress.update('%s ancestry' % label, step, 5)
1185.54.7 by Aaron Bentley
More refactoring, handled branches with no commits
121
    if len(rev_history) > 0:
2490.2.33 by Aaron Bentley
Disable topological sorting of get_ancestry where sensible
122
        ancestry = set(repository.get_ancestry(rev_history[-1],
123
                       topo_sorted=False))
1185.54.7 by Aaron Bentley
More refactoring, handled branches with no commits
124
    else:
125
        ancestry = set()
1185.54.9 by Aaron Bentley
Added revision-history shortcuts
126
    return ancestry
1185.54.7 by Aaron Bentley
More refactoring, handled branches with no commits
127
    
128
1185.54.4 by Aaron Bentley
Restructured find_unmerged, so it returns lists of (revno, revision) pairs
129
def sorted_revisions(revisions, history_map):
130
    revisions = [(history_map[r],r) for r in revisions]
131
    revisions.sort()
132
    return revisions