From: "René Scharfe" <l.s.r@web.de>
To: Junio C Hamano <gitster@pobox.com>, Josh Steadmon <steadmon@google.com>
Cc: git@vger.kernel.org
Subject: Re: Proposed approaches to supporting HTTP remotes in "git archive"
Date: Sun, 29 Jul 2018 13:54:37 +0200 [thread overview]
Message-ID: <e769cd31-49cb-c49b-7653-5692e065f097@web.de> (raw)
In-Reply-To: <xmqqtvokjonm.fsf@gitster-ct.c.googlers.com>
Am 28.07.2018 um 00:32 schrieb Junio C Hamano:
> Josh Steadmon <steadmon@google.com> writes:
>
>> # Supporting HTTP remotes in "git archive"
>>
>> We would like to allow remote archiving from HTTP servers. There are a
>> few possible implementations to be discussed:
>>
>> ## Shallow clone to temporary repo
>>
>> This approach builds on existing endpoints. Clients will connect to the
>> remote server's git-upload-pack service and fetch a shallow clone of the
>> requested commit into a temporary local repo. The write_archive()
>> function is then called on the local clone to write out the requested
>> archive.
A prototype would require just a few lines of shell script, I guess..
A downside that was only stated implicitly: This method needs temporary
disk space for the clone, while the existing archive modes only ever
write out the resulting file. I guess the required space is in the same
order as the compressed archive. This shouldn't be a problem if we
assume the user would eventually want to extract its contents, right?
>> ## Summary
>>
>> Personally, I lean towards the first approach. It could give us an
>> opportunity to remove server-side complexity; there is no reason that
>> the shallow-clone approach must be restricted to the HTTP transport, and
>> we could re-implement other transports using this method. Additionally,
>> it would allow clients to pull archives from remotes that would not
>> otherwise support it.
>
> I consider the first one (i.e. make a shallow clone and tar it up
> locally) a hack that does *not* belong to "git archive --remote"
> command, especially when it is only done to "http remotes". The
> only reason HTTP remotes are special is because there is no ready
> "http-backend" equivalent that passes the "git archive" traffic over
> smart-http transport, unlike the one that exists for "git
> upload-pack".
>
> It however still _is_ attractive to drive such a hack from "git
> archive" at the UI level, as the end users do not care how ugly the
> hack is ;-) As you mentioned, the approach would work for any
> transport that allows one-commit shallow clone, so it might become
> more palatable if it is designed as a different _mode_ of operation
> of "git archive" that is orthogonal to the underlying transport,
> i.e.
>
> $ git archive --remote=<repo> --shallow-clone-then-local-archive-hack master
>
> or
>
> $ git config archive.<repo>.useShallowCloneThenLocalArchiveHack true
> $ git archive --remote=<repo> master
Archive-via-clone would also work with full clones (if shallow ones are
not available), but that would be wasteful and a bit cruel, of course.
Anyway, I think we should find a better (shorter) name for that option;
that could turn out to be the hardest part. :)
> It might turn out that it may work better than the native "git
> archive" access against servers that offer both shallow clone
> and native archive access. I doubt a single-commit shallow clone
> would benefit from reusing of premade deltas and compressed bases
> streamed straight out of packfiles from the server side that much,
> but you'd never know until you measure ;-)
It could benefit from GIT_ALTERNATE_OBJECT_DIRECTORIES, but I guess
typical users of git archive --remote won't have any good ones lying
around.
René
next prev parent reply other threads:[~2018-07-29 11:54 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-27 21:47 Proposed approaches to supporting HTTP remotes in "git archive" Josh Steadmon
2018-07-27 21:56 ` Jonathan Nieder
2018-07-27 22:00 ` Jonathan Nieder
2018-07-27 22:32 ` Junio C Hamano
2018-07-29 11:54 ` René Scharfe [this message]
2018-07-28 18:52 ` brian m. carlson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e769cd31-49cb-c49b-7653-5692e065f097@web.de \
--to=l.s.r@web.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=steadmon@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox