Skip to content

Commit

Permalink
Fix issues removing files on windows
Browse files Browse the repository at this point in the history
  • Loading branch information
r-ash committed Feb 5, 2024
1 parent 2a62672 commit 9f3793a
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 22 deletions.
21 changes: 20 additions & 1 deletion src/outpack/filestore.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,26 @@ def ls(self):
return ret

def destroy(self) -> None:
shutil.rmtree(self._path)
def onerror(func, path, _exc_info):
"""
Error handler for ``shutil.rmtree``.
If the error is due to an access error (read only file)
it attempts to add write permission and then retries.
If the error is for another reason it re-raises the error.
We manually remove write permission in ``put`` above so this
is expected
Usage : ``shutil.rmtree(path, onerror=onerror)``
"""
if not os.access(path, os.W_OK):
os.chmod(path, stat.S_IWUSR)
func(path)

Check warning on line 74 in src/outpack/filestore.py

View check run for this annotation

Codecov / codecov/patch

src/outpack/filestore.py#L73-L74

Added lines #L73 - L74 were not covered by tests
else:
raise

Check warning on line 76 in src/outpack/filestore.py

View check run for this annotation

Codecov / codecov/patch

src/outpack/filestore.py#L76

Added line #L76 was not covered by tests

shutil.rmtree(self._path, onerror=onerror)

def tmp(self) -> str:
path = self._path / "tmp"
Expand Down
2 changes: 1 addition & 1 deletion tests/test_filestore.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ def test_get_files_fails_if_overwrite_false(tmp_path):

with pytest.raises(Exception) as e:
store.get(h, dest, False)
assert e.match(f"Failed to copy '.+' to '{dest}', file already exists")
assert e.match(rf"Failed to copy '.+' to '{dest}', file already exists")


def test_if_hash_not_found(tmp_path):
Expand Down
41 changes: 21 additions & 20 deletions tests/test_location_pull.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
)
from outpack.packet import Packet
from outpack.util import read_string

from .helpers import (
create_metadata_depends,
create_random_packet,
Expand Down Expand Up @@ -275,16 +276,16 @@ def test_can_resolve_dependencies_where_there_are_none():

def test_can_find_dependencies():
metadata = {
**create_metadata_depends("a")
**create_metadata_depends("b")
**create_metadata_depends("c")
**create_metadata_depends("d", ["a", "b"])
**create_metadata_depends("e", ["b", "c"])
**create_metadata_depends("f", ["a", "c"])
**create_metadata_depends("g", ["a", "f", "c"])
**create_metadata_depends("h", ["a", "b", "c"])
**create_metadata_depends("i", ["f"])
**create_metadata_depends("j", ["i", "e", "a"])
**create_metadata_depends("a"),
**create_metadata_depends("b"),
**create_metadata_depends("c"),
**create_metadata_depends("d", ["a", "b"]),
**create_metadata_depends("e", ["b", "c"]),
**create_metadata_depends("f", ["a", "c"]),
**create_metadata_depends("g", ["a", "f", "c"]),
**create_metadata_depends("h", ["a", "b", "c"]),
**create_metadata_depends("i", ["f"]),
**create_metadata_depends("j", ["i", "e", "a"]),
}

assert _find_all_dependencies(["a"], metadata) == ["a"]
Expand All @@ -311,16 +312,16 @@ def test_can_find_dependencies():

def test_can_find_multiple_dependencies_at_once():
metadata = {
**create_metadata_depends("a")
**create_metadata_depends("b")
**create_metadata_depends("c")
**create_metadata_depends("d", ["a", "b"])
**create_metadata_depends("e", ["b", "c"])
**create_metadata_depends("f", ["a", "c"])
**create_metadata_depends("g", ["a", "f", "c"])
**create_metadata_depends("h", ["a", "b", "c"])
**create_metadata_depends("i", ["f"])
**create_metadata_depends("j", ["i", "e", "a"])
**create_metadata_depends("a"),
**create_metadata_depends("b"),
**create_metadata_depends("c"),
**create_metadata_depends("d", ["a", "b"]),
**create_metadata_depends("e", ["b", "c"]),
**create_metadata_depends("f", ["a", "c"]),
**create_metadata_depends("g", ["a", "f", "c"]),
**create_metadata_depends("h", ["a", "b", "c"]),
**create_metadata_depends("i", ["f"]),
**create_metadata_depends("j", ["i", "e", "a"]),
}

assert _find_all_dependencies([], metadata) == []
Expand Down

0 comments on commit 9f3793a

Please sign in to comment.