|
|
@@ -4403,12 +4403,16 @@ class CheckoutTests(PorcelainTestCase):
|
|
|
f.write("new message\n")
|
|
|
|
|
|
status = list(porcelain.status(self.repo))
|
|
|
- self.assertEqual([{"add": [], "delete": [], "modify": []}, [], ["neu"]], status)
|
|
|
+ self.assertEqual(
|
|
|
+ [{"add": [], "delete": [], "modify": []}, [], [os.fsencode("neu")]], status
|
|
|
+ )
|
|
|
|
|
|
porcelain.checkout(self.repo, b"uni")
|
|
|
|
|
|
status = list(porcelain.status(self.repo))
|
|
|
- self.assertEqual([{"add": [], "delete": [], "modify": []}, [], ["neu"]], status)
|
|
|
+ self.assertEqual(
|
|
|
+ [{"add": [], "delete": [], "modify": []}, [], [os.fsencode("neu")]], status
|
|
|
+ )
|
|
|
|
|
|
def test_checkout_to_branch_with_new_files(self) -> None:
|
|
|
porcelain.checkout(self.repo, b"uni")
|
|
|
@@ -6099,8 +6103,8 @@ class StatusTests(PorcelainTestCase):
|
|
|
|
|
|
results = porcelain.status(self.repo)
|
|
|
|
|
|
- self.assertEqual(results.staged["add"][0], filename_add.encode("ascii"))
|
|
|
- self.assertEqual(results.unstaged, [b"foo"])
|
|
|
+ self.assertEqual(results.staged["add"][0], os.fsencode(filename_add))
|
|
|
+ self.assertEqual(results.unstaged, [os.fsencode("foo")])
|
|
|
|
|
|
def test_status_with_core_preloadindex(self) -> None:
|
|
|
"""Test status with core.preloadIndex enabled."""
|
|
|
@@ -6139,7 +6143,7 @@ class StatusTests(PorcelainTestCase):
|
|
|
|
|
|
# Check that we detected the correct unstaged changes
|
|
|
unstaged_sorted = sorted(results.unstaged)
|
|
|
- expected_sorted = sorted([f.encode("ascii") for f in modified_files])
|
|
|
+ expected_sorted = sorted([os.fsencode(f) for f in modified_files])
|
|
|
self.assertEqual(unstaged_sorted, expected_sorted)
|
|
|
|
|
|
def test_status_all(self) -> None:
|
|
|
@@ -6175,10 +6179,14 @@ class StatusTests(PorcelainTestCase):
|
|
|
f.write("origstuff")
|
|
|
results = porcelain.status(self.repo.path)
|
|
|
self.assertDictEqual(
|
|
|
- {"add": [b"baz"], "delete": [b"foo"], "modify": [b"bar"]},
|
|
|
+ {
|
|
|
+ "add": [os.fsencode("baz")],
|
|
|
+ "delete": [os.fsencode("foo")],
|
|
|
+ "modify": [os.fsencode("bar")],
|
|
|
+ },
|
|
|
results.staged,
|
|
|
)
|
|
|
- self.assertListEqual(results.unstaged, [b"blye"])
|
|
|
+ self.assertListEqual(results.unstaged, [os.fsencode("blye")])
|
|
|
results_no_untracked = porcelain.status(self.repo.path, untracked_files="no")
|
|
|
self.assertListEqual(results_no_untracked.untracked, [])
|
|
|
|
|
|
@@ -6194,7 +6202,9 @@ class StatusTests(PorcelainTestCase):
|
|
|
fh.write("untracked")
|
|
|
|
|
|
_, _, untracked = porcelain.status(self.repo.path, untracked_files="all")
|
|
|
- self.assertEqual(untracked, ["untracked_dir/untracked_file"])
|
|
|
+ self.assertEqual(
|
|
|
+ untracked, [os.fsencode(os.path.join("untracked_dir", "untracked_file"))]
|
|
|
+ )
|
|
|
|
|
|
def test_status_untracked_path_normal(self) -> None:
|
|
|
# Create an untracked directory with multiple files
|
|
|
@@ -6216,16 +6226,16 @@ class StatusTests(PorcelainTestCase):
|
|
|
|
|
|
# Test "normal" mode - should only show the directory, not individual files
|
|
|
_, _, untracked = porcelain.status(self.repo.path, untracked_files="normal")
|
|
|
- self.assertEqual(untracked, ["untracked_dir/"])
|
|
|
+ self.assertEqual(untracked, [os.fsencode("untracked_dir" + os.sep)])
|
|
|
|
|
|
# Test "all" mode - should show all files
|
|
|
_, _, untracked_all = porcelain.status(self.repo.path, untracked_files="all")
|
|
|
self.assertEqual(
|
|
|
sorted(untracked_all),
|
|
|
[
|
|
|
- "untracked_dir/file1",
|
|
|
- "untracked_dir/file2",
|
|
|
- "untracked_dir/nested/file3",
|
|
|
+ os.fsencode(os.path.join("untracked_dir", "file1")),
|
|
|
+ os.fsencode(os.path.join("untracked_dir", "file2")),
|
|
|
+ os.fsencode(os.path.join("untracked_dir", "nested", "file3")),
|
|
|
],
|
|
|
)
|
|
|
|
|
|
@@ -6253,11 +6263,15 @@ class StatusTests(PorcelainTestCase):
|
|
|
|
|
|
# In "normal" mode, should show individual untracked files in mixed dirs
|
|
|
_, _, untracked = porcelain.status(self.repo.path, untracked_files="normal")
|
|
|
- self.assertEqual(untracked, ["mixed_dir/untracked.txt"])
|
|
|
+ self.assertEqual(
|
|
|
+ untracked, [os.fsencode(os.path.join("mixed_dir", "untracked.txt"))]
|
|
|
+ )
|
|
|
|
|
|
# In "all" mode, should be the same for mixed directories
|
|
|
_, _, untracked_all = porcelain.status(self.repo.path, untracked_files="all")
|
|
|
- self.assertEqual(untracked_all, ["mixed_dir/untracked.txt"])
|
|
|
+ self.assertEqual(
|
|
|
+ untracked_all, [os.fsencode(os.path.join("mixed_dir", "untracked.txt"))]
|
|
|
+ )
|
|
|
|
|
|
def test_status_crlf_mismatch(self) -> None:
|
|
|
# First make a commit as if the file has been added on a Linux system
|
|
|
@@ -6280,7 +6294,7 @@ class StatusTests(PorcelainTestCase):
|
|
|
|
|
|
results = porcelain.status(self.repo)
|
|
|
self.assertDictEqual({"add": [], "delete": [], "modify": []}, results.staged)
|
|
|
- self.assertListEqual(results.unstaged, [b"crlf"])
|
|
|
+ self.assertListEqual(results.unstaged, [os.fsencode("crlf")])
|
|
|
self.assertListEqual(results.untracked, [])
|
|
|
|
|
|
def test_status_autocrlf_true(self) -> None:
|
|
|
@@ -6348,7 +6362,8 @@ class StatusTests(PorcelainTestCase):
|
|
|
|
|
|
results = porcelain.status(self.repo)
|
|
|
self.assertDictEqual(
|
|
|
- {"add": [b"crlf-new"], "delete": [], "modify": []}, results.staged
|
|
|
+ {"add": [os.fsencode("crlf-new")], "delete": [], "modify": []},
|
|
|
+ results.staged,
|
|
|
)
|
|
|
# File committed with CRLF before autocrlf=input was enabled
|
|
|
# will NOT appear as unstaged because stat matching optimization
|
|
|
@@ -6382,7 +6397,7 @@ class StatusTests(PorcelainTestCase):
|
|
|
|
|
|
results = porcelain.status(self.repo)
|
|
|
# Modified file should be detected as unstaged
|
|
|
- self.assertListEqual(results.unstaged, [b"crlf-file.txt"])
|
|
|
+ self.assertListEqual(results.unstaged, [os.fsencode("crlf-file.txt")])
|
|
|
|
|
|
def test_status_autocrlf_input_binary(self) -> None:
|
|
|
"""Test that binary files are not affected by autocrlf=input."""
|
|
|
@@ -6554,11 +6569,16 @@ class StatusTests(PorcelainTestCase):
|
|
|
),
|
|
|
)
|
|
|
self.assertEqual(
|
|
|
- {".gitignore", "notignored", "link"},
|
|
|
+ {os.fsencode(".gitignore"), os.fsencode("notignored"), os.fsencode("link")},
|
|
|
set(porcelain.status(self.repo).untracked),
|
|
|
)
|
|
|
self.assertEqual(
|
|
|
- {".gitignore", "notignored", "ignored", "link"},
|
|
|
+ {
|
|
|
+ os.fsencode(".gitignore"),
|
|
|
+ os.fsencode("notignored"),
|
|
|
+ os.fsencode("ignored"),
|
|
|
+ os.fsencode("link"),
|
|
|
+ },
|
|
|
set(porcelain.status(self.repo, ignored=True).untracked),
|
|
|
)
|
|
|
|
|
|
@@ -6679,14 +6699,16 @@ class StatusTests(PorcelainTestCase):
|
|
|
|
|
|
# Test status() which uses exclude_ignored=True by default
|
|
|
status = porcelain.status(self.repo)
|
|
|
- self.assertEqual(["untracked.txt"], status.untracked)
|
|
|
+ self.assertEqual([os.fsencode("untracked.txt")], status.untracked)
|
|
|
|
|
|
# Test status() with ignored=True which uses exclude_ignored=False
|
|
|
status_with_ignored = porcelain.status(self.repo, ignored=True)
|
|
|
# Should include cache directories
|
|
|
- self.assertIn("untracked.txt", status_with_ignored.untracked)
|
|
|
+ self.assertIn(os.fsencode("untracked.txt"), status_with_ignored.untracked)
|
|
|
for cache_dir in cache_dirs:
|
|
|
- self.assertIn(cache_dir + "/", status_with_ignored.untracked)
|
|
|
+ self.assertIn(
|
|
|
+ os.fsencode(cache_dir + os.sep), status_with_ignored.untracked
|
|
|
+ )
|
|
|
|
|
|
def test_get_untracked_paths_mixed_directory(self) -> None:
|
|
|
"""Test directory with both ignored and non-ignored files."""
|
|
|
@@ -6932,7 +6954,7 @@ class StatusTests(PorcelainTestCase):
|
|
|
_, _, untracked = porcelain.status(
|
|
|
repo=self.repo.path, untracked_files="normal"
|
|
|
)
|
|
|
- self.assertEqual(untracked, ["untracked_dir/"])
|
|
|
+ self.assertEqual(untracked, [os.fsencode("untracked_dir" + os.sep)])
|
|
|
|
|
|
def test_get_untracked_paths_top_level_issue_1247(self) -> None:
|
|
|
"""Test for issue #1247: ensure top-level untracked files are detected."""
|
|
|
@@ -6955,7 +6977,7 @@ class StatusTests(PorcelainTestCase):
|
|
|
# Test via status
|
|
|
status = porcelain.status(self.repo)
|
|
|
self.assertIn(
|
|
|
- "sample.txt",
|
|
|
+ os.fsencode("sample.txt"),
|
|
|
status.untracked,
|
|
|
"Top-level file 'sample.txt' should be in status.untracked",
|
|
|
)
|