Page MenuHomePhabricator

Simplify non-bare working copy rules for the new "git fetch" strategy
ClosedPublic

Authored by epriestley on Apr 18 2019, 1:58 PM.
Tags
None
Referenced Files
F15507815: D20450.id48791.diff
Tue, Apr 15, 11:12 PM
F15506409: D20450.id48808.diff
Tue, Apr 15, 11:01 AM
F15504916: D20450.id.diff
Mon, Apr 14, 10:29 PM
F15501192: D20450.diff
Sun, Apr 13, 9:11 PM
F15491714: D20450.id48791.diff
Sat, Apr 12, 6:44 AM
F15459828: D20450.diff
Mon, Mar 31, 5:24 PM
F15448030: D20450.diff
Mar 28 2025, 3:00 AM
F15369973: D20450.diff
Mar 12 2025, 8:58 AM
Subscribers
None

Details

Summary

Ref T13280. In D20421, I changed our observe strategy to git fetch <uri> in all cases.

This doesn't work in an ancient, non-bare repository if master is checked out and master is also fetch: git refuses to overwrite the local ref unless we pass --update-head-ok. Pass this flag.

Also, remove some code which examines branches and tags in a special way for non-bare working copies. The old git fetch <origin> code without explicit revsets meant that refs/remotes/orgin/heads/xyz got updated instead of refs/heads/xyz. We now update our local refs in all cases (bare and non-bare) so we can throw away this special casing.

Test Plan
  • Replaced a modern bare working copy with a non-bare working copy by explicitly using git clone without --bare.
  • Ran bin/repository update, hit the --update-head-ok error. Applied the patch, got a clean update.
  • Used the "repository.branchquery" API method...
    • ...with "contains" to trigger the "git branch" case. Got identical results after removing the special casing.
    • ...without "contains" to trigger the "low level ref" case. Got identical results after removing the special casing.
  • Grepped for isWorkingCopyBare(). The only remaining callsites deal with hook paths, and genuinely need to be specialized.

Diff Detail

Repository
rP Phabricator
Branch
bare1
Lint
Lint Passed
Unit
Tests Passed
Build Status
Buildable 22663
Build 31059: Run Core Tests
Build 31058: arc lint + arc unit