mkdocs2confluence 0.8.2__tar.gz → 0.8.4__tar.gz
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.
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/PKG-INFO +3 -3
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/README.md +2 -2
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/pyproject.toml +1 -1
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs2confluence.egg-info/PKG-INFO +3 -3
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/publisher/client.py +0 -2
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/sync/command.py +3 -2
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/sync/state.py +1 -1
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_cli.py +57 -1
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_sync_command.py +8 -8
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_sync_state.py +1 -1
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/LICENSE +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/setup.cfg +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs2confluence.egg-info/SOURCES.txt +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs2confluence.egg-info/dependency_links.txt +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs2confluence.egg-info/entry_points.txt +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs2confluence.egg-info/requires.txt +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs2confluence.egg-info/top_level.txt +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/__init__.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/cli.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/emitter/__init__.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/emitter/xhtml.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/ir/__init__.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/ir/document.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/ir/nodes.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/ir/treeutil.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/loader/__init__.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/loader/config.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/loader/extra_css.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/loader/nav.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/loader/page.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/parser/__init__.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/parser/markdown.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/pdf/__init__.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/pdf/generator.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/pdf/render.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/preprocess/__init__.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/preprocess/abbrevs.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/preprocess/fence.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/preprocess/frontmatter.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/preprocess/icons.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/preprocess/includes.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/preprocess/linkdefs.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/preview/__init__.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/preview/render.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/preview/server.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/publisher/__init__.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/publisher/pipeline.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/sync/__init__.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/sync/anchoring.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/sync/comments.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/sync/github.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/sync/platform.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/transforms/__init__.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/transforms/abbrevs.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/transforms/assets.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/transforms/editlink.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/transforms/images.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/transforms/internallinks.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/transforms/mermaid.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_abbrevs.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_editlink.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_emitter.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_extra_css.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_frontmatter.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_icons.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_images.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_internallinks.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_ir.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_linkdefs.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_loader.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_mermaid.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_page_loader.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_parser.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_pdf.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_preprocess.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_preview.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_publish_client.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_publish_config.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_publish_pipeline.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_server.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_sync_anchoring.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_sync_comments.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_sync_github.py +0 -0
- {mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/tests/test_treeutil.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mkdocs2confluence
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.4
|
|
4
4
|
Summary: Publish MkDocs Material pages to Confluence Cloud — admonitions, Mermaid diagrams, tabs, page properties and more
|
|
5
5
|
Author: Anders Hybertz
|
|
6
6
|
License: GPL-3.0-or-later
|
|
@@ -326,7 +326,7 @@ confluence:
|
|
|
326
326
|
|
|
327
327
|
**Workflow:**
|
|
328
328
|
|
|
329
|
-
1. Run `mk2conf publish`
|
|
329
|
+
1. Run `mk2conf publish` (full or partial) — writes/merges `.mk2conf-pages.json` mapping source files to Confluence page IDs. Every publish run merges into this file, so partial `--page` / `--section` runs and multiple configs in the same repo all accumulate correctly.
|
|
330
330
|
2. Run `mk2conf sync-comments` — for each page with open Confluence comments, creates a `mk2conf/review/{slug}` branch and PR, then posts each comment as a GitHub review thread. Inline comments with a text selection are anchored to the matching source line; page-level comments fall back to file-level review threads. Every thread body includes a **View in Confluence** deep-link that opens Confluence focused on the exact comment.
|
|
331
331
|
3. Developer addresses feedback on the branch, pushes changes, and merges the PR.
|
|
332
332
|
4. Run `mk2conf sync-comments --check-merges` — detects merged PRs, adds a resolution reply to each Confluence comment with the commit info, and marks the comments as resolved.
|
|
@@ -335,7 +335,7 @@ confluence:
|
|
|
335
335
|
|
|
336
336
|
| File | Purpose |
|
|
337
337
|
|---|---|
|
|
338
|
-
| `.mk2conf-pages.json` | Source path → Confluence page ID map,
|
|
338
|
+
| `.mk2conf-pages.json` | Source path → Confluence page ID map, merged after each `publish` run |
|
|
339
339
|
| `.mk2conf-sync-state.json` | Tracks open/merged review PRs and their associated comment IDs |
|
|
340
340
|
|
|
341
341
|
---
|
|
@@ -286,7 +286,7 @@ confluence:
|
|
|
286
286
|
|
|
287
287
|
**Workflow:**
|
|
288
288
|
|
|
289
|
-
1. Run `mk2conf publish`
|
|
289
|
+
1. Run `mk2conf publish` (full or partial) — writes/merges `.mk2conf-pages.json` mapping source files to Confluence page IDs. Every publish run merges into this file, so partial `--page` / `--section` runs and multiple configs in the same repo all accumulate correctly.
|
|
290
290
|
2. Run `mk2conf sync-comments` — for each page with open Confluence comments, creates a `mk2conf/review/{slug}` branch and PR, then posts each comment as a GitHub review thread. Inline comments with a text selection are anchored to the matching source line; page-level comments fall back to file-level review threads. Every thread body includes a **View in Confluence** deep-link that opens Confluence focused on the exact comment.
|
|
291
291
|
3. Developer addresses feedback on the branch, pushes changes, and merges the PR.
|
|
292
292
|
4. Run `mk2conf sync-comments --check-merges` — detects merged PRs, adds a resolution reply to each Confluence comment with the commit info, and marks the comments as resolved.
|
|
@@ -295,7 +295,7 @@ confluence:
|
|
|
295
295
|
|
|
296
296
|
| File | Purpose |
|
|
297
297
|
|---|---|
|
|
298
|
-
| `.mk2conf-pages.json` | Source path → Confluence page ID map,
|
|
298
|
+
| `.mk2conf-pages.json` | Source path → Confluence page ID map, merged after each `publish` run |
|
|
299
299
|
| `.mk2conf-sync-state.json` | Tracks open/merged review PRs and their associated comment IDs |
|
|
300
300
|
|
|
301
301
|
---
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "mkdocs2confluence"
|
|
3
|
-
version = "0.8.
|
|
3
|
+
version = "0.8.4"
|
|
4
4
|
description = "Publish MkDocs Material pages to Confluence Cloud — admonitions, Mermaid diagrams, tabs, page properties and more"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = { text = "GPL-3.0-or-later" }
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mkdocs2confluence
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.4
|
|
4
4
|
Summary: Publish MkDocs Material pages to Confluence Cloud — admonitions, Mermaid diagrams, tabs, page properties and more
|
|
5
5
|
Author: Anders Hybertz
|
|
6
6
|
License: GPL-3.0-or-later
|
|
@@ -326,7 +326,7 @@ confluence:
|
|
|
326
326
|
|
|
327
327
|
**Workflow:**
|
|
328
328
|
|
|
329
|
-
1. Run `mk2conf publish`
|
|
329
|
+
1. Run `mk2conf publish` (full or partial) — writes/merges `.mk2conf-pages.json` mapping source files to Confluence page IDs. Every publish run merges into this file, so partial `--page` / `--section` runs and multiple configs in the same repo all accumulate correctly.
|
|
330
330
|
2. Run `mk2conf sync-comments` — for each page with open Confluence comments, creates a `mk2conf/review/{slug}` branch and PR, then posts each comment as a GitHub review thread. Inline comments with a text selection are anchored to the matching source line; page-level comments fall back to file-level review threads. Every thread body includes a **View in Confluence** deep-link that opens Confluence focused on the exact comment.
|
|
331
331
|
3. Developer addresses feedback on the branch, pushes changes, and merges the PR.
|
|
332
332
|
4. Run `mk2conf sync-comments --check-merges` — detects merged PRs, adds a resolution reply to each Confluence comment with the commit info, and marks the comments as resolved.
|
|
@@ -335,7 +335,7 @@ confluence:
|
|
|
335
335
|
|
|
336
336
|
| File | Purpose |
|
|
337
337
|
|---|---|
|
|
338
|
-
| `.mk2conf-pages.json` | Source path → Confluence page ID map,
|
|
338
|
+
| `.mk2conf-pages.json` | Source path → Confluence page ID map, merged after each `publish` run |
|
|
339
339
|
| `.mk2conf-sync-state.json` | Tracks open/merged review PRs and their associated comment IDs |
|
|
340
340
|
|
|
341
341
|
---
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/publisher/client.py
RENAMED
|
@@ -554,7 +554,6 @@ class ConfluenceClient:
|
|
|
554
554
|
next_url = data.get("_links", {}).get("next")
|
|
555
555
|
if not next_url:
|
|
556
556
|
break
|
|
557
|
-
url = self._v2(f"/pages/{page_id}/inline-comments")
|
|
558
557
|
params = {"resolution-status": "open", "body-format": "storage",
|
|
559
558
|
"limit": 250, "cursor": _extract_cursor(next_url)}
|
|
560
559
|
return results
|
|
@@ -572,7 +571,6 @@ class ConfluenceClient:
|
|
|
572
571
|
next_url = data.get("_links", {}).get("next")
|
|
573
572
|
if not next_url:
|
|
574
573
|
break
|
|
575
|
-
url = self._v2(f"/pages/{page_id}/footer-comments")
|
|
576
574
|
params = {"resolution-status": "open", "body-format": "storage",
|
|
577
575
|
"limit": 250, "cursor": _extract_cursor(next_url)}
|
|
578
576
|
return results
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/sync/command.py
RENAMED
|
@@ -57,7 +57,8 @@ def run_sync_comments(
|
|
|
57
57
|
|
|
58
58
|
Returns the number of new PRs created.
|
|
59
59
|
"""
|
|
60
|
-
|
|
60
|
+
if config.confluence is None:
|
|
61
|
+
raise RuntimeError("run_sync_comments called without a 'confluence:' config section")
|
|
61
62
|
conf = config.confluence
|
|
62
63
|
|
|
63
64
|
page_map = load_page_map(config_dir)
|
|
@@ -121,7 +122,7 @@ def run_sync_comments(
|
|
|
121
122
|
|
|
122
123
|
state.prs[str(pr_number)] = PRRecord(
|
|
123
124
|
page_id=page_id,
|
|
124
|
-
|
|
125
|
+
pr_title=pr_title,
|
|
125
126
|
source_path=source_path,
|
|
126
127
|
branch=branch,
|
|
127
128
|
pr_number=pr_number,
|
|
@@ -12,7 +12,7 @@ class PRRecord:
|
|
|
12
12
|
"""Everything we need to know about one open or merged review PR."""
|
|
13
13
|
|
|
14
14
|
page_id: str
|
|
15
|
-
|
|
15
|
+
pr_title: str # PR title, e.g. "Documentation review: docs/foo.md"
|
|
16
16
|
source_path: str # repo-relative, e.g. "docs/architecture/overview.md"
|
|
17
17
|
branch: str
|
|
18
18
|
pr_number: int
|
|
@@ -27,7 +27,7 @@ def _minimal_config(tmp_path: Path, *, extra: str = "") -> Path:
|
|
|
27
27
|
"""),
|
|
28
28
|
encoding="utf-8",
|
|
29
29
|
)
|
|
30
|
-
(tmp_path / "docs").mkdir()
|
|
30
|
+
(tmp_path / "docs").mkdir(exist_ok=True)
|
|
31
31
|
return yml
|
|
32
32
|
|
|
33
33
|
|
|
@@ -237,3 +237,59 @@ class TestWatchFlag:
|
|
|
237
237
|
main(["preview", "--config", str(yml), "--page", "index.md", "--watch"])
|
|
238
238
|
|
|
239
239
|
mock_render.assert_called_once()
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
class TestPageMap:
|
|
243
|
+
"""The page map (.mk2conf-pages.json) should merge on every publish run."""
|
|
244
|
+
|
|
245
|
+
def _run_publish(self, tmp_path: Path, plan_actions: list) -> None:
|
|
246
|
+
yml = _minimal_config(tmp_path)
|
|
247
|
+
(tmp_path / "docs").mkdir(exist_ok=True)
|
|
248
|
+
(tmp_path / "docs" / "index.md").write_text("# Home\n", encoding="utf-8")
|
|
249
|
+
mock_client = MagicMock()
|
|
250
|
+
mock_client.__enter__ = MagicMock(return_value=mock_client)
|
|
251
|
+
mock_client.__exit__ = MagicMock(return_value=False)
|
|
252
|
+
mock_client.get_space_id.return_value = "~SPACE"
|
|
253
|
+
with patch("mkdocs_to_confluence.publisher.client.ConfluenceClient", return_value=mock_client), \
|
|
254
|
+
patch("mkdocs_to_confluence.publisher.pipeline.plan_publish", return_value=plan_actions), \
|
|
255
|
+
patch("mkdocs_to_confluence.publisher.pipeline.execute_publish", return_value=MagicMock(
|
|
256
|
+
__str__=lambda s: "0 created",
|
|
257
|
+
errors=[],
|
|
258
|
+
)), \
|
|
259
|
+
patch("sys.stdout.isatty", return_value=False):
|
|
260
|
+
main(["publish", "--config", str(yml), "--quiet"])
|
|
261
|
+
|
|
262
|
+
def _make_action(self, docs_path: str, page_id: str) -> MagicMock:
|
|
263
|
+
action = MagicMock()
|
|
264
|
+
action.node.docs_path = docs_path
|
|
265
|
+
action.page_id = page_id
|
|
266
|
+
action.is_folder = False
|
|
267
|
+
return action
|
|
268
|
+
|
|
269
|
+
def test_page_map_written_on_full_publish(self, tmp_path: Path) -> None:
|
|
270
|
+
action = self._make_action("index.md", "111")
|
|
271
|
+
self._run_publish(tmp_path, [action])
|
|
272
|
+
import json
|
|
273
|
+
pm = json.loads((tmp_path / ".mk2conf-pages.json").read_text())
|
|
274
|
+
assert "docs/index.md" in pm
|
|
275
|
+
assert pm["docs/index.md"] == "111"
|
|
276
|
+
|
|
277
|
+
def test_page_map_merges_on_second_publish(self, tmp_path: Path) -> None:
|
|
278
|
+
import json
|
|
279
|
+
# First publish: index.md
|
|
280
|
+
self._run_publish(tmp_path, [self._make_action("index.md", "111")])
|
|
281
|
+
# Second publish: overview.md only
|
|
282
|
+
self._run_publish(tmp_path, [self._make_action("overview.md", "222")])
|
|
283
|
+
pm = json.loads((tmp_path / ".mk2conf-pages.json").read_text())
|
|
284
|
+
# Both entries should be present
|
|
285
|
+
assert pm.get("docs/index.md") == "111"
|
|
286
|
+
assert pm.get("docs/overview.md") == "222"
|
|
287
|
+
|
|
288
|
+
def test_page_map_merge_updates_existing_entry(self, tmp_path: Path) -> None:
|
|
289
|
+
import json
|
|
290
|
+
# First publish: index.md with page_id 111
|
|
291
|
+
self._run_publish(tmp_path, [self._make_action("index.md", "111")])
|
|
292
|
+
# Second publish: same file, new page_id (e.g. recreated)
|
|
293
|
+
self._run_publish(tmp_path, [self._make_action("index.md", "999")])
|
|
294
|
+
pm = json.loads((tmp_path / ".mk2conf-pages.json").read_text())
|
|
295
|
+
assert pm["docs/index.md"] == "999"
|
|
@@ -88,7 +88,7 @@ def test_run_sync_comments_skips_page_with_open_pr(tmp_path: Path) -> None:
|
|
|
88
88
|
existing = {
|
|
89
89
|
"10": {
|
|
90
90
|
"page_id": "111",
|
|
91
|
-
"
|
|
91
|
+
"pr_title": "Overview",
|
|
92
92
|
"source_path": "docs/overview.md",
|
|
93
93
|
"branch": "mk2conf/review/overview",
|
|
94
94
|
"pr_number": 10,
|
|
@@ -199,7 +199,7 @@ def test_check_and_resolve_merges_resolves_merged_pr(tmp_path: Path) -> None:
|
|
|
199
199
|
existing = {
|
|
200
200
|
"10": {
|
|
201
201
|
"page_id": "111",
|
|
202
|
-
"
|
|
202
|
+
"pr_title": "Overview",
|
|
203
203
|
"source_path": "docs/overview.md",
|
|
204
204
|
"branch": "mk2conf/review/overview",
|
|
205
205
|
"pr_number": 10,
|
|
@@ -240,7 +240,7 @@ def test_check_and_resolve_merges_skips_already_merged(tmp_path: Path) -> None:
|
|
|
240
240
|
existing = {
|
|
241
241
|
"10": {
|
|
242
242
|
"page_id": "111",
|
|
243
|
-
"
|
|
243
|
+
"pr_title": "Overview",
|
|
244
244
|
"source_path": "docs/overview.md",
|
|
245
245
|
"branch": "mk2conf/review/overview",
|
|
246
246
|
"pr_number": 10,
|
|
@@ -295,7 +295,7 @@ def test_run_sync_verbose_skip_message(tmp_path: Path, capsys: pytest.CaptureFix
|
|
|
295
295
|
existing = {
|
|
296
296
|
"10": {
|
|
297
297
|
"page_id": "111",
|
|
298
|
-
"
|
|
298
|
+
"pr_title": "Overview",
|
|
299
299
|
"source_path": "docs/overview.md",
|
|
300
300
|
"branch": "mk2conf/review/overview",
|
|
301
301
|
"pr_number": 10,
|
|
@@ -508,7 +508,7 @@ def test_check_merges_verbose_output(tmp_path: Path, capsys: pytest.CaptureFixtu
|
|
|
508
508
|
existing = {
|
|
509
509
|
"5": {
|
|
510
510
|
"page_id": "AAA",
|
|
511
|
-
"
|
|
511
|
+
"pr_title": "Overview",
|
|
512
512
|
"source_path": "docs/overview.md",
|
|
513
513
|
"branch": "mk2conf/review/overview",
|
|
514
514
|
"pr_number": 5,
|
|
@@ -542,7 +542,7 @@ def test_check_merges_verbose_no_merges(tmp_path: Path, capsys: pytest.CaptureFi
|
|
|
542
542
|
existing = {
|
|
543
543
|
"5": {
|
|
544
544
|
"page_id": "AAA",
|
|
545
|
-
"
|
|
545
|
+
"pr_title": "Overview",
|
|
546
546
|
"source_path": "docs/overview.md",
|
|
547
547
|
"branch": "mk2conf/review/overview",
|
|
548
548
|
"pr_number": 5,
|
|
@@ -574,7 +574,7 @@ def test_check_merges_resolve_failure_warns(tmp_path: Path, capsys: pytest.Captu
|
|
|
574
574
|
existing = {
|
|
575
575
|
"6": {
|
|
576
576
|
"page_id": "BBB",
|
|
577
|
-
"
|
|
577
|
+
"pr_title": "Guide",
|
|
578
578
|
"source_path": "docs/guide.md",
|
|
579
579
|
"branch": "mk2conf/review/guide",
|
|
580
580
|
"pr_number": 6,
|
|
@@ -609,7 +609,7 @@ def test_check_merges_no_commit_sha(tmp_path: Path) -> None:
|
|
|
609
609
|
existing = {
|
|
610
610
|
"7": {
|
|
611
611
|
"page_id": "CCC",
|
|
612
|
-
"
|
|
612
|
+
"pr_title": "Ops",
|
|
613
613
|
"source_path": "docs/ops.md",
|
|
614
614
|
"branch": "mk2conf/review/ops",
|
|
615
615
|
"pr_number": 7,
|
|
@@ -10,7 +10,7 @@ from mkdocs_to_confluence.sync.state import PRRecord, SyncState
|
|
|
10
10
|
def _make_record(**kwargs: object) -> PRRecord:
|
|
11
11
|
defaults: dict = {
|
|
12
12
|
"page_id": "111",
|
|
13
|
-
"
|
|
13
|
+
"pr_title": "My Page",
|
|
14
14
|
"source_path": "docs/my-page.md",
|
|
15
15
|
"branch": "mk2conf/review/my-page",
|
|
16
16
|
"pr_number": 42,
|
|
File without changes
|
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs2confluence.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs2confluence.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs2confluence.egg-info/requires.txt
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs2confluence.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/emitter/__init__.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/emitter/xhtml.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/loader/__init__.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/loader/config.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/loader/extra_css.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/parser/__init__.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/parser/markdown.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/pdf/__init__.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/pdf/generator.py
RENAMED
|
File without changes
|
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/preprocess/__init__.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/preprocess/abbrevs.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/preprocess/fence.py
RENAMED
|
File without changes
|
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/preprocess/icons.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/preprocess/includes.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/preprocess/linkdefs.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/preview/__init__.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/preview/render.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/preview/server.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/publisher/__init__.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/publisher/pipeline.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/sync/__init__.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/sync/anchoring.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/sync/comments.py
RENAMED
|
File without changes
|
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/sync/platform.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/transforms/__init__.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/transforms/abbrevs.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/transforms/assets.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/transforms/editlink.py
RENAMED
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/transforms/images.py
RENAMED
|
File without changes
|
|
File without changes
|
{mkdocs2confluence-0.8.2 → mkdocs2confluence-0.8.4}/src/mkdocs_to_confluence/transforms/mermaid.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|