本スクリプトは、予め pull を実施後に実行されることを想定しています。
なので、リモート周りのコマンドは使っていません。コミット履歴もローカルコミット履歴をみます。
(つまり、ls-filesを使って、ls-remoteは利用しません。) 動作には、python-dateutilとgitpythonモジュールが必要です。
# coding: utf-8 | |
""" | |
ファイルの更新日付をコミット日時に調整します。 | |
注意)本スクリプトは、予め pull を実施後に実行されることを想定しています。 | |
なので、リモート周りのコマンドは使っていません。コミット履歴もローカルコミット履歴をみます。 | |
(つまり、ls-filesを使って、ls-remoteは利用しません。) | |
動作には、python-dateutilとgitpythonが必要です。 | |
$ pip intall python-dateutil gitpython | |
""" | |
import datetime | |
import logging | |
import os | |
import pathlib | |
import dateutil.parser | |
import git | |
logging.basicConfig( | |
level=logging.INFO, | |
format=' %(asctime)s - %(levelname)s - %(message)s', | |
handlers=[ | |
logging.FileHandler('log.txt', mode='w', encoding='utf-8') | |
]) | |
try: | |
base_dir = pathlib.Path('/path/to/your/repo') | |
os.chdir(base_dir) | |
logging.info(f'ベースディレクトリ: {base_dir.absolute()}') | |
g = git.cmd.Git() | |
for f in g.ls_files().splitlines(): | |
commit_time = g.log('-n1', f'{f}', pretty='format:%ci') | |
commit_time_dt = dateutil.parser.parse(commit_time) | |
commit_timestamp = commit_time_dt.timestamp() | |
cur_dt = datetime.datetime.fromtimestamp(os.stat(f).st_mtime) | |
logging.info(f'\tファイル : {f}') | |
logging.info(f'\tコミット日時: {commit_time}') | |
logging.info(f'\t 日付更新: {str(cur_dt)} --> {str(commit_time_dt)}') | |
os.utime(f, (commit_timestamp, commit_timestamp)) | |
except Exception as e: | |
logging.error(f'エラー発生:{e}') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment