mkdocs-document-dates 1.9.9__py3-none-any.whl → 2.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mkdocs_document_dates/__init__.py +3 -3
- mkdocs_document_dates/hooks/pre-commit +24 -11
- mkdocs_document_dates/hooks_installer.py +68 -30
- {mkdocs_document_dates-1.9.9.dist-info → mkdocs_document_dates-2.0.0.dist-info}/METADATA +2 -2
- {mkdocs_document_dates-1.9.9.dist-info → mkdocs_document_dates-2.0.0.dist-info}/RECORD +9 -9
- {mkdocs_document_dates-1.9.9.dist-info → mkdocs_document_dates-2.0.0.dist-info}/entry_points.txt +1 -1
- {mkdocs_document_dates-1.9.9.dist-info → mkdocs_document_dates-2.0.0.dist-info}/LICENSE +0 -0
- {mkdocs_document_dates-1.9.9.dist-info → mkdocs_document_dates-2.0.0.dist-info}/WHEEL +0 -0
- {mkdocs_document_dates-1.9.9.dist-info → mkdocs_document_dates-2.0.0.dist-info}/top_level.txt +0 -0
@@ -1,11 +1,11 @@
|
|
1
1
|
"""MkDocs Document Dates Plugin."""
|
2
2
|
|
3
|
-
__version__ = '
|
3
|
+
__version__ = '2.0.0'
|
4
4
|
|
5
5
|
from .hooks_installer import install
|
6
6
|
|
7
|
-
#
|
7
|
+
# 第三个入口:当包被导入时自动执行 hooks 安装,作为额外保障
|
8
8
|
try:
|
9
9
|
install()
|
10
10
|
except Exception as e:
|
11
|
-
print(f"
|
11
|
+
print(f"安装 git hooks 失败: {e}")
|
@@ -13,16 +13,17 @@ def find_mkdocs_projects():
|
|
13
13
|
try:
|
14
14
|
git_root = Path(subprocess.check_output(
|
15
15
|
['git', 'rev-parse', '--show-toplevel'],
|
16
|
-
text=True
|
16
|
+
text=True, encoding='utf-8'
|
17
17
|
).strip())
|
18
18
|
|
19
19
|
projects = []
|
20
20
|
for config_file in git_root.rglob('mkdocs.y*ml'):
|
21
|
-
if config_file.name in ('mkdocs.yml', 'mkdocs.yaml'):
|
21
|
+
if config_file.name.lower() in ('mkdocs.yml', 'mkdocs.yaml'):
|
22
22
|
projects.append(config_file.parent)
|
23
|
+
|
23
24
|
return projects
|
24
25
|
except subprocess.CalledProcessError as e:
|
25
|
-
print(f"Error finding git root: {e}")
|
26
|
+
print(f"Error finding git root: {e}", file=sys.stderr)
|
26
27
|
return []
|
27
28
|
|
28
29
|
def get_file_dates(file_path):
|
@@ -48,28 +49,40 @@ def get_file_dates(file_path):
|
|
48
49
|
return current_time.isoformat(), current_time.isoformat()
|
49
50
|
|
50
51
|
def update_dates_cache():
|
52
|
+
print("开始更新文档时间缓存...")
|
51
53
|
"""更新文档时间缓存"""
|
52
54
|
for project_dir in find_mkdocs_projects():
|
53
55
|
docs_dir = project_dir / 'docs'
|
54
56
|
if not docs_dir.exists():
|
57
|
+
print(f"文档目录不存在: {docs_dir}")
|
55
58
|
continue
|
56
59
|
|
57
60
|
dates_cache = {}
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
61
|
+
md_files = list(docs_dir.rglob("*.md"))
|
62
|
+
|
63
|
+
for md_file in md_files:
|
64
|
+
try:
|
65
|
+
rel_path = str(md_file.relative_to(docs_dir))
|
66
|
+
created, modified = get_file_dates(md_file)
|
67
|
+
dates_cache[rel_path] = {
|
68
|
+
"created": created,
|
69
|
+
"modified": modified
|
70
|
+
}
|
71
|
+
except Exception as e:
|
72
|
+
print(f"处理文件 {md_file} 时出错: {e}")
|
73
|
+
|
74
|
+
if not dates_cache:
|
75
|
+
continue
|
65
76
|
|
66
77
|
cache_file = docs_dir / '.dates_cache.json'
|
78
|
+
print(f"正在写入缓存文件: {cache_file}")
|
67
79
|
try:
|
68
80
|
with open(cache_file, "w") as f:
|
69
81
|
json.dump(dates_cache, f, indent=2, ensure_ascii=False)
|
70
82
|
subprocess.run(["git", "add", str(cache_file)], check=True)
|
83
|
+
print(f"缓存文件 {cache_file} 已更新.")
|
71
84
|
except Exception as e:
|
72
|
-
print(f"
|
85
|
+
print(f"写入缓存文件时出错: {e}", file=sys.stderr)
|
73
86
|
raise
|
74
87
|
|
75
88
|
if __name__ == "__main__":
|
@@ -3,44 +3,82 @@ import sys
|
|
3
3
|
import subprocess
|
4
4
|
from pathlib import Path
|
5
5
|
import site
|
6
|
+
import platform
|
6
7
|
|
7
8
|
def install():
|
8
|
-
"""安装 git hooks
|
9
|
-
print("\n正在安装 git hooks...\n")
|
9
|
+
"""安装 git hooks"""
|
10
10
|
try:
|
11
|
-
#
|
12
|
-
|
13
|
-
|
11
|
+
# 检查 git 是否可用
|
12
|
+
try:
|
13
|
+
subprocess.run(['git', '--version'], check=True, capture_output=True, encoding='utf-8')
|
14
|
+
except (subprocess.CalledProcessError, FileNotFoundError):
|
15
|
+
# 静默失败,因为用户可能在非 git 环境下安装
|
16
|
+
return False
|
14
17
|
|
15
|
-
#
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
18
|
+
# 检查是否在 git 仓库中
|
19
|
+
try:
|
20
|
+
subprocess.run(['git', 'rev-parse', '--git-dir'], check=True, capture_output=True, encoding='utf-8')
|
21
|
+
except subprocess.CalledProcessError:
|
22
|
+
# 静默失败,用户可能不在 git 仓库中
|
23
|
+
return False
|
24
|
+
|
25
|
+
# 检查是否是开发模式安装
|
26
|
+
def is_dev_install():
|
27
|
+
try:
|
28
|
+
import mkdocs_document_dates
|
29
|
+
pkg_path = Path(mkdocs_document_dates.__file__).resolve().parent
|
30
|
+
current_path = Path(__file__).resolve().parent
|
31
|
+
# 检查是否在开发目录中
|
32
|
+
if current_path == pkg_path:
|
33
|
+
return True
|
34
|
+
# 检查是否是 egg-link 安装
|
35
|
+
site_packages = [Path(p) for p in site.getsitepackages()]
|
36
|
+
for p in site_packages:
|
37
|
+
if (p / 'mkdocs_document_dates.egg-link').exists():
|
38
|
+
return True
|
39
|
+
return False
|
40
|
+
except (ImportError, AttributeError) as e:
|
41
|
+
print(f"开发模式检查失败: {e}")
|
42
|
+
return False
|
43
|
+
|
44
|
+
is_dev_mode = is_dev_install()
|
45
|
+
hook_path = None
|
27
46
|
|
28
|
-
|
29
|
-
|
30
|
-
hooks_dir = Path(site_dir) / 'mkdocs_document_dates' / 'hooks'
|
47
|
+
if is_dev_mode:
|
48
|
+
hooks_dir = Path(__file__).parent.resolve() / 'hooks'
|
31
49
|
if hooks_dir.exists():
|
32
50
|
hook_path = hooks_dir / 'pre-commit'
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
print(f"Hooks 已安装到: {hooks_dir}")
|
40
|
-
return True
|
51
|
+
else:
|
52
|
+
for site_dir in site.getsitepackages():
|
53
|
+
hooks_dir = Path(site_dir) / 'mkdocs_document_dates' / 'hooks'
|
54
|
+
if hooks_dir.exists():
|
55
|
+
hook_path = hooks_dir / 'pre-commit'
|
56
|
+
break
|
41
57
|
|
42
|
-
|
43
|
-
|
58
|
+
|
59
|
+
if not hook_path or not hook_path.exists():
|
60
|
+
print("错误: 未找到 hooks 目录或 hook 文件")
|
61
|
+
return False
|
62
|
+
|
63
|
+
# 设置文件权限(Unix-like 系统)
|
64
|
+
if platform.system() != 'Windows':
|
65
|
+
try:
|
66
|
+
os.chmod(hook_path.parent, 0o755)
|
67
|
+
os.chmod(hook_path, 0o755)
|
68
|
+
except OSError as e:
|
69
|
+
print(f"警告: 设置权限时出错: {e}")
|
70
|
+
|
71
|
+
# 配置 git hooks 路径
|
72
|
+
try:
|
73
|
+
hooks_dir = hook_path.parent
|
74
|
+
subprocess.run(['git', 'config', '--global', 'core.hooksPath',
|
75
|
+
str(hooks_dir)], check=True, encoding='utf-8')
|
76
|
+
print(f"Git hooks 已安装到: {hooks_dir}")
|
77
|
+
return True
|
78
|
+
except subprocess.CalledProcessError as e:
|
79
|
+
print(f"错误: 设置 git hooks 路径失败: {e}")
|
80
|
+
return False
|
81
|
+
|
44
82
|
except Exception as e:
|
45
83
|
print(f"安装 hooks 时出错: {e}")
|
46
84
|
return False
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: mkdocs-document-dates
|
3
|
-
Version:
|
3
|
+
Version: 2.0.0
|
4
4
|
Summary: A MkDocs plugin for displaying accurate document creation and last modification dates.
|
5
5
|
Home-page: https://github.com/jaywhj/mkdocs-document-dates
|
6
6
|
Author: Aaron Wang
|
@@ -111,7 +111,7 @@ modified: 2023-12-31
|
|
111
111
|
- macOS: Uses file creation time (birthtime)
|
112
112
|
- Linux: Uses modification time as creation time due to system limitations, if you need the exact creation time, you can manually specify it in Front Matter
|
113
113
|
- It still works when using CI/CD build systems (e.g. Github Actions)
|
114
|
-
- Used a cache file
|
114
|
+
- Used a cache file `.dates_cache.json` to solve this problem
|
115
115
|
- You can configure it like this: `pip install --upgrade mkdocs-document-dates`
|
116
116
|
```
|
117
117
|
...
|
@@ -1,8 +1,8 @@
|
|
1
|
-
mkdocs_document_dates/__init__.py,sha256=
|
2
|
-
mkdocs_document_dates/hooks_installer.py,sha256=
|
1
|
+
mkdocs_document_dates/__init__.py,sha256=0nh_vvDiVeDUDIgIB-Oea3gc46lZ8av9c_YGyuWf1Y8,267
|
2
|
+
mkdocs_document_dates/hooks_installer.py,sha256=pQBVa366bUb82U-BjIzfmOcl5wRT5hxwN8dzoZ8ILfo,3226
|
3
3
|
mkdocs_document_dates/plugin.py,sha256=zgZ9QrbfsMDAv80P11I_99urSvFolJq93Ow7P-pfS_A,9753
|
4
4
|
mkdocs_document_dates/styles.py,sha256=ujhlKgDWsOo5sHiYtf3XekuGg4C5Yjol8RzP3W9Wzjo,578
|
5
|
-
mkdocs_document_dates/hooks/pre-commit,sha256=
|
5
|
+
mkdocs_document_dates/hooks/pre-commit,sha256=pCMSzKA7Gs74G4F0pRbGL1gmT8R_1RaMY6hJDQH3f0s,3107
|
6
6
|
mkdocs_document_dates/lang/__init__.py,sha256=M1BLjCOA3HHKeAitk45YAgzxxNpnxFUvVAk6-FO_QSA,690
|
7
7
|
mkdocs_document_dates/lang/ar.py,sha256=BsZlxz54U_spOZ5SBiKt73ywoLKbR54cZNkKAs86OxM,632
|
8
8
|
mkdocs_document_dates/lang/de.py,sha256=B0Ffrn4lVSvcxFpGho7SiMm16GXYEmpjcVAR-k4UgSI,585
|
@@ -14,9 +14,9 @@ mkdocs_document_dates/lang/ko.py,sha256=GwY6yrKYAOj6S6feq9yqNxr2XpyGHC0XeenO541v
|
|
14
14
|
mkdocs_document_dates/lang/ru.py,sha256=fK5s4mQKCoP6KI3jf6eqqmqB3YVn39q81U7Cw1QWNNg,721
|
15
15
|
mkdocs_document_dates/lang/zh.py,sha256=OrLElrSTZhHSwxBzuUtUj7NpQb7wm0s83viimpk2ynM,519
|
16
16
|
mkdocs_document_dates/lang/zh_tw.py,sha256=t3qu-a7UOzgcmYDkLFiosJZCcpfMU4xiKTJfu1ZHoHA,519
|
17
|
-
mkdocs_document_dates-
|
18
|
-
mkdocs_document_dates-
|
19
|
-
mkdocs_document_dates-
|
20
|
-
mkdocs_document_dates-
|
21
|
-
mkdocs_document_dates-
|
22
|
-
mkdocs_document_dates-
|
17
|
+
mkdocs_document_dates-2.0.0.dist-info/LICENSE,sha256=1YKfCs5WKSk-bON8a68WZE5to1B2klCrHBYiuaVCThM,514
|
18
|
+
mkdocs_document_dates-2.0.0.dist-info/METADATA,sha256=-HXJKHDAZQ9HrmYxf4BZLNNbyh_n4lSCjZZ9DTtMD_I,3909
|
19
|
+
mkdocs_document_dates-2.0.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
20
|
+
mkdocs_document_dates-2.0.0.dist-info/entry_points.txt,sha256=sTieQtdvk_F4VeLQoyBc9Ck2_Bg40BXk1Piq-5-fqvA,178
|
21
|
+
mkdocs_document_dates-2.0.0.dist-info/top_level.txt,sha256=yWkKQdNuAJJVqUQ9uLa5xD4x_Gux4IfOUpy8Ryagdwc,22
|
22
|
+
mkdocs_document_dates-2.0.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
{mkdocs_document_dates-1.9.9.dist-info → mkdocs_document_dates-2.0.0.dist-info}/top_level.txt
RENAMED
File without changes
|