Re: [PATCH 3/3] upload-pack: Optionally allow fetching reachable sha1
- From
Eric Sunshine <sunshine@sunshineco.com>
- Date
- May 12, 2015, 22:01 UTC
- Message-ID
- <CAPig+cQe3=Y15+RBZCxry7-78kbNL6H0PfdYs=OV_DMifOWxaA@mail.gmail.com>
- In-Reply-To
- <1431465265-18486-3-git-send-email-fredrik.medley@gmail.com>
On Tue, May 12, 2015 at 5:14 PM, Fredrik Medley <fredrik.medley@gmail.com> wrote:
Show 7 quoted lines
> With uploadpack.allowReachableSHA1InWant configuration option set on the > server side, "git fetch" can make a request with a "want" line that names > an object that has not been advertised (likely to have been obtained out > of band or from a submodule pointer). Only objects reachable from the > branch tips, i.e. the union of advertised branches and branches hidden by > transfer.hideRefs, will be processed. Note that there is an associated > cost of having to walk back the hstory to check the reachability.
Mentioned previously[1]: s/hstory/history/
Show 23 quoted lines
> This feature can be used when obtaining the content of a certain commit, > for which the sha1 is known, without the need of cloning the whole > repository, especially if a shallow fetch is used. Useful cases are e.g. > repositories containing large files in the history, fetching only the > needed data for a submodule checkout, when sharing a sha1 without telling > which exact branch it belongs to and in Gerrit, if you think in terms of > commits instead of change numbers. (The Gerrit case has already been > solved through allowTipSHA1InWant as every Gerrit change has a ref.) > > Signed-off-by: Fredrik Medley <fredrik.medley@gmail.com> > --- > diff --git a/Documentation/config.txt b/Documentation/config.txt > index 2b86fe6..ffc4cf4 100644 > --- a/Documentation/config.txt > +++ b/Documentation/config.txt > @@ -2538,6 +2538,12 @@ uploadpack.allowTipSHA1InWant:: > of a hidden ref (by default, such a request is rejected). > see also `uploadpack.hideRefs`. > > +uploadpack.allowReachableSHA1InWant:: > + Allow `upload-pack` to accept a fetch request that asks for an > + object that is reachable from any ref tip. However, note that > + calculating object reachability is computationally expensive.
Mentioned previously[1]: s/\s+/ /
Show 12 quoted lines
> + Defaults to `false`.
> +
> diff --git a/fetch-pack.c b/fetch-pack.c
> index 77174f9..6c63d8e 100644
> --- a/fetch-pack.c
> +++ b/fetch-pack.c
> @@ -545,7 +547,7 @@ static void filter_refs(struct fetch_pack_args *args,
> }
>
> /* Append unmatched requests to the list */
> - if (allow_request_with_bare_object_name & ALLOW_TIP) {
> + if (allow_request_with_bare_object_name & (ALLOW_TIP | ALLOW_REACHABLE)) {Wrap this in extra parentheses to avoid compilation warnings:
if ((foo & (bar | baz))) {> for (i = 0; i < nr_sought; i++) {
> unsigned char sha1[20];
>[1]: http://article.gmane.org/gmane.comp.version-control.git/268428