agent-exec transport 5faf257d5e2b698a220fe3ecfb2948b0/32c83177850b
This commit is contained in:
+2
-1
@@ -1131,7 +1131,8 @@ cmd_finish() {
|
|||||||
# registered-root, owner, lock, recursive dirt and ignored-file checks have passed.
|
# registered-root, owner, lock, recursive dirt and ignored-file checks have passed.
|
||||||
check_worktree finish
|
check_worktree finish
|
||||||
local -a removal=(worktree remove)
|
local -a removal=(worktree remove)
|
||||||
if git ls-files --stage | grep -q '^160000 '; then
|
# Read the whole listing: an early-exit reader SIGPIPEs git on large indexes and pipefail drops --force.
|
||||||
|
if git ls-files --stage | awk '$1 == "160000" { found = 1 } END { exit !found }'; then
|
||||||
removal+=(--force)
|
removal+=(--force)
|
||||||
fi
|
fi
|
||||||
if ! git -C "$mainrepo" "${removal[@]}" "$root"; then
|
if ! git -C "$mainrepo" "${removal[@]}" "$root"; then
|
||||||
|
|||||||
@@ -493,6 +493,26 @@ class TaskLifecycleTests(unittest.TestCase):
|
|||||||
self.assertTrue((self.repo / "component/content").is_file(), result.stdout)
|
self.assertTrue((self.repo / "component/content").is_file(), result.stdout)
|
||||||
self.assertEqual(self.git(self.repo, "config", "--get", "submodule.component.url").stdout.strip(), str(self.root / "component"))
|
self.assertEqual(self.git(self.repo, "config", "--get", "submodule.component.url").stdout.strip(), str(self.root / "component"))
|
||||||
|
|
||||||
|
def test_finish_recycles_submodule_when_index_listing_exceeds_pipe_buffer(self):
|
||||||
|
self.add_submodule()
|
||||||
|
# Entries sorting after the gitlink must outlast a 64 KiB pipe once an early-exit reader stops.
|
||||||
|
bulk = self.repo / "zz-bulk"
|
||||||
|
bulk.mkdir()
|
||||||
|
for i in range(2000):
|
||||||
|
(bulk / f"entry-{i:05d}-{'p' * 40}").write_text("")
|
||||||
|
self.git(self.repo, "add", "zz-bulk")
|
||||||
|
self.git(self.repo, "commit", "-m", "Add bulk entries")
|
||||||
|
self.git(self.repo, "push", "origin", "main")
|
||||||
|
wt = self.worktree()
|
||||||
|
self.git(wt, "submodule", "update", "--init", "--recursive")
|
||||||
|
listing = self.git(wt, "ls-files", "--stage").stdout
|
||||||
|
before_gitlink, after_gitlink = listing.split("\tcomponent\n", 1)
|
||||||
|
self.assertTrue(before_gitlink.rsplit("\n", 1)[-1].startswith("160000 "), listing[:200])
|
||||||
|
self.assertGreater(len(listing.encode()), 64 * 1024)
|
||||||
|
self.assertGreater(len(after_gitlink.encode()), 2 * 64 * 1024)
|
||||||
|
result = self.task(wt, "finish")
|
||||||
|
self.assertFalse(wt.exists(), result.stdout)
|
||||||
|
|
||||||
def test_finish_requires_writer_exit_confirmation(self):
|
def test_finish_requires_writer_exit_confirmation(self):
|
||||||
wt = self.worktree()
|
wt = self.worktree()
|
||||||
result = self.task(wt, "finish", check=False, env=self.env)
|
result = self.task(wt, "finish", check=False, env=self.env)
|
||||||
|
|||||||
Reference in New Issue
Block a user