Add new feature to lastmod script tool.

This commit is contained in:
Cotes Chung 2019-11-18 21:36:45 +08:00
parent 299d7e799f
commit 5a4803a3d7
1 changed files with 77 additions and 32 deletions

View File

@ -16,58 +16,81 @@ Licensed under MIT
import sys
import glob
import os
import getopt
import subprocess
import shutil
import datetime
import time
from enum import Enum
from ruamel.yaml import YAML
from utils.common import get_yaml
from utils.common import check_py_version
POSTS_PATH = "_posts"
Date = Enum('Date', ('GIT', 'FS'))
POSTS_PATH = '_posts'
def help():
print("Usage: "
" python update_posts_lastmod.py [option]\n"
" python update_posts_lastmod.py [options]\n"
"Options:\n"
" -v, --verbose Print verbose logs\n")
" -f, --file <file path> Read a file.\n"
" -d, --dir <directory path> Read from a directory.\n"
" -h, --help Print help information\n"
" -v, --verbose Print verbose logs\n"
" -t, --datetime < git | fs > Chose post's datetime source, "
"'git' for git-log, 'fs' for filesystem, default to 'git'.\n")
def update_lastmod(verbose):
def update_lastmod(path, verbose, date):
count = 0
yaml = YAML()
for post in glob.glob(os.path.join(POSTS_PATH, "*.md")):
git_log_count = subprocess.getoutput(
"git log --pretty=%ad \"{}\" | wc -l".format(post))
for post in glob.glob(path):
if git_log_count == "1":
continue
lastmod = ''
git_lastmod = subprocess.getoutput(
"git log -1 --pretty=%ad --date=iso \"{}\"".format(post))
if date == Date.GIT:
git_log_count = subprocess.getoutput(
"git log --pretty=%ad \"{}\" | wc -l".format(post))
if not git_lastmod:
continue
if git_log_count == "1":
continue
lates_commit = subprocess.check_output(
['git', 'log', '-1', '--pretty=%B', post]).decode('utf-8')
git_lastmod = subprocess.getoutput(
"git log -1 --pretty=%ad --date=iso \"{}\"".format(post))
if "[Automation]" in lates_commit and "Lastmod" in lates_commit:
continue
if not git_lastmod:
continue
lates_commit = subprocess.check_output(
['git', 'log', '-1', '--pretty=%B', post]).decode('utf-8')
if "[Automation]" in lates_commit and "Lastmod" in lates_commit:
continue
lastmod = git_lastmod
elif date == Date.FS:
t = os.path.getmtime(post)
dt = datetime.datetime.fromtimestamp(t)
lastmod = dt.strftime('%F %T') + time.strftime(' %z')
frontmatter, line_num = get_yaml(post)
meta = yaml.load(frontmatter)
if 'seo' in meta:
if ('date_modified' in meta['seo'] and
meta['seo']['date_modified'] == git_lastmod):
meta['seo']['date_modified'] == lastmod):
continue
else:
meta['seo']['date_modified'] = git_lastmod
meta['seo']['date_modified'] = lastmod
else:
meta.insert(line_num, 'seo', dict(date_modified=git_lastmod))
meta.insert(line_num, 'seo', dict(date_modified=lastmod))
output = 'new.md'
if os.path.isfile(output):
@ -99,23 +122,45 @@ def update_lastmod(verbose):
print("[INFO] Success to update lastmod for {} post(s).".format(count))
def main():
def main(argv):
check_py_version()
path = os.path.join(POSTS_PATH, "*.md")
verbose = False
date = Date.GIT
if len(sys.argv) > 1:
for arg in sys.argv:
if arg == sys.argv[0]:
continue
try:
opts, args = getopt.getopt(
argv, "hf:d:vt:",
["file=", "dir=", "help", "verbose", "datetime="])
except getopt.GetoptError:
help()
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
help()
sys.exit()
elif opt == '-f' or opt == '--file':
path = arg
elif opt == '-d' or opt == '--dir':
path = os.path.join(arg, "*.md")
elif opt == '-v' or opt == '--verbose':
verbose = True
elif opt == '-t' or opt == '--datetime':
if arg == 'git':
date = Date.GIT
elif arg == 'fs':
date = Date.FS
else:
if arg == '-v' or arg == '--verbose':
verbose = True
else:
help()
return
help()
sys.exit(2)
update_lastmod(verbose)
update_lastmod(path, verbose, date)
main()
main(sys.argv[1:])