fix: [BUG] Some notes never exit "modified" status (#77)

This commit is contained in:
github-actions[bot]
2025-04-05 22:03:38 -05:00
committed by GitHub
parent 1844e58210
commit 7930ddb291
2 changed files with 73 additions and 4 deletions
+11 -4
View File
@@ -362,18 +362,25 @@ class SyncService:
# Update relations and search index
entity = await self.entity_service.update_entity_relations(path, entity_markdown)
# After updating relations, we need to compute the checksum again
# This is necessary for files with wikilinks to ensure consistent checksums
# after relation processing is complete
final_checksum = await self.file_service.compute_checksum(path)
# set checksum
await self.entity_repository.update(entity.id, {"checksum": checksum})
await self.entity_repository.update(entity.id, {"checksum": final_checksum})
logger.debug(
"Markdown sync completed",
path=path,
entity_id=entity.id,
observation_count=len(entity.observations),
relation_count=len(entity.relations),
checksum=final_checksum,
)
return entity, checksum
# Return the final checksum to ensure everything is consistent
return entity, final_checksum
async def sync_regular_file(self, path: str, new: bool = True) -> Tuple[Optional[Entity], str]:
"""Sync a non-markdown file with basic tracking.
+62
View File
@@ -0,0 +1,62 @@
"""Test for issue #72 - notes with wikilinks staying in modified status."""
import pytest
from pathlib import Path
from basic_memory.sync.sync_service import SyncService
async def create_test_file(path: Path, content: str) -> None:
"""Create a test file with given content."""
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(content)
@pytest.mark.asyncio
async def test_wikilink_modified_status_issue(sync_service: SyncService, test_config):
"""Test that files with wikilinks don't remain in modified status after sync."""
project_dir = test_config.home
# Create a file with a wikilink
content = """---
title: Test Wikilink
type: note
---
# Test File
This file contains a wikilink to [[another-file]].
"""
test_file_path = project_dir / "test_wikilink.md"
await create_test_file(test_file_path, content)
# Initial sync
report1 = await sync_service.sync(test_config.home, show_progress=False)
assert "test_wikilink.md" in report1.new
assert "test_wikilink.md" not in report1.modified
# Sync again without changing the file - should not be modified
report2 = await sync_service.sync(test_config.home, show_progress=False)
assert "test_wikilink.md" not in report2.new
assert "test_wikilink.md" not in report2.modified
# Create the target file
target_content = """---
title: Another File
type: note
---
# Another File
This is the target file.
"""
target_file_path = project_dir / "another_file.md"
await create_test_file(target_file_path, content)
# Sync again after adding target file
report3 = await sync_service.sync(test_config.home, show_progress=False)
assert "another_file.md" in report3.new
assert "test_wikilink.md" not in report3.modified
# Sync one more time - both files should now be stable
report4 = await sync_service.sync(test_config.home, show_progress=False)
assert "test_wikilink.md" not in report4.modified
assert "another_file.md" not in report4.modified