[Python-checkins] r86121 - tracker/instances/python-dev/scripts/roundup-summary
ezio.melotti
python-checkins at python.org
Tue Nov 2 16:37:17 CET 2010
Author: ezio.melotti
Date: Tue Nov 2 16:37:17 2010
New Revision: 86121
Log:
#358: Use deltas with the previous period in the summary report
Modified:
tracker/instances/python-dev/scripts/roundup-summary
Modified: tracker/instances/python-dev/scripts/roundup-summary
==============================================================================
--- tracker/instances/python-dev/scripts/roundup-summary (original)
+++ tracker/instances/python-dev/scripts/roundup-summary Tue Nov 2 16:37:17 2010
@@ -59,10 +59,10 @@
To view or respond to any of the issues listed below, click on the issue.
Do NOT respond to this message.
-Issues stats:
- open %(open)5d (%(open_new)+3d)
- closed %(closed)5d (%(closed_new)+3d)
- total %(total)5d (%(total_new)+3d)
+Issues counts and deltas:
+ open %(open)5d (%(open_delta)+3d)
+ closed %(closed)5d (%(closed_delta)+3d)
+ total %(total)5d (%(total_delta)+3d)
Open issues with patches: %(patches)-5d"""
@@ -207,29 +207,36 @@
start_date, end_date = self.start_date, self.end_date
start_str = start_date.pretty(format='%F') # %F -> yyyy-mm-dd
end_str = end_date.pretty(format='%F')
+ # counters for current values
open_tot = closed_tot = all_tot = 0
- open_new = closed_new = all_old = 0
+ # counters for previous values
+ open_old = closed_old = all_old = 0
with_patch = 0
patch_id = DB.keyword.lookup('patch')
for id, issue in self.issues.iteritems():
# don't include issues created after the end date
if issue['creation'] > end_date:
continue
+ all_tot += 1
if issue['creation'] < start_date:
all_old += 1
- all_tot += 1
+ # check if the issue was closed at the end of the previous
+ # period
+ if issue['last_period_status'] in OPTIONS.resolved:
+ closed_old += 1
+ else:
+ open_old += 1
+ # check if the issue is closed now
if issue['closed']:
closed_tot += 1
- if issue['closed_date'] >= start_date:
- closed_new += 1
else:
open_tot += 1
- if ((issue['creation'] >= start_date) or
- (issue['reopened_date'] >= start_date)):
- open_new += 1
if patch_id in issue['keyword_ids']:
with_patch += 1
- all_new = all_tot - all_old
+ all_delta = all_tot - all_old
+ open_delta = open_tot - open_old
+ closed_delta = closed_tot - closed_old
+ assert all_delta == open_delta + closed_delta
# save the values in an attribute to avoid calculating it twice
# when both the txt and the HTML header are needed (i.e. when sending
# HTML mails)
@@ -237,9 +244,9 @@
timespan='%s - %s' % (start_str, end_str),
tracker_url=DB.config.TRACKER_WEB,
tracker_name=DB.config.TRACKER_NAME,
- open=open_tot, open_new=open_new,
- closed=closed_tot, closed_new=closed_new,
- total=all_tot, total_new=all_new,
+ open=open_tot, open_delta=open_delta,
+ closed=closed_tot, closed_delta=closed_delta,
+ total=all_tot, total_delta=all_delta,
patches=with_patch,
)
return header % self.header_content
@@ -497,6 +504,7 @@
msgs_in_period = 0,
status = None,
real_status = sid2name(attrs['status']), # Avoid a bug in get_issue_attrs
+ last_period_status = None, # the status of the issue before start_date
actor = None,
activity = None,
keyword_ids = kwds,
@@ -543,6 +551,8 @@
# this trick catches the first time we are in the interval of interest
if helper['activity2'] < dates.to_value:
update(issue, helper)
+ status_changes = []
+ old_time = issue['creation']
for _, time, userid, act, data in helper['journal']:
in_period = dates.to_value > time >= dates.from_value
if in_period:
@@ -558,6 +568,8 @@
issue['msgs_in_period'] -= 1
if 'status' in data:
helper['status1'] = sid2name(data['status'])
+ status_changes.append((old_time, helper['status1']))
+ old_time = time
if time < dates.to_value:
# want the last reopener only
if reopened(helper) and not issue['reopened']:
@@ -573,6 +585,15 @@
issue['real_status'] in OPTIONS.resolved):
issue['closer'] = userid
issue['closed_date'] = time
+ status_changes.append((old_time, issue['real_status']))
+ # if the status didn't change and this is still None set it to 'open',
+ # leave it to None for new issues
+ if issue['creation'] < dates.from_value:
+ for time, status in status_changes:
+ if time < dates.from_value:
+ issue['last_period_status'] = status
+ if issue['last_period_status'] is None:
+ issue['last_period_status'] = 'open'
# get these set if not done before
update(issue, helper)
last_opened = issue['reopened_date'] or issue['creation']
More information about the Python-checkins
mailing list