93
113
File to send log to; by default stdout.
116
'reverse' (default) is latest to earliest;
117
'forward' is earliest to latest.
120
If not None, only show revisions >= start_revision
123
If not None, only show revisions <= end_revision
95
125
from osutils import format_date
96
126
from errors import BzrCheckError
97
from diff import compare_trees
98
127
from textui import show_status
131
mutter('get log for file_id %r' % specific_fileid)
100
133
if to_file == None:
102
135
to_file = sys.stdout
105
file_id = branch.read_working_inventory().path2id(filename)
107
for revno, revid, why in find_touching_revisions(branch, file_id):
111
for i, revid in enumerate(branch.revision_history()):
114
branch._need_readlock()
137
which_revs = branch.enum_history(direction)
139
if not (verbose or specific_fileid):
140
# no need to know what changed between revisions
141
with_deltas = deltas_for_log_dummy(branch, which_revs)
142
elif direction == 'reverse':
143
with_deltas = deltas_for_log_reverse(branch, which_revs)
145
raise NotImplementedError("sorry, verbose forward logs not done yet")
147
for revno, rev, delta in with_deltas:
149
if not delta.touches_file_id(specific_fileid):
152
if start_revision is not None and revno < start_revision:
155
if end_revision is not None and revno > end_revision:
159
# although we calculated it, throw it away without display
162
show_one_log(revno, rev, delta, show_ids, to_file, show_timezone)
166
def deltas_for_log_dummy(branch, which_revs):
167
for revno, revision_id in which_revs:
168
yield revno, branch.get_revision(revision_id), None
171
def deltas_for_log_reverse(branch, which_revs):
172
"""Compute deltas for display in reverse log.
174
Given a sequence of (revno, revision_id) pairs, return
177
The delta is from the given revision to the next one in the
178
sequence, which makes sense if the log is being displayed from
181
from tree import EmptyTree
182
from diff import compare_trees
184
last_revno = last_revision_id = last_tree = None
185
for revno, revision_id in which_revs:
186
this_tree = branch.revision_tree(revision_id)
187
this_revision = branch.get_revision(revision_id)
190
yield last_revno, last_revision, compare_trees(this_tree, last_tree, False)
193
last_revision = this_revision
194
last_tree = this_tree
197
this_tree = EmptyTree()
198
yield last_revno, last_revision, compare_trees(this_tree, last_tree, False)
117
205
from tree import EmptyTree
118
206
prev_tree = EmptyTree()
119
for revno, revision_id in which_revs():
120
print >>to_file, '-' * 60
121
print >>to_file, 'revno:', revno
122
rev = branch.get_revision(revision_id)
124
print >>to_file, 'revision-id:', revision_id
125
print >>to_file, 'committer:', rev.committer
126
print >>to_file, 'timestamp: %s' % (format_date(rev.timestamp, rev.timezone or 0,
129
if revision_id != rev.revision_id:
130
raise BzrCheckError("retrieved wrong revision: %r"
131
% (revision_id, rev.revision_id))
133
print >>to_file, 'message:'
135
print >>to_file, ' (no message)'
137
for l in rev.message.split('\n'):
138
print >>to_file, ' ' + l
140
# Don't show a list of changed files if we were asked about
144
this_tree = branch.revision_tree(revision_id)
145
delta = compare_trees(prev_tree, this_tree, want_unchanged=False)
146
delta.show(to_file, show_ids)
147
prev_tree = this_tree
207
for revno, revision_id in which_revs:
149
208
precursor = revision_id
210
if revision_id != rev.revision_id:
211
raise BzrCheckError("retrieved wrong revision: %r"
212
% (revision_id, rev.revision_id))
215
this_tree = branch.revision_tree(revision_id)
216
delta = compare_trees(prev_tree, this_tree, want_unchanged=False)
217
prev_tree = this_tree
223
def show_one_log(revno, rev, delta, show_ids, to_file, show_timezone):
224
from osutils import format_date
226
print >>to_file, '-' * 60
227
print >>to_file, 'revno:', revno
229
print >>to_file, 'revision-id:', rev.revision_id
230
print >>to_file, 'committer:', rev.committer
231
print >>to_file, 'timestamp: %s' % (format_date(rev.timestamp, rev.timezone or 0,
234
print >>to_file, 'message:'
236
print >>to_file, ' (no message)'
238
for l in rev.message.split('\n'):
239
print >>to_file, ' ' + l
242
delta.show(to_file, show_ids)