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
F18757322: D20450.id.diff
Sun, Oct 5, 4:53 PM
F18733953: D20450.id.diff
Tue, Sep 30, 10:45 PM
F18656325: D20450.diff
Sep 22 2025, 10:08 PM
F18587215: D20450.id.diff
Sep 11 2025, 8:45 PM
F18578002: D20450.diff
Sep 10 2025, 8:27 PM
F18569904: D20450.id48808.diff
Sep 10 2025, 2:58 AM
F18569902: D20450.id48791.diff
Sep 10 2025, 2:58 AM
F18519049: D20450.diff
Sep 5 2025, 3:51 PM
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
Lint
Lint Not Applicable
Unit
Tests Not Applicable