177
181
name = 'changelog'
179
def _rev_info(self, r, branch):
183
def __init__(self, limit=10, since=None):
188
super(ChangelogIngestJob, self).setup()
189
if self.since is None:
190
days_of_revisions = settings.get('days_of_revisions')
191
if days_of_revisions is not None:
192
cutoff = datetime.utcnow() - timedelta(int(days_of_revisions))
193
self.since = calendar.timegm(cutoff.timetuple())
196
def _rev_info(r, branch):
198
'authors': r.get_apparent_authors(),
181
199
"revno": branch.revision_id_to_revno(r.revision_id),
182
200
"committer": r.committer,
183
201
"created": r.timestamp,
188
206
def run(self, charm_data):
189
207
branch_dir = charm_data["branch_dir"]
190
transport = get_transport(branch_dir)
191
branch = Branch.open_from_transport(transport)
193
# We only want the last 10 changes, in descending order.
194
_, cur_rev_id = branch.last_revision_info()
195
spec = RevisionSpec.from_string("revno:-10")
196
last_rev_id = spec.as_revision_id(branch)
208
charm_data.update(self.get_changes(branch_dir))
210
def get_changes(self, branch_dir):
212
branch = Branch.open(branch_dir)
198
213
branch.lock_read()
200
graph = branch.repository.get_graph()
202
graph.iter_lefthand_ancestry(cur_rev_id, (last_rev_id,)))
203
if not cur_rev_id in revs:
204
revs.insert(0, cur_rev_id)
215
revisions = self.get_revisions(branch)
216
charm_data["changes"] = changes = []
218
changes.append(self._rev_info(r, branch))
219
if len(revisions) == 0:
223
last_change = changes[0]
224
first = branch.repository.get_revision(branch.get_rev_id(1))
225
first_change = self._rev_info(first, branch)
227
'last_change': last_change,
228
'first_change': first_change,
207
revisions = map(branch.repository.get_revision, revs)
209
charm_data["changes"] = changes = []
212
changes.append(self._rev_info(r, branch))
213
charm_data["last_change"] = changes[0]
214
charm_data["first_change"] = self._rev_info(
215
branch.repository.get_revision(
216
RevisionSpec.from_string("revno:1").as_revision_id(branch)),
234
def get_revisions(self, branch):
235
# We only want the last 10 changes, in descending order.
236
graph = branch.repository.get_graph()
237
cur_rev_id = branch.last_revision()
238
ancestry_iter = graph.iter_lefthand_ancestry(cur_rev_id)
240
for num, revision_id in enumerate(ancestry_iter):
241
if revision_id == NULL_REVISION:
243
revision = branch.repository.get_revision(revision_id)
244
if num >= self.limit:
245
if self.since is None or revision.timestamp < self.since:
247
revs.append(revision)
220
251
class IndexIngestJob(IngestJob):