Page MenuHomePhabricator

Allow repo updates to recover after force push + garbage collection
ClosedPublic

Authored by epriestley on Aug 11 2014, 11:08 PM.
Tags
None
Referenced Files
F18503977: D10226.id.diff
Thu, Sep 4, 11:31 PM
F18495655: D10226.diff
Thu, Sep 4, 4:35 PM
F18466151: D10226.diff
Tue, Sep 2, 8:55 AM
F18110908: D10226.diff
Aug 12 2025, 1:42 AM
F18051797: D10226.id24634.diff
Aug 4 2025, 12:30 AM
F18047859: D10226.id.diff
Aug 3 2025, 1:11 PM
F17959043: D10226.diff
Aug 1 2025, 7:38 AM
F17824365: D10226.id.diff
Jul 26 2025, 5:27 AM
Subscribers

Details

Summary

Fixes T5839. If a repository has been force pushed and garbage collected, we might have a ref cursor in the database which still points at the old commit (which no longer exists).

We'll then run a command like git log <new hash> --not <old hash> to figure out which commits are newly pushed, and this will bomb out because <old hash> is invalid.

Instead, validate all the <old hash> values before we try to make use of them.

Test Plan
  • Forced a repository into a bad state by mucking with the datbase, generating a reproducible failure similar to the one in T5839.
  • Applied patch.
  • bin/repository update <callsign> --trace filtered the bad commit and put the repository into the right state.
  • Saw new commits recognized correctly.
  • Ran bin/repository update <callsign> for a Mercurial and SVN repo as a sanity check.

Diff Detail

Repository
rP Phabricator
Lint
Lint Skipped
Unit
Tests Skipped

Event Timeline

epriestley retitled this revision from to Allow repo updates to recover after force push + garbage collection.
epriestley updated this object.
epriestley edited the test plan for this revision. (Show Details)
epriestley added a reviewer: btrahan.
btrahan edited edge metadata.
This revision is now accepted and ready to land.Aug 12 2014, 7:05 PM
epriestley updated this revision to Diff 24634.

Closed by commit rPec9eaabfbdac (authored by @epriestley).