Page MenuHomePhabricator

Parse "shallow" frames in the Git "upload-pack" wire protocol parser

Authored by epriestley on Jun 13 2019, 11:31 PM.



Fixes T13309. If you void the warranty on a repository on disk and turn it into a shallow clone, Phabricator currently can't serve it.

We don't support hosting shallow working copies, but we should still parse and proxy the protocol rather than breaking in a mysterious way.

Test Plan
  • Created a shallow working copy with mv X X.full; git clone --depth Y file://.../X.full X in the storage directory on disk.
  • Cloned it with git clone <uri>.
  • Deleted all the refs inside it so the wire only has "shallow" frames; cloned it.

Diff Detail

rP Phabricator
Automatic diff as part of commit; lint not applicable.
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

epriestley created this revision.Jun 13 2019, 11:31 PM
epriestley requested review of this revision.Jun 13 2019, 11:33 PM
  • Minor wordsmithing.

In the Discourse thread ( the reporting user also reported that this patch worked in their (illegal, forbidden) use case.

Is it expected that B22956 never completed?

Oh, not sure what happened there -- that's the local result, so maybe I ^C'd too fast. Let me just kick it...

epriestley updated this revision to Diff 49102.Jun 18 2019, 1:18 AM


epriestley updated this revision to Diff 49103.Jun 18 2019, 1:20 AM
  • Plus a rebase for the msortv() change.
amckinley accepted this revision.Jun 18 2019, 9:08 PM
This revision is now accepted and ready to land.Jun 18 2019, 9:08 PM