93
111
File to send log to; by default stdout.
114
'reverse' (default) is latest to earliest;
115
'forward' is earliest to latest.
95
117
from osutils import format_date
96
118
from errors import BzrCheckError
97
from diff import compare_trees
98
119
from textui import show_status
123
mutter('get log for file_id %r' % specific_fileid)
100
125
if to_file == None:
102
127
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()
129
which_revs = branch.enum_history(direction)
131
if not (verbose or specific_fileid):
132
# no need to know what changed between revisions
133
with_deltas = deltas_for_log_dummy(branch, which_revs)
134
elif direction == 'reverse':
135
with_deltas = deltas_for_log_reverse(branch, which_revs)
137
raise NotImplementedError("sorry, verbose forward logs not done yet")
139
for revno, rev, delta in with_deltas:
141
if not delta.touches_file_id(specific_fileid):
145
# although we calculated it, throw it away without display
148
show_one_log(revno, rev, delta, show_ids, to_file, show_timezone)
152
def deltas_for_log_dummy(branch, which_revs):
153
for revno, revision_id in which_revs:
154
yield revno, branch.get_revision(revision_id), None
157
def deltas_for_log_reverse(branch, which_revs):
158
"""Compute deltas for display in reverse log.
160
Given a sequence of (revno, revision_id) pairs, return
163
The delta is from the given revision to the next one in the
164
sequence, which makes sense if the log is being displayed from
167
from tree import EmptyTree
168
from diff import compare_trees
170
last_revno = last_revision_id = last_tree = None
171
for revno, revision_id in which_revs:
172
this_tree = branch.revision_tree(revision_id)
173
this_revision = branch.get_revision(revision_id)
176
yield last_revno, last_revision, compare_trees(this_tree, last_tree, False)
179
last_revision = this_revision
180
last_tree = this_tree
183
this_tree = EmptyTree()
184
yield last_revno, last_revision, compare_trees(this_tree, last_tree, False)
117
191
from tree import EmptyTree
118
192
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
193
for revno, revision_id in which_revs:
149
194
precursor = revision_id
196
if revision_id != rev.revision_id:
197
raise BzrCheckError("retrieved wrong revision: %r"
198
% (revision_id, rev.revision_id))
201
this_tree = branch.revision_tree(revision_id)
202
delta = compare_trees(prev_tree, this_tree, want_unchanged=False)
203
prev_tree = this_tree
209
def show_one_log(revno, rev, delta, show_ids, to_file, show_timezone):
210
from osutils import format_date
212
print >>to_file, '-' * 60
213
print >>to_file, 'revno:', revno
215
print >>to_file, 'revision-id:', rev.revision_id
216
print >>to_file, 'committer:', rev.committer
217
print >>to_file, 'timestamp: %s' % (format_date(rev.timestamp, rev.timezone or 0,
220
print >>to_file, 'message:'
222
print >>to_file, ' (no message)'
224
for l in rev.message.split('\n'):
225
print >>to_file, ' ' + l
228
delta.show(to_file, show_ids)