Message ID | 20200917132047.GA14771@pflmari (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Config option to set the transport protocol version for network fetches | expand |
Alex Riesen, Thu, Sep 17, 2020 15:20:47 +0200: > diff --git a/Documentation/config/core.txt b/Documentation/config/core.txt > index 74619a9c03..dcb7db9799 100644 > --- a/Documentation/config/core.txt > +++ b/Documentation/config/core.txt > @@ -626,3 +626,10 @@ core.abbrev:: > in your repository, which hopefully is enough for > abbreviated object names to stay unique for some time. > The minimum length is 4. > + > +core.ipversion:: > + Limit the network operations to the specified version of the transport > + protocol. Can be specified as `4` to allow IPv4 only, `6` for IPv6, or > + `all` to allow all protocols. Eh. Option values are "ipv4" and "ipv6" indeed, not "4" and "6". And I compiled and ran the code by now. Feels ok.
On Thu, Sep 17, 2020 at 03:20:47PM +0200, Alex Riesen wrote: > Affecting the transfers initiated by fetch and push, > the option allows to control network operations similar > to --ipv4 and --ipv6 options. > > Suggested-by: Jeff King <peff@peff.net> > Signed-off-by: Alex Riesen <alexander.riesen@cetitec.com> I think this misses some of the excellent suggestions from Junio (naming, and the ability to override from the command line). -Peff
Jeff King, Thu, Sep 17, 2020 15:31:53 +0200: > On Thu, Sep 17, 2020 at 03:20:47PM +0200, Alex Riesen wrote: > > > Affecting the transfers initiated by fetch and push, > > the option allows to control network operations similar > > to --ipv4 and --ipv6 options. > > > > Suggested-by: Jeff King <peff@peff.net> > > Signed-off-by: Alex Riesen <alexander.riesen@cetitec.com> > > I think this misses some of the excellent suggestions from Junio > (naming, and the ability to override from the command line). It does, sorry. Also the suggestions to the issue of consistently passing the options to helper programs haven't been collected. Haven't had the time yet.
On Thu, Sep 17, 2020 at 03:35:25PM +0200, Alex Riesen wrote: > Jeff King, Thu, Sep 17, 2020 15:31:53 +0200: > > On Thu, Sep 17, 2020 at 03:20:47PM +0200, Alex Riesen wrote: > > > > > Affecting the transfers initiated by fetch and push, > > > the option allows to control network operations similar > > > to --ipv4 and --ipv6 options. > > > > > > Suggested-by: Jeff King <peff@peff.net> > > > Signed-off-by: Alex Riesen <alexander.riesen@cetitec.com> > > > > I think this misses some of the excellent suggestions from Junio > > (naming, and the ability to override from the command line). > > It does, sorry. Also the suggestions to the issue of consistently passing the > options to helper programs haven't been collected. > Haven't had the time yet. No problem, and no rush. I just wanted to make sure those bits didn't get overlooked. -Peff
Jeff King, Thu, Sep 17, 2020 16:51:42 +0200: > No problem, and no rush. I just wanted to make sure those bits didn't > get overlooked. I'll try and do my best :)
Alex Riesen, Thu, Sep 17, 2020 15:20:47 +0200: > diff --git a/transport.c b/transport.c > index b41386eccb..e16c339f3e 100644 > --- a/transport.c > +++ b/transport.c > @@ -922,6 +922,23 @@ static struct transport_vtable builtin_smart_vtable = { > disconnect_git > }; > > +static enum transport_family default_transport_family(void) > +{ > + static const char key[] = "core.ipversion"; > + const char *v; > + > + if (git_config_get_string_const(key, &v)) Sorry about that. git_config_get_string_tmp, indeed.
Alex Riesen <alexander.riesen@cetitec.com> writes: > Jeff King, Thu, Sep 17, 2020 16:51:42 +0200: >> No problem, and no rush. I just wanted to make sure those bits didn't >> get overlooked. > > I'll try and do my best :) If I remember correctly, this discussion started as an introduction of useful feature, but got stuck at the implementation phase of how the feature is presented at the UI level after we had general concensus on the design. It has been about 3 months; has anything happened that I missed? It seems that I kept the thread-starter patch in the 'seen' branch, but and haven't updated with a later attempt in the discussion. Thanks.
Junio C Hamano, Tue, Dec 22, 2020 20:55:25 +0100: > Alex Riesen <alexander.riesen@cetitec.com> writes: > > Jeff King, Thu, Sep 17, 2020 16:51:42 +0200: > >> No problem, and no rush. I just wanted to make sure those bits didn't > >> get overlooked. > > > > I'll try and do my best :) > > If I remember correctly, this discussion started as an introduction > of useful feature, but got stuck at the implementation phase of how > the feature is presented at the UI level after we had general > concensus on the design. > > It has been about 3 months; has anything happened that I missed? No, nothing happened. > It seems that I kept the thread-starter patch in the 'seen' branch, > but and haven't updated with a later attempt in the discussion. Sorry. I got very distracted. As my situation seems to persist, I cannot promise to do something about it soon. I keep the branch and the discussion close by, though. Just in case.
diff --git a/Documentation/config/core.txt b/Documentation/config/core.txt index 74619a9c03..dcb7db9799 100644 --- a/Documentation/config/core.txt +++ b/Documentation/config/core.txt @@ -626,3 +626,10 @@ core.abbrev:: in your repository, which hopefully is enough for abbreviated object names to stay unique for some time. The minimum length is 4. + +core.ipversion:: + Limit the network operations to the specified version of the transport + protocol. Can be specified as `4` to allow IPv4 only, `6` for IPv6, or + `all` to allow all protocols. + See also linkgit:git-fetch[1] options `--ipv4` and `--ipv6`. + The default value is `all` to allow all protocols. diff --git a/builtin/fetch.c b/builtin/fetch.c index 447d28ac29..41f82d61d7 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -1248,7 +1248,8 @@ static struct transport *prepare_transport(struct remote *remote, int deepen) transport = transport_get(remote, NULL); transport_set_verbosity(transport, verbosity, progress); - transport->family = family; + if (family) + transport->family = family; if (upload_pack) set_option(transport, TRANS_OPT_UPLOADPACK, upload_pack); if (keep) diff --git a/builtin/push.c b/builtin/push.c index bc94078e72..f7a40b65cd 100644 --- a/builtin/push.c +++ b/builtin/push.c @@ -343,7 +343,8 @@ static int push_with_options(struct transport *transport, struct refspec *rs, char *anon_url = transport_anonymize_url(transport->url); transport_set_verbosity(transport, verbosity, progress); - transport->family = family; + if (family) + transport->family = family; if (receivepack) transport_set_option(transport, diff --git a/transport.c b/transport.c index b41386eccb..e16c339f3e 100644 --- a/transport.c +++ b/transport.c @@ -922,6 +922,23 @@ static struct transport_vtable builtin_smart_vtable = { disconnect_git }; +static enum transport_family default_transport_family(void) +{ + static const char key[] = "core.ipversion"; + const char *v; + + if (git_config_get_string_const(key, &v)) + return TRANSPORT_FAMILY_ALL; + if (!strcmp(v, "all")) + return TRANSPORT_FAMILY_ALL; + if (!strcmp(v, "ipv4")) + return TRANSPORT_FAMILY_IPV4; + if (!strcmp(v, "ipv6")) + return TRANSPORT_FAMILY_IPV6; + + die(_("%s: unknown value '%s'"), key, v); +} + struct transport *transport_get(struct remote *remote, const char *url) { const char *helper; @@ -951,6 +968,8 @@ struct transport *transport_get(struct remote *remote, const char *url) helper = xstrndup(url, p - url); } + ret->family = default_transport_family(); + if (helper) { transport_helper_init(ret, helper); } else if (starts_with(url, "rsync:")) {