Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 08a819c

Browse filesBrowse files
author
Ethan
committed
fix: add treeNotSorted test
1 parent 6978325 commit 08a819c
Copy full SHA for 08a819c

File tree

1 file changed

+58
-0
lines changed
Filter options

1 file changed

+58
-0
lines changed

‎test/test_tree.py

Copy file name to clipboardExpand all lines: test/test_tree.py
+58Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
from git.objects import Tree, Blob
99
from test.lib import TestBase
1010

11+
import os
1112
import os.path as osp
13+
import subprocess
1214

1315

1416
class TestTree(TestBase):
@@ -40,6 +42,62 @@ def test_serializable(self):
4042
testtree._deserialize(stream)
4143
# END for each item in tree
4244

45+
def test_tree_modifier_ordering(self):
46+
def setup_git_repository_and_get_ordered_files():
47+
os.mkdir("tmp")
48+
os.chdir("tmp")
49+
subprocess.run(["git", "init", "-q"], check=True)
50+
os.mkdir("file")
51+
for filename in [
52+
"bin",
53+
"bin.d",
54+
"file.to",
55+
"file.toml",
56+
"file.toml.bin",
57+
"file0",
58+
"file/a",
59+
]:
60+
open(filename, "a").close()
61+
62+
subprocess.run(["git", "add", "."], check=True)
63+
subprocess.run(["git", "commit", "-m", "c1"], check=True)
64+
tree_hash = subprocess.check_output(["git", "rev-parse", "HEAD^{tree}"]).decode().strip()
65+
cat_file_output = subprocess.check_output(["git", "cat-file", "-p", tree_hash]).decode()
66+
return [line.split()[-1] for line in cat_file_output.split("\n") if line]
67+
68+
hexsha = "6c1faef799095f3990e9970bc2cb10aa0221cf9c"
69+
roottree = self.rorepo.tree(hexsha)
70+
blob_mode = Tree.blob_id << 12
71+
tree_mode = Tree.tree_id << 12
72+
73+
files_in_desired_order = [
74+
(blob_mode, "bin"),
75+
(blob_mode, "bin.d"),
76+
(blob_mode, "file.to"),
77+
(blob_mode, "file.toml"),
78+
(blob_mode, "file.toml.bin"),
79+
(blob_mode, "file0"),
80+
(tree_mode, "file"),
81+
]
82+
mod = roottree.cache
83+
for file_mode, file_name in files_in_desired_order:
84+
mod.add(hexsha, file_mode, file_name)
85+
# end for each file
86+
87+
def file_names_in_order():
88+
return [t[1] for t in files_in_desired_order]
89+
90+
def names_in_mod_cache():
91+
a = [t[2] for t in mod._cache]
92+
here = file_names_in_order()
93+
return [e for e in a if e in here]
94+
95+
git_file_names_in_order = setup_git_repository_and_get_ordered_files()
96+
os.chdir("..")
97+
98+
mod.set_done()
99+
assert names_in_mod_cache() == git_file_names_in_order, "set_done() performs git-sorting"
100+
43101
def test_traverse(self):
44102
root = self.rorepo.tree("0.1.6")
45103
num_recursive = 0

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.