X-Git-Url: https://git.phdru.name/?p=git-scripts.git;a=blobdiff_plain;f=set-commit-date.py;h=c0aaa8cf999bae085a6ab0c484a7cc23edc7f5bf;hp=a88c5dea43849ddba38a0272f6ce74a24ac9a995;hb=HEAD;hpb=a0f5c1217294a1a72b71bc94fd80760b0393e775 diff --git a/set-commit-date.py b/set-commit-date.py index a88c5de..c0aaa8c 100755 --- a/set-commit-date.py +++ b/set-commit-date.py @@ -5,18 +5,36 @@ # Adapted from https://git.wiki.kernel.org/index.php/ExampleScripts#Setting_the_timestamps_of_the_files_to_the_commit_timestamp_of_the_commit_which_last_touched_them # noqa +import argparse import os +import sys import subprocess git_root = subprocess.check_output(['git', 'rev-parse', '--show-toplevel'], universal_newlines=True).rstrip('\n') os.chdir(git_root) +parser = argparse.ArgumentParser(description='Set commit date') +parser.add_argument('-a', '--author', '--author-date', + action='store_true') +parser.add_argument('-c', '--committer', '--committer-date', + action='store_true') +args = parser.parse_args() + +if args.author and args.committer: + parser.print_help() + sys.exit("Use only one of `-a' or `-c' but not both") + +if args.author: + date_format = 'a' +else: + date_format = 'c' # This is the default + separator = '----- GIT LOG SEPARATOR -----' git_log = subprocess.Popen(['git', 'log', '-m', '--first-parent', '--name-status', '--no-color', - '--format=%s%%n%%ct' % separator], + '--format=%s%%n%%%st' % (separator, date_format)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True) changed_files = set() @@ -48,7 +66,7 @@ for line in git_log.stdout: deleted_files.add(filename) if filename not in deleted_files and filename not in changed_files: changed_files.add(filename) - if os.path.exists(filename): + if os.path.exists(filename) and not os.path.islink(filename): os.utime(filename, (time, time)) else: raise ValueError("stage: %d, line: %s" % (stage, line))