Page MenuHomePhabricator

Accept and route VCS HTTP requests
ClosedPublic

Authored by epriestley on Oct 26 2013, 3:03 PM.
Tags
None
Referenced Files
F13386814: D7417.id.diff
Mon, Jul 1, 5:52 AM
F13386698: D7417.id.diff
Mon, Jul 1, 5:38 AM
F13385596: D7417.id16709.diff
Mon, Jul 1, 1:26 AM
F13385066: D7417.diff
Sun, Jun 30, 9:06 PM
F13384953: D7417.id16747.diff
Sun, Jun 30, 8:12 PM
F13380610: D7417.diff
Sat, Jun 29, 3:35 PM
F13366930: D7417.id16709.diff
Wed, Jun 26, 10:33 PM
F13355385: D7417.diff
Mon, Jun 24, 11:06 AM
Subscribers

Details

Reviewers
hach-que
btrahan
Maniphest Tasks
Restricted Maniphest Task
Commits
Restricted Diffusion Commit
rPc7f23f522a79: Accept and route VCS HTTP requests
Summary

Mostly ripped from D7391, with some changes:

  • Serve repositories at /diffusion/X/, with no special /git/ or /serve/ URI component.
    • This requires a little bit of magic, but I got the magic working for Git, Mercurial and SVN, and it seems reasonable.
    • I think having one URI for everything will make it easier for users to understand.
    • One downside is that git will clone into X by default, but I think that's not a big deal, and we can work around that in the future easily enough.
  • Accept HTTP requests for Git, SVN and Mercurial repositories.
  • Auth logic is a little different in order to be more consistent with how other things work.
  • Instead of AphrontBasicAuthResponse, added "VCSResponse". Mercurial can print strings we send it on the CLI if we're careful, so support that. I did a fair amount of digging and didn't have any luck with git or svn.
  • Commands we don't know about are assumed to require "Push" capability by default.

No actual VCS data going over the wire yet.

Test Plan

Ran a bunch of stuff like this:

$ hg clone http://local.aphront.com:8080/diffusion/P/
abort: HTTP Error 403: This repository is not available over HTTP.

...and got pretty reasonable-seeming errors in all cases. All this can do is produce errors for now.

Diff Detail

Branch
redit9
Lint
Lint Passed
Unit
Tests Passed

Event Timeline

I could do git clone http://phabricator.local/diffusion/TEST/ and get Authentiation Failed. Setting the view policy to public gives me "not valid: is this a git repository?" which is expected given that there's no commands behind any of this.