[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

AltStyle によって変換されたページ (->オリジナル) /