blob: 64c655f5c37dabf33c311fd45b9d297acfc28b03 [file] [log] [blame]
Mike Frysingerc7f15932013-03-20 13:43:35 -04001#!/usr/bin/python
asharif56756862013-02-15 23:44:27 +00002#
3# Copyright 2010 Google Inc. All Rights Reserved.
4
5"""Script to build the ChromeOS toolchain.
6
7This script sets up the toolchain if you give it the gcctools directory.
8"""
9
10__author__ = "asharif@google.com (Ahmad Sharif)"
11
12import datetime
13import os
14import optparse
15import sys
Rahul Chaudhry86cd5ab2015-02-12 15:10:07 -080016from utils import constants
asharif56756862013-02-15 23:44:27 +000017from utils import email_sender
18
19
20class SheriffHandler(object):
Rahul Chaudhry86cd5ab2015-02-12 15:10:07 -080021 SHERIFF_FILE = os.path.join(constants.CROSTC_WORKSPACE, "sheriffs.txt")
asharif56756862013-02-15 23:44:27 +000022 SUBJECT = "You (%s) are the sheriff for the week: %s - %s"
cmtice91b55992014-03-25 13:45:05 -070023 BODY = "Please see instructions here: https://sites.google.com/a/google.com/chromeos-toolchain-team-home2/home/sheriff-s-corner/sheriff-duties"
asharif56756862013-02-15 23:44:27 +000024
25 def GetWeekInfo(self, day=datetime.datetime.today()):
26 """Return week_start, week_end."""
27
28 epoch = datetime.datetime.utcfromtimestamp(0)
29 delta_since_epoch = day - epoch
30
31 abs_days = abs(delta_since_epoch.days) - 2 # To get it to start from Sat.
32 weeks_since_epoch = abs_days / 7
33 day_of_week = abs_days % 7
34
35 week_begin = day - datetime.timedelta(days=day_of_week)
36 week_end = day + datetime.timedelta(days=(6 - day_of_week))
37
38 strftime_format = "%A, %B %d %Y"
39
40 return (week_begin.strftime(strftime_format),
41 week_end.strftime(strftime_format))
42
43 def GetCurrentSheriff(self):
44 """Return the current sheriff."""
45 return self.ReadSheriffsAsList()[0]
46
47 def ReadSheriffsAsList(self):
48 """Return the sheriff file contents."""
49 contents = ""
50 with open(self.SHERIFF_FILE, "r") as f:
51 contents = f.read()
52 return contents.splitlines()
53
54 def WriteSheriffsAsList(self, to_write):
55 with open(self.SHERIFF_FILE, "w") as f:
56 f.write("\n".join(to_write))
57
58 def GetRotatedSheriffs(self, num_rotations=1):
59 """Return the sheriff file contents."""
60 sheriff_list = self.ReadSheriffsAsList()
61
62 new_sheriff_list = []
63 num_rotations = num_rotations % len(sheriff_list)
64 new_sheriff_list = (sheriff_list[num_rotations:] +
65 sheriff_list[:num_rotations])
66 return new_sheriff_list
67
68 def Email(self):
69 es = email_sender.EmailSender()
70 current_sheriff = self.GetCurrentSheriff()
71 week_start, week_end = self.GetWeekInfo()
72 subject = self.SUBJECT % (current_sheriff, week_start, week_end)
73 es.SendEmail([current_sheriff],
74 subject,
75 self.BODY,
76 email_from=os.path.basename(__file__),
77 email_cc=["c-compiler-chrome"])
78
79
80def Main(argv):
81 parser = optparse.OptionParser()
82 parser.add_option("-e",
83 "--email",
84 dest="email",
85 action="store_true",
86 help="Email the sheriff.")
87 parser.add_option("-r",
88 "--rotate",
89 dest="rotate",
90 help="Print sheriffs after n rotations.")
91 parser.add_option("-w",
92 "--write",
93 dest="write",
94 action="store_true",
95 default=False,
96 help="Wrote rotated contents to the sheriff file.")
97
98 options, _ = parser.parse_args(argv)
99
100 sheriff_handler = SheriffHandler()
101
102 current_sheriff = sheriff_handler.GetCurrentSheriff()
103 week_start, week_end = sheriff_handler.GetWeekInfo()
104
105 print "Current sheriff: %s (%s - %s)" % (current_sheriff, week_start, week_end)
106
107 if options.email:
108 sheriff_handler.Email()
109
110 if options.rotate:
111 rotated_sheriffs = sheriff_handler.GetRotatedSheriffs(int(options.rotate))
112 print "Rotated sheriffs (after %s rotations)" % options.rotate
113 print "\n".join(rotated_sheriffs)
114 if options.write:
115 sheriff_handler.WriteSheriffsAsList(rotated_sheriffs)
116 print "Rotated sheriffs written to file."
117
118 return 0
119
120
121if __name__ == "__main__":
122 retval = Main(sys.argv)
123 sys.exit(retval)