Commit c0c19f5
committed
fix(sync/git[remote]) Drop
why: `GitSync.remote()` relied on `git remote show -n <name>`, whose output
begins with the fetch/push URLs but then enumerates every remote-tracking ref
in the repository. Repositories like openai/codex (2,400+ branches) ship that
list as ~2,500 lines through libvcs's real-time progress callback, which
read stderr in 128-byte chunks inside a busy-poll loop. On WSL2 the
combination stalled vcspull sync for long enough to look like a hang.
The URL lookup itself only needs the two URL lines, so reading from the
cached remote manager (`git remote -v`, O(remotes)) is enough.
what:
- Replace the `cmd.remotes.show(..., log_in_real_time=True)` call with
`self.cmd.remotes.get(remote_name=name)`, using the fetch_url / push_url
already populated by `git remote -v` parsing.
- Fall back to the fetch URL when no explicit pushurl is configured, matching
git's own behaviour.
- Add `test_remote_is_fast_for_repos_with_many_refs` seeding 500 synthetic
refs/remotes/origin/* refs and asserting `remote("origin")` returns in
under 5 seconds. This would have been pathological on the old path.git remote show to avoid ref enumeration hang1 parent 03e544a commit c0c19f5
2 files changed
Lines changed: 70 additions & 18 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
673 | 673 | | |
674 | 674 | | |
675 | 675 | | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
676 | 686 | | |
677 | | - | |
678 | | - | |
679 | | - | |
680 | | - | |
681 | | - | |
682 | | - | |
683 | | - | |
684 | | - | |
685 | | - | |
686 | | - | |
687 | | - | |
688 | | - | |
689 | | - | |
690 | | - | |
691 | | - | |
692 | | - | |
693 | | - | |
694 | | - | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
695 | 704 | | |
696 | 705 | | |
697 | 706 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1666 | 1666 | | |
1667 | 1667 | | |
1668 | 1668 | | |
| 1669 | + | |
| 1670 | + | |
| 1671 | + | |
| 1672 | + | |
| 1673 | + | |
| 1674 | + | |
| 1675 | + | |
| 1676 | + | |
| 1677 | + | |
| 1678 | + | |
| 1679 | + | |
| 1680 | + | |
| 1681 | + | |
| 1682 | + | |
| 1683 | + | |
| 1684 | + | |
| 1685 | + | |
| 1686 | + | |
| 1687 | + | |
| 1688 | + | |
| 1689 | + | |
| 1690 | + | |
| 1691 | + | |
| 1692 | + | |
| 1693 | + | |
| 1694 | + | |
| 1695 | + | |
| 1696 | + | |
| 1697 | + | |
| 1698 | + | |
| 1699 | + | |
| 1700 | + | |
| 1701 | + | |
| 1702 | + | |
| 1703 | + | |
| 1704 | + | |
| 1705 | + | |
| 1706 | + | |
| 1707 | + | |
| 1708 | + | |
| 1709 | + | |
| 1710 | + | |
| 1711 | + | |
0 commit comments