13
13
# You should have received a copy of the GNU General Public License
14
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
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
17
"""Display what revisions are missing in 'other' from 'this' and vice versa."""
19
19
from bzrlib import (
21
repository as _mod_repository,
24
22
import bzrlib.revision as _mod_revision
90
88
:param tip_revno: The revision number for the tip revision
91
89
:param tip: The tip of mainline
92
90
:param backward: Show oldest versions first when True, newest versions
94
92
:return: [(revno, revision_id)] for all revisions in ancestry that
95
93
are left-hand parents from tip, or None if ancestry is None.
129
127
:param tip_revno: The revision number for the tip revision
130
128
:param tip: The tip of the ancsetry
131
129
:param backward: Show oldest versions first when True, newest versions
133
131
:return: [(revno, revision_id)] for all revisions in ancestry that
134
132
are parents from tip, or None if ancestry is None.
138
136
if not ancestry: #Empty ancestry, no need to do any work
141
mainline_revs, rev_nos, start_rev_id, end_rev_id = log._get_mainline_revs(
142
branch, None, tip_revno)
143
if not mainline_revs:
146
# This asks for all mainline revisions, which is size-of-history and
147
# should be addressed (but currently the only way to get correct
150
# mainline_revisions always includes an extra revision at the
151
# beginning, so don't request it.
152
parent_map = dict(((key, value) for key, value
153
in graph.iter_ancestry(mainline_revs[1:])
154
if value is not None))
155
# filter out ghosts; merge_sort errors on ghosts.
156
# XXX: is this needed here ? -- vila080910
157
rev_graph = _mod_repository._strip_NULL_ghosts(parent_map)
158
# XXX: what if rev_graph is empty now ? -- vila080910
159
merge_sorted_revisions = tsort.merge_sort(rev_graph, tip,
139
merge_sorted_revisions = branch.iter_merge_sorted_revisions()
162
140
# Now that we got the correct revnos, keep only the relevant
164
142
merge_sorted_revisions = [
165
(s, revid, n, d, e) for s, revid, n, d, e in merge_sorted_revisions
143
# log.reverse_by_depth expects seq_num to be present, but it is
144
# stripped by iter_merge_sorted_revisions()
145
(0, revid, n, d, e) for revid, n, d, e in merge_sorted_revisions
166
146
if revid in ancestry]
168
148
merge_sorted_revisions = log.reverse_by_depth(merge_sorted_revisions)