mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
Merge 0c482ffa1a into ed82f62a5a
This commit is contained in:
commit
7185aa8f4b
3 changed files with 46 additions and 9 deletions
|
|
@ -279,14 +279,17 @@ be specified either via the ``tags`` metadata, as is standard in Pelican, or
|
|||
via the ``keywords`` metadata, as is standard in HTML. The two can be used
|
||||
interchangeably.
|
||||
|
||||
Note that, aside from the title, none of this article metadata is mandatory:
|
||||
if the date is not specified and ``DEFAULT_DATE`` is set to ``fs``, Pelican
|
||||
will rely on the file's "mtime" timestamp, and the category can be determined
|
||||
by the directory in which the file resides. For example, a file located at
|
||||
``python/foobar/myfoobar.rst`` will have a category of ``foobar``. If you would
|
||||
like to organize your files in other ways where the name of the subfolder would
|
||||
not be a good category name, you can set the setting ``USE_FOLDER_AS_CATEGORY``
|
||||
to ``False``.
|
||||
Note that, aside from the title, none of this article metadata is mandatory: if
|
||||
the date is not specified and ``DEFAULT_DATE`` is set to ``fs``, Pelican will
|
||||
rely on the file's "mtime" timestamp. If you keep your content in a git
|
||||
repository, you can set ``DEFAULT_DATE`` to ``git-last-modified`` or
|
||||
``git-creation`` to let Pelican use git information (either the time of the last
|
||||
commit when the file was modified, or the time of the commit when the file was
|
||||
created). The category can be determined by the directory in which the file
|
||||
resides. For example, a file located at ``python/foobar/myfoobar.rst`` will have
|
||||
a category of ``foobar``. If you would like to organize your files in other ways
|
||||
where the name of the subfolder would not be a good category name, you can set
|
||||
the setting ``USE_FOLDER_AS_CATEGORY`` to ``False``.
|
||||
|
||||
If you do not explicitly specify summary metadata for a given post, the
|
||||
``SUMMARY_MAX_LENGTH`` setting can be used to specify how many words from the
|
||||
|
|
|
|||
|
|
@ -23,7 +23,9 @@ from pelican.contents import (
|
|||
Article, Page, Category, Static, is_valid_content
|
||||
)
|
||||
from pelican.readers import read_file
|
||||
from pelican.utils import copy, process_translations, mkdir_p, DateFormatter
|
||||
from pelican.utils import (
|
||||
copy, process_translations, mkdir_p, DateFormatter, git_mtime
|
||||
)
|
||||
from pelican import signals
|
||||
import pelican.utils
|
||||
|
||||
|
|
@ -407,6 +409,10 @@ class ArticlesGenerator(Generator):
|
|||
if self.settings['DEFAULT_DATE'] == 'fs':
|
||||
metadata['date'] = datetime.datetime.fromtimestamp(
|
||||
os.stat(f).st_ctime)
|
||||
elif self.settings['DEFAULT_DATE'] == 'git-last-modified':
|
||||
metadata['date'] = git_mtime(f, True)
|
||||
elif self.settings['DEFAULT_DATE'] == 'git-creation':
|
||||
metadata['date'] = git_mtime(f, False)
|
||||
else:
|
||||
metadata['date'] = datetime.datetime(
|
||||
*self.settings['DEFAULT_DATE'])
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import logging
|
|||
import errno
|
||||
import locale
|
||||
import fnmatch
|
||||
import subprocess
|
||||
from collections import Hashable
|
||||
from functools import partial
|
||||
|
||||
|
|
@ -549,3 +550,30 @@ def split_all(path):
|
|||
break
|
||||
path = head
|
||||
return components
|
||||
|
||||
|
||||
def git_mtime(filename, use_last_modification=True, git_binary="git"):
|
||||
|
||||
"""Determines the git modification time of a file and returns it as a
|
||||
datetime.datetime object.
|
||||
|
||||
If use_last_modification is True, then the date and time of the last
|
||||
modification will be returned. Otherwise the date and time of the first
|
||||
commit containing the file will be returned.
|
||||
|
||||
The optional argument 'git_binary' can be used to specify the git binary to
|
||||
use.
|
||||
"""
|
||||
|
||||
call = [git_binary, "log", "--pretty=format:%at ", filename]
|
||||
repository= os.path.dirname(filename)
|
||||
try:
|
||||
output = subprocess.check_output(call, cwd=repository).decode('utf-8').splitlines()
|
||||
except Exception as e:
|
||||
print("ERROR: Could not get git time information for {0}: {1}".format(filename, str(e)))
|
||||
return None
|
||||
|
||||
dates = [ datetime.fromtimestamp(int(x)) for x in output ]
|
||||
sorted_dates = sorted(dates)
|
||||
|
||||
return sorted_dates[-1] if use_last_modification else sorted_dates[0]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue