diff --git a/tools/debt_split.py b/tools/debt_split.py index c344192ece..e7341fefe1 100644 --- a/tools/debt_split.py +++ b/tools/debt_split.py @@ -163,7 +163,7 @@ def apply_change(root, base, new, index_text): _, section, item, name = entry entries = load(name).setdefault(section, []) moved = relink(item, INDEX, debt_file(name)) - position = len(entries) + position = 0 if anchor is None else len(entries) if anchor is not None and anchor[1] == section and anchor[3] == name: anchored = relink(anchor[2], INDEX, debt_file(name)) if anchored in entries: diff --git a/tools/tests/test_debt_split.py b/tools/tests/test_debt_split.py index a9bb72e276..9bdceffa98 100644 --- a/tools/tests/test_debt_split.py +++ b/tools/tests/test_debt_split.py @@ -157,6 +157,18 @@ class DebtSplitTests(unittest.TestCase): self.assertNotEqual(result.returncode, 0) self.assertIn("not in a three-way conflict", result.stderr) + def test_resolve_preserves_entries_inserted_before_the_first_existing_entry(self): + first = "- [libSceA](../../core/libs/prx/libSceA/First.cpp) - `sceAFirst` returns 0" + second = "- [libSceA](../../core/libs/prx/libSceA/Second.cpp) - `sceASecond` returns 0" + result = self.rebase([first, second, A_STUB, B_STUB, C_STUB], [A_FUNCTIONAL, SHADER, SHARED]) + self.assertEqual(result.returncode, 0, result.stdout + result.stderr) + self.git("rebase", "--continue") + self.assertEqual(self.read("docs/dev/debt/libSceA.md"), + "# libSceA technical debt\n\n### Silent stubs\n\n" + + "\n".join(entry.replace("../../", "../../../") for entry in (first, second, A_STUB)) + + "\n\n### Functional\n\n" + A_FUNCTIONAL.replace("../../", "../../../") + "\n") + self.assertEqual(self.read(INDEX), self.git("show", "main:" + INDEX).stdout) + if __name__ == "__main__": unittest.main()