Skip to content

Commit

Permalink
fix: add treeNotSorted test
Browse files Browse the repository at this point in the history
  • Loading branch information
Ethan committed Jan 15, 2024
1 parent 53ddf38 commit 4e1e845
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 0 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -53,5 +53,6 @@ Contributors are:
-Santos Gallegos <stsewd _at_ proton.me>
-Wenhan Zhu <wzhu.cosmos _at_ gmail.com>
-Eliah Kagan <eliah.kagan _at_ gmail.com>
-Ethan Lin <et.repositories _at_ gmail.com>

Portions derived from other open source works and are clearly marked.
61 changes: 61 additions & 0 deletions test/test_tree.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@
from git.objects import Tree, Blob
from test.lib import TestBase

import os
import os.path as osp
import shutil
import subprocess
from pathlib import Path


class TestTree(TestBase):
Expand Down Expand Up @@ -40,6 +44,63 @@ def test_serializable(self):
testtree._deserialize(stream)
# END for each item in tree

def test_tree_modifier_ordering(self):
def setup_git_repository_and_get_ordered_files():
os.mkdir("tmp")
os.chdir("tmp")
subprocess.run(["git", "init", "-q"], check=True)
os.mkdir("file")
for filename in [
"bin",
"bin.d",
"file.to",
"file.toml",
"file.toml.bin",
"file0",
"file/a",
]:
Path(filename).touch()

subprocess.run(["git", "add", "."], check=True)
subprocess.run(["git", "commit", "-m", "c1"], check=True)
tree_hash = subprocess.check_output(["git", "rev-parse", "HEAD^{tree}"]).decode().strip()
cat_file_output = subprocess.check_output(["git", "cat-file", "-p", tree_hash]).decode()
return [line.split()[-1] for line in cat_file_output.split("\n") if line]

hexsha = "6c1faef799095f3990e9970bc2cb10aa0221cf9c"
roottree = self.rorepo.tree(hexsha)
blob_mode = Tree.blob_id << 12
tree_mode = Tree.tree_id << 12

files_in_desired_order = [
(blob_mode, "bin"),
(blob_mode, "bin.d"),
(blob_mode, "file.to"),
(blob_mode, "file.toml"),
(blob_mode, "file.toml.bin"),
(blob_mode, "file0"),
(tree_mode, "file"),
]
mod = roottree.cache
for file_mode, file_name in files_in_desired_order:
mod.add(hexsha, file_mode, file_name)
# end for each file

def file_names_in_order():
return [t[1] for t in files_in_desired_order]

def names_in_mod_cache():
a = [t[2] for t in mod._cache]
here = file_names_in_order()
return [e for e in a if e in here]

git_file_names_in_order = setup_git_repository_and_get_ordered_files()
os.chdir("..")
shutil.rmtree("tmp")

mod.set_done()
assert names_in_mod_cache() == git_file_names_in_order, "set_done() performs git-sorting"

def test_traverse(self):
root = self.rorepo.tree("0.1.6")
num_recursive = 0
Expand Down

0 comments on commit 4e1e845

Please sign in to comment.