Mike Frysinger | c7f1593 | 2013-03-20 13:43:35 -0400 | [diff] [blame] | 1 | #!/usr/bin/python |
asharif | 5675686 | 2013-02-15 23:44:27 +0000 | [diff] [blame] | 2 | # |
| 3 | # Copyright 2010 Google Inc. All Rights Reserved. |
| 4 | |
| 5 | """Script to build the ChromeOS toolchain. |
| 6 | |
| 7 | This script sets up the toolchain if you give it the gcctools directory. |
| 8 | """ |
| 9 | |
| 10 | __author__ = "asharif@google.com (Ahmad Sharif)" |
| 11 | |
| 12 | import datetime |
| 13 | import os |
| 14 | import optparse |
| 15 | import sys |
| 16 | from utils import email_sender |
| 17 | |
| 18 | |
| 19 | class 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 | |
| 79 | def 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 | |
| 120 | if __name__ == "__main__": |
| 121 | retval = Main(sys.argv) |
| 122 | sys.exit(retval) |