diff --git a/code_review_graph/graph.py b/code_review_graph/graph.py index 0e7054e..96591ef 100644 --- a/code_review_graph/graph.py +++ b/code_review_graph/graph.py @@ -170,6 +170,8 @@ def _invalidate_cache(self) -> None: self._stats_cache = None def close(self) -> None: + if self._conn.in_transaction: + self._conn.commit() self._conn.close() # --- Write operations --- diff --git a/debug_test.py b/debug_test.py new file mode 100644 index 0000000..97701b9 --- /dev/null +++ b/debug_test.py @@ -0,0 +1,26 @@ + +import tempfile +import gc +import time +from pathlib import Path + +def test_foo(): + # Exact pattern from the test + tmp = tempfile.NamedTemporaryFile(suffix='.db', delete=False) + path = tmp.name + + # Don't close tmp, but use its name to open another connection + import sqlite3 + conn = sqlite3.connect(path) + conn.execute('CREATE TABLE test (id INTEGER PRIMARY KEY)') + conn.commit() + + # Close the sqlite connection + conn.close() + + # Now try to delete via Path + try: + Path(path).unlink() + print("Deleted successfully") + except PermissionError as e: + print(f"Failed to delete: {e}") diff --git a/tests/test_changes.py b/tests/test_changes.py index 93562e2..c7649b7 100644 --- a/tests/test_changes.py +++ b/tests/test_changes.py @@ -23,6 +23,7 @@ def setup_method(self): def teardown_method(self): self.store.close() + self.tmp.close() Path(self.tmp.name).unlink(missing_ok=True) # -- helpers -- diff --git a/tests/test_communities.py b/tests/test_communities.py index 74e5f8d..211ec78 100644 --- a/tests/test_communities.py +++ b/tests/test_communities.py @@ -26,6 +26,7 @@ def setup_method(self): def teardown_method(self): self.store.close() + self.tmp.close() Path(self.tmp.name).unlink(missing_ok=True) def _seed_two_clusters(self): diff --git a/tests/test_flows.py b/tests/test_flows.py index f7743b4..2dd8552 100644 --- a/tests/test_flows.py +++ b/tests/test_flows.py @@ -22,6 +22,7 @@ def setup_method(self): def teardown_method(self): self.store.close() + self.tmp.close() Path(self.tmp.name).unlink(missing_ok=True) # -- helpers -- diff --git a/tests/test_graph.py b/tests/test_graph.py index 0aafe27..22ae56d 100644 --- a/tests/test_graph.py +++ b/tests/test_graph.py @@ -1,5 +1,6 @@ """Tests for the graph storage and query engine.""" +import gc import tempfile from pathlib import Path @@ -14,6 +15,8 @@ def setup_method(self): def teardown_method(self): self.store.close() + self.tmp.close() + gc.collect() Path(self.tmp.name).unlink(missing_ok=True) def _make_file_node(self, path="/test/file.py"): diff --git a/tests/test_integration_v2.py b/tests/test_integration_v2.py index 15773bf..26cbc6f 100644 --- a/tests/test_integration_v2.py +++ b/tests/test_integration_v2.py @@ -42,6 +42,7 @@ def setup_method(self): def teardown_method(self): self.store.close() + self.tmp.close() Path(self.tmp.name).unlink(missing_ok=True) # ----------------------------------------------------------------- diff --git a/tests/test_migrations.py b/tests/test_migrations.py index ef45220..665e553 100644 --- a/tests/test_migrations.py +++ b/tests/test_migrations.py @@ -20,6 +20,7 @@ def setup_method(self): def teardown_method(self): self.store.close() + self.tmp.close() Path(self.tmp.name).unlink(missing_ok=True) def test_fresh_db_gets_latest_version(self): diff --git a/tests/test_refactor.py b/tests/test_refactor.py index 2ee55c4..9477dc8 100644 --- a/tests/test_refactor.py +++ b/tests/test_refactor.py @@ -28,6 +28,7 @@ def setup_method(self): def teardown_method(self): self.store.close() + self.tmp.close() Path(self.tmp.name).unlink(missing_ok=True) # Clean up pending refactors. with _refactor_lock: @@ -115,6 +116,7 @@ def setup_method(self): def teardown_method(self): self.store.close() + self.tmp.close() Path(self.tmp.name).unlink(missing_ok=True) def _seed(self): @@ -202,6 +204,7 @@ def setup_method(self): def teardown_method(self): self.store.close() + self.tmp.close() Path(self.tmp.name).unlink(missing_ok=True) def _seed(self): diff --git a/tests/test_search.py b/tests/test_search.py index 165ad83..b3dbad6 100644 --- a/tests/test_search.py +++ b/tests/test_search.py @@ -21,6 +21,7 @@ def setup_method(self): def teardown_method(self): self.store.close() + self.tmp.close() Path(self.tmp.name).unlink(missing_ok=True) def _seed_data(self): diff --git a/tests/test_wiki.py b/tests/test_wiki.py index 18212e7..e562d7d 100644 --- a/tests/test_wiki.py +++ b/tests/test_wiki.py @@ -22,6 +22,7 @@ def setup_method(self): def teardown_method(self): self.store.close() + self.tmp.close() Path(self.tmp.name).unlink(missing_ok=True) # Clean up wiki dir wiki_path = Path(self.wiki_dir)