| #!/usr/bin/python |
| # |
| # Copyright 2010 Google Inc. All Rights Reserved. |
| |
| """Script to build the ChromeOS toolchain. |
| |
| This script sets up the toolchain if you give it the gcctools directory. |
| """ |
| |
| __author__ = "asharif@google.com (Ahmad Sharif)" |
| |
| import datetime |
| import os |
| import optparse |
| import sys |
| from utils import constants |
| from utils import email_sender |
| |
| |
| class SheriffHandler(object): |
| SHERIFF_FILE = os.path.join(constants.CROSTC_WORKSPACE, "sheriffs.txt") |
| SUBJECT = "You (%s) are the sheriff for the week: %s - %s" |
| BODY = "Please see instructions here: https://sites.google.com/a/google.com/chromeos-toolchain-team-home2/home/sheriff-s-corner/sheriff-duties" |
| |
| def GetWeekInfo(self, day=datetime.datetime.today()): |
| """Return week_start, week_end.""" |
| |
| epoch = datetime.datetime.utcfromtimestamp(0) |
| delta_since_epoch = day - epoch |
| |
| abs_days = abs(delta_since_epoch.days) - 2 # To get it to start from Sat. |
| weeks_since_epoch = abs_days / 7 |
| day_of_week = abs_days % 7 |
| |
| week_begin = day - datetime.timedelta(days=day_of_week) |
| week_end = day + datetime.timedelta(days=(6 - day_of_week)) |
| |
| strftime_format = "%A, %B %d %Y" |
| |
| return (week_begin.strftime(strftime_format), |
| week_end.strftime(strftime_format)) |
| |
| def GetCurrentSheriff(self): |
| """Return the current sheriff.""" |
| return self.ReadSheriffsAsList()[0] |
| |
| def ReadSheriffsAsList(self): |
| """Return the sheriff file contents.""" |
| contents = "" |
| with open(self.SHERIFF_FILE, "r") as f: |
| contents = f.read() |
| return contents.splitlines() |
| |
| def WriteSheriffsAsList(self, to_write): |
| with open(self.SHERIFF_FILE, "w") as f: |
| f.write("\n".join(to_write)) |
| |
| def GetRotatedSheriffs(self, num_rotations=1): |
| """Return the sheriff file contents.""" |
| sheriff_list = self.ReadSheriffsAsList() |
| |
| new_sheriff_list = [] |
| num_rotations = num_rotations % len(sheriff_list) |
| new_sheriff_list = (sheriff_list[num_rotations:] + |
| sheriff_list[:num_rotations]) |
| return new_sheriff_list |
| |
| def Email(self): |
| es = email_sender.EmailSender() |
| current_sheriff = self.GetCurrentSheriff() |
| week_start, week_end = self.GetWeekInfo() |
| subject = self.SUBJECT % (current_sheriff, week_start, week_end) |
| es.SendEmail([current_sheriff], |
| subject, |
| self.BODY, |
| email_from=os.path.basename(__file__), |
| email_cc=["c-compiler-chrome"]) |
| |
| |
| def Main(argv): |
| parser = optparse.OptionParser() |
| parser.add_option("-e", |
| "--email", |
| dest="email", |
| action="store_true", |
| help="Email the sheriff.") |
| parser.add_option("-r", |
| "--rotate", |
| dest="rotate", |
| help="Print sheriffs after n rotations.") |
| parser.add_option("-w", |
| "--write", |
| dest="write", |
| action="store_true", |
| default=False, |
| help="Wrote rotated contents to the sheriff file.") |
| |
| options, _ = parser.parse_args(argv) |
| |
| sheriff_handler = SheriffHandler() |
| |
| current_sheriff = sheriff_handler.GetCurrentSheriff() |
| week_start, week_end = sheriff_handler.GetWeekInfo() |
| |
| print "Current sheriff: %s (%s - %s)" % (current_sheriff, week_start, week_end) |
| |
| if options.email: |
| sheriff_handler.Email() |
| |
| if options.rotate: |
| rotated_sheriffs = sheriff_handler.GetRotatedSheriffs(int(options.rotate)) |
| print "Rotated sheriffs (after %s rotations)" % options.rotate |
| print "\n".join(rotated_sheriffs) |
| if options.write: |
| sheriff_handler.WriteSheriffsAsList(rotated_sheriffs) |
| print "Rotated sheriffs written to file." |
| |
| return 0 |
| |
| |
| if __name__ == "__main__": |
| retval = Main(sys.argv) |
| sys.exit(retval) |