| Index: build/write_build_date_header.py
|
| diff --git a/build/write_build_date_header.py b/build/write_build_date_header.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..6e10c829793d36481544a46d7dbe3af0766875b2
|
| --- /dev/null
|
| +++ b/build/write_build_date_header.py
|
| @@ -0,0 +1,79 @@
|
| +#!/usr/bin/env python
|
| +# Copyright (c) 2016 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +"""Writes a file that contains a define that approximates the build date.
|
| +
|
| +The build date is set to the most recent first Sunday of a month, in UTC time.
|
| +The reason for using the first Sunday of a month is that it is a time where
|
| +invalidating the build cache shouldn't have major reprecussions.
|
| +"""
|
| +
|
| +import argparse
|
| +import calendar
|
| +import datetime
|
| +import os
|
| +import sys
|
| +
|
| +
|
| +def GetFirstSundayOfMonth(month, year):
|
| + """Returns the first sunday of the given month of the given year."""
|
| + weeks = calendar.Calendar().monthdays2calendar(year, month)
|
| + # Return the first day in the first week that is a Sunday.
|
| + return [date_day[0] for date_day in weeks[0] if date_day[1] == 6][0]
|
| +
|
| +
|
| +def GetBuildDate(build_type):
|
| + """Gets the approximate build date given the specific build type."""
|
| + gmt_now = datetime.datetime.utcnow()
|
| + day = gmt_now.day
|
| + month = gmt_now.month
|
| + year = gmt_now.year
|
| + if build_type != 'official':
|
| + first_sunday = GetFirstSundayOfMonth(month, year)
|
| + # If our build is after the first Sunday, we've already refreshed our build
|
| + # cache on a quiet day, so just use that day.
|
| + # Otherwise, take the first Sunday of the previous month.
|
| + if day >= first_sunday:
|
| + day = first_sunday
|
| + else:
|
| + month -= 1
|
| + if month == 0:
|
| + month = 12
|
| + year -= 1
|
| + day = GetFirstSundayOfMonth(month, year)
|
| + return "{:%b %d %Y}".format(datetime.date(year, month, day))
|
| +
|
| +
|
| +def main():
|
| + argument_parser = argparse.ArgumentParser()
|
| + argument_parser.add_argument('output_file', help='The file to write to')
|
| + argument_parser.add_argument('build_type', help='The type of build',
|
| + choices=("official", "default"))
|
| + argument_parser.add_argument('build_date_override', nargs='?',
|
| + help='Optional override for the build date')
|
| + args = argument_parser.parse_args()
|
| +
|
| + if args.build_date_override:
|
| + build_date = args.build_date_override
|
| + else:
|
| + build_date = GetBuildDate(args.build_type)
|
| +
|
| + output = ('// Generated by //build/write_build_date_header.py\n'
|
| + '#ifndef BUILD_DATE\n'
|
| + '#define BUILD_DATE "{}"\n'
|
| + '#endif // BUILD_DATE\n'.format(build_date))
|
| +
|
| + current_contents = ""
|
| + if os.path.isfile(args.output_file):
|
| + with open(args.output_file, 'r') as current_file:
|
| + current_contents = current_file.read()
|
| +
|
| + if current_contents != output:
|
| + with open(args.output_file, 'w') as output_file:
|
| + output_file.write(output)
|
| + return 0
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + sys.exit(main())
|
|
|