Skip to content

Commit

Permalink
Fix new PermissionError in Windows with Python 3.7
Browse files Browse the repository at this point in the history
In Python 3.7, tempfile.TemporaryDirectory doesn't delete files on
cleanup whose permissions have to be changed to be deleted.

This uses `@with_rw_directory` instead, though that may be overkill
here.
  • Loading branch information
EliahKagan committed Feb 15, 2024
1 parent dd42e38 commit 90cf4d7
Showing 1 changed file with 29 additions and 31 deletions.
60 changes: 29 additions & 31 deletions test/test_tree.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,10 @@
import os.path as osp
from pathlib import Path
import subprocess
import tempfile

from git.objects import Tree, Blob
from git.util import cwd
from test.lib import TestBase
from test.lib import TestBase, with_rw_directory


class TestTree(TestBase):
Expand Down Expand Up @@ -43,36 +42,35 @@ def test_serializable(self):
testtree._deserialize(stream)
# END for each item in tree

@staticmethod
def _get_git_ordered_files():
@with_rw_directory
def _get_git_ordered_files(self, rw_dir):
"""Get files as git orders them, to compare in test_tree_modifier_ordering."""
with tempfile.TemporaryDirectory() as tdir:
# Create directory contents.
Path(tdir, "file").mkdir()
for filename in (
"bin",
"bin.d",
"file.to",
"file.toml",
"file.toml.bin",
"file0",
):
Path(tdir, filename).touch()
Path(tdir, "file", "a").touch()

with cwd(tdir):
# Prepare the repository.
subprocess.run(["git", "init", "-q"], check=True)
subprocess.run(["git", "add", "."], check=True)
subprocess.run(["git", "commit", "-m", "c1"], check=True)

# Get git output from which an ordered file list can be parsed.
rev_parse_command = ["git", "rev-parse", "HEAD^{tree}"]
tree_hash = subprocess.check_output(rev_parse_command).decode().strip()
cat_file_command = ["git", "cat-file", "-p", tree_hash]
cat_file_output = subprocess.check_output(cat_file_command).decode()

return [line.split()[-1] for line in cat_file_output.split("\n") if line]
# Create directory contents.
Path(rw_dir, "file").mkdir()
for filename in (
"bin",
"bin.d",
"file.to",
"file.toml",
"file.toml.bin",
"file0",
):
Path(rw_dir, filename).touch()
Path(rw_dir, "file", "a").touch()

with cwd(rw_dir):
# Prepare the repository.
subprocess.run(["git", "init", "-q"], check=True)
subprocess.run(["git", "add", "."], check=True)
subprocess.run(["git", "commit", "-m", "c1"], check=True)

# Get git output from which an ordered file list can be parsed.
rev_parse_command = ["git", "rev-parse", "HEAD^{tree}"]
tree_hash = subprocess.check_output(rev_parse_command).decode().strip()
cat_file_command = ["git", "cat-file", "-p", tree_hash]
cat_file_output = subprocess.check_output(cat_file_command).decode()

return [line.split()[-1] for line in cat_file_output.split("\n") if line]

def test_tree_modifier_ordering(self):
"""TreeModifier.set_done() sorts files in the same order git does."""
Expand Down

0 comments on commit 90cf4d7

Please sign in to comment.