svn commit: r487153 - in head/devel/subversion: . files
Lev A. Serebryakov
lev at FreeBSD.org
Mon Dec 10 11:26:37 UTC 2018
Author: lev
Date: Mon Dec 10 11:26:36 2018
New Revision: 487153
URL: https://svnweb.freebsd.org/changeset/ports/487153
Log:
Add patch to support GitHub again.
It is ugly hack, not approved by upstream, and it is turned off by default.
Added:
head/devel/subversion/files/extra-patch-github-request-id (contents, props changed)
Modified:
head/devel/subversion/Makefile
Modified: head/devel/subversion/Makefile
==============================================================================
--- head/devel/subversion/Makefile Mon Dec 10 11:07:58 2018 (r487152)
+++ head/devel/subversion/Makefile Mon Dec 10 11:26:36 2018 (r487153)
@@ -1,7 +1,7 @@
# Created by: rooneg at electricjellyfish.net
# $FreeBSD$
-PORTREVISION= 0
+PORTREVISION= 1
MAINTAINER= lev at FreeBSD.org
COMMENT= Version control system
@@ -18,7 +18,8 @@ OPTIONS_DEFINE= \
BDB \
DOCS \
FREEBSD_TEMPLATE\
- GPG_AGENT \
+ GITHUB_HACK \
+ GPG_AGENT \
MAINTAINER_DEBUG\
NLS \
SASL \
@@ -31,6 +32,7 @@ OPTIONS_DEFINE= \
OPTIONS_DEFAULT=FREEBSD_TEMPLATE SERF TOOLS
FREEBSD_TEMPLATE_DESC= FreeBSD Project log template
+GITHUB_HACK_DESC= Enable use subversion with brain-dead github server
GPG_AGENT_DESC= Enable GPG agent password store
MAINTAINER_DEBUG_DESC= Build debug version
SERF_DESC= WebDAV/Delta-V (HTTP/HTTPS) repo access module
@@ -42,6 +44,8 @@ TOOLS_DESC= Install several tools
# Patches required for use with the FreeBSD Project repository only
FREEBSD_TEMPLATE_EXTRA_PATCHES= ${PATCHDIR}/extra-patch-fbsd-template
SVNSERVE_WRAPPER_EXTRA_PATCHES= ${PATCHDIR}/extra-patch-svnserve-wrapper
+
+GITHUB_HACK_EXTRA_PATCHES= ${PATCHDIR}/extra-patch-github-request-id
USES+= shebangfix python:2.7,env
python_OLD_CMD+= "/bin/env python"
Added: head/devel/subversion/files/extra-patch-github-request-id
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/devel/subversion/files/extra-patch-github-request-id Mon Dec 10 11:26:36 2018 (r487153)
@@ -0,0 +1,70 @@
+Index: subversion/libsvn_ra_serf/options.c
+===================================================================
+--- subversion/libsvn_ra_serf/options.c (revision 1846667)
++++ subversion/libsvn_ra_serf/options.c (working copy)
+@@ -74,6 +74,10 @@
+ /* Have we received any DAV headers at all? */
+ svn_boolean_t received_dav_header;
+
++ /* ### FIXME: SVN-4789
++ Have we received the bespoke GitHub request ID header? */
++ svn_boolean_t received_github_request_id_header;
++
+ const char *activity_collection;
+ svn_revnum_t youngest_rev;
+
+@@ -355,6 +359,22 @@
+ }
+ }
+
++ /* ### FIXME: SVN-4789
++ GitHub's Subversion bridge does not set any DAV: headers in its
++ response, even though it supports bits of our HTTP protocol and
++ returns a valid response body to an OPTIONS request. We try to work
++ around that monumental brokenness by checking for this
++ GitHub-specific response header.
++
++ Note that the case-sensitive string comparison here is intentional;
++ we do *not* want to support any number of strange hacks, so if
++ GitHub changes the case of their header name, this becomes their
++ problem entirely. */
++ else if (strcmp(key, "X-GitHub-Request-Id") == 0)
++ {
++ opt_ctx->received_github_request_id_header = TRUE;
++ }
++
+ return 0;
+ }
+
+@@ -401,8 +421,19 @@
+ serf_bucket_headers_do(hdrs, capabilities_headers_iterator_callback,
+ opt_ctx);
+
+- /* Bail out early if we're not talking to a DAV server.
+- Note that this check is only valid if we've received a success
++
++ /* ### FIXME: SVN-4789
++ Treat GitHub as a DAV server, even though it's broken. */
++ if (opt_ctx->received_github_request_id_header
++ && !opt_ctx->received_dav_header)
++ {
++ /* FIXME: We really should emit a warning here, but apparently
++ we don't have a notification API for that. */
++ opt_ctx->received_dav_header = TRUE;
++ }
++
++ /* Bail out early if we're not talking to a DAV server. Note
++ that this check is only valid if we've received a success
+ response; redirects and errors don't count. */
+ if (opt_ctx->handler->sline.code >= 200
+ && opt_ctx->handler->sline.code < 300
+@@ -410,7 +441,7 @@
+ {
+ return svn_error_createf
+ (SVN_ERR_RA_DAV_OPTIONS_REQ_FAILED, NULL,
+- _("The server at '%s' does not support the HTTP/DAV protocol"),
++ _("The server at '%s' does not support the WebDAV protocol"),
+ session->session_url_str);
+ }
+
+
More information about the svn-ports-head
mailing list