| #!/usr/bin/env python3 | |
| """ | |
| Set a file to the newest modified time of the other files. | |
| """ | |
| import argparse | |
| import os | |
| import sys | |
| import time | |
| from lib import argparse_extra | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument( | |
| "--outfile", | |
| "--output", | |
| "-o", | |
| type=str, | |
| help="""\ | |
| The file to set the modtime on. | |
| """ | |
| ) | |
| parser.add_argument( | |
| "--verbose", | |
| action=argparse_extra.ActionStoreBool, | |
| default=os.environ.get('V', '') == 1, | |
| help="""\ | |
| Files to get the input time from. | |
| """ | |
| ) | |
| parser.add_argument( | |
| "files", | |
| type=str, | |
| nargs="+", | |
| help="""\ | |
| Files to get the input time from. | |
| """ | |
| ) | |
| my_path = os.path.abspath(__file__) | |
| my_dir = os.path.dirname(my_path) | |
| topdir = os.path.abspath(os.path.join(my_dir, "..")) | |
| def main(argv): | |
| args = parser.parse_args(argv[1:]) | |
| t = 0 | |
| newest = None | |
| for filepath in args.files: | |
| if not os.path.exists(filepath): | |
| print( | |
| "Did not find {}, skipping!".format(filepath), file=sys.stderr | |
| ) | |
| continue | |
| assert os.path.isfile(filepath), filepath | |
| mtime = os.path.getmtime(filepath) | |
| if args.verbose: | |
| print("{} has modtime of {}".format(filepath, mtime)) | |
| if mtime > t: | |
| newest = filepath | |
| t = mtime | |
| if not newest: | |
| print("Did not find any files, using current time!", file=sys.stderr) | |
| t = time.time() | |
| if not os.path.exists(args.outfile): | |
| f = open(args.outfile, "w") | |
| f.close() | |
| assert os.path.exists(args.outfile), args.outfile | |
| assert os.path.isfile(args.outfile), args.outfile | |
| if os.path.getmtime(args.outfile) == t: | |
| if args.verbose: | |
| print( | |
| "modtime of {} already {} (from {})".format( | |
| args.outfile, t, newest | |
| ) | |
| ) | |
| t += 1 | |
| if args.verbose: | |
| print( | |
| "Setting modtime of {} to {} (from {})".format( | |
| args.outfile, t, newest | |
| ) | |
| ) | |
| os.utime(args.outfile, times=(time.time(), t)) | |
| if __name__ == "__main__": | |
| sys.exit(main(sys.argv)) |