blob: cae145fc58c6e6c6fadc8454289b83bd23d6405d [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
16from utils import email_sender
17
18
19class SheriffHandler(object):
20 SHERIFF_FILE = "/home/mobiletc-prebuild/sheriffs.txt"
21 SUBJECT = "You (%s) are the sheriff for the week: %s - %s"
22 BODY = "Please see instructions here: https://wiki.corp.google.com/twiki/bin/view/Main/SheriffDuties."
23
24 def GetWeekInfo(self, day=datetime.datetime.today()):
25 """Return week_start, week_end."""
26
27 epoch = datetime.datetime.utcfromtimestamp(0)
28 delta_since_epoch = day - epoch
29
30 abs_days = abs(delta_since_epoch.days) - 2 # To get it to start from Sat.
31 weeks_since_epoch = abs_days / 7
32 day_of_week = abs_days % 7
33
34 week_begin = day - datetime.timedelta(days=day_of_week)
35 week_end = day + datetime.timedelta(days=(6 - day_of_week))
36
37 strftime_format = "%A, %B %d %Y"
38
39 return (week_begin.strftime(strftime_format),
40 week_end.strftime(strftime_format))
41
42 def GetCurrentSheriff(self):
43 """Return the current sheriff."""
44 return self.ReadSheriffsAsList()[0]
45
46 def ReadSheriffsAsList(self):
47 """Return the sheriff file contents."""
48 contents = ""
49 with open(self.SHERIFF_FILE, "r") as f:
50 contents = f.read()
51 return contents.splitlines()
52
53 def WriteSheriffsAsList(self, to_write):
54 with open(self.SHERIFF_FILE, "w") as f:
55 f.write("\n".join(to_write))
56
57 def GetRotatedSheriffs(self, num_rotations=1):
58 """Return the sheriff file contents."""
59 sheriff_list = self.ReadSheriffsAsList()
60
61 new_sheriff_list = []
62 num_rotations = num_rotations % len(sheriff_list)
63 new_sheriff_list = (sheriff_list[num_rotations:] +
64 sheriff_list[:num_rotations])
65 return new_sheriff_list
66
67 def Email(self):
68 es = email_sender.EmailSender()
69 current_sheriff = self.GetCurrentSheriff()
70 week_start, week_end = self.GetWeekInfo()
71 subject = self.SUBJECT % (current_sheriff, week_start, week_end)
72 es.SendEmail([current_sheriff],
73 subject,
74 self.BODY,
75 email_from=os.path.basename(__file__),
76 email_cc=["c-compiler-chrome"])
77
78
79def Main(argv):
80 parser = optparse.OptionParser()
81 parser.add_option("-e",
82 "--email",
83 dest="email",
84 action="store_true",
85 help="Email the sheriff.")
86 parser.add_option("-r",
87 "--rotate",
88 dest="rotate",
89 help="Print sheriffs after n rotations.")
90 parser.add_option("-w",
91 "--write",
92 dest="write",
93 action="store_true",
94 default=False,
95 help="Wrote rotated contents to the sheriff file.")
96
97 options, _ = parser.parse_args(argv)
98
99 sheriff_handler = SheriffHandler()
100
101 current_sheriff = sheriff_handler.GetCurrentSheriff()
102 week_start, week_end = sheriff_handler.GetWeekInfo()
103
104 print "Current sheriff: %s (%s - %s)" % (current_sheriff, week_start, week_end)
105
106 if options.email:
107 sheriff_handler.Email()
108
109 if options.rotate:
110 rotated_sheriffs = sheriff_handler.GetRotatedSheriffs(int(options.rotate))
111 print "Rotated sheriffs (after %s rotations)" % options.rotate
112 print "\n".join(rotated_sheriffs)
113 if options.write:
114 sheriff_handler.WriteSheriffsAsList(rotated_sheriffs)
115 print "Rotated sheriffs written to file."
116
117 return 0
118
119
120if __name__ == "__main__":
121 retval = Main(sys.argv)
122 sys.exit(retval)