Commit c6e4b33
authored
fix: Skip redundant git config writes in SignIn when already correct (#2298)
## Summary
- Fixes a bug where `git fetch` on Azure Repos would unconditionally
write `git config --global credential.azrepos:org/<org>.username` and
`git config --local --unset credential.azrepos:org/<org>.username` on
every invocation, even when the binding state was already correct.
- `SignIn` now checks whether the desired state is in place and skips
config writes when nothing needs to change.
- Adds `SetCallCount`/`UnsetCallCount` counters to
`TestGitConfiguration` so tests can assert whether config operations
actually fired.
## Root cause
On every `git fetch`, git calls `credential approve` after successful
authentication, which invokes `StoreCredentialAsync` → `SignIn`. The
`else` branch of `SignIn` (global absent or matches signing-in user)
called `Bind(global)` + `Unbind(local)` unconditionally. In the common
single-user steady state (`A | - → A | -`) this issued two no-op `git
config` writes per fetch.
## Behavior changes
| State before SignIn | Before fix | After fix |
|---------------------|------------|-----------|
| `A \| -` (steady state) | `Set(global)` + `Unset(local)` | no writes |
| `A \| A` | `Set(global)` + `Unset(local)` | `Unset(local)` only |
| `A \| B` | `Set(global)` + `Unset(local)` | `Unset(local)` only |
| `B \| A` (steady state) | `Bind(local)` (no-op) | no writes |
## Test plan
- [x] 4 new tests assert exact write counts for each no-op/minimal-write
case
- [x] All 165 existing `Microsoft.AzureRepos.Tests` tests passFile tree
3 files changed
+107
-3
lines changed3 files changed
+107
-3
lines changedLines changed: 87 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
628 | 628 | | |
629 | 629 | | |
630 | 630 | | |
| 631 | + | |
| 632 | + | |
| 633 | + | |
| 634 | + | |
| 635 | + | |
| 636 | + | |
| 637 | + | |
| 638 | + | |
| 639 | + | |
| 640 | + | |
| 641 | + | |
| 642 | + | |
| 643 | + | |
| 644 | + | |
| 645 | + | |
| 646 | + | |
| 647 | + | |
| 648 | + | |
| 649 | + | |
| 650 | + | |
| 651 | + | |
| 652 | + | |
| 653 | + | |
| 654 | + | |
| 655 | + | |
| 656 | + | |
| 657 | + | |
| 658 | + | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
| 664 | + | |
| 665 | + | |
| 666 | + | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
| 675 | + | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
631 | 718 | | |
632 | 719 | | |
633 | 720 | | |
| |||
Lines changed: 15 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
283 | 283 | | |
284 | 284 | | |
285 | 285 | | |
286 | | - | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
287 | 292 | | |
288 | 293 | | |
289 | 294 | | |
290 | | - | |
291 | | - | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
292 | 304 | | |
293 | 305 | | |
294 | 306 | | |
| |||
Lines changed: 5 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
19 | 22 | | |
20 | 23 | | |
21 | 24 | | |
| |||
68 | 71 | | |
69 | 72 | | |
70 | 73 | | |
| 74 | + | |
71 | 75 | | |
72 | 76 | | |
73 | 77 | | |
| |||
107 | 111 | | |
108 | 112 | | |
109 | 113 | | |
| 114 | + | |
110 | 115 | | |
111 | 116 | | |
112 | 117 | | |
| |||
0 commit comments