git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH/RFC 0/3] --seed as an alias for --dissociate --reference
@ 2015-05-21  4:14 Jeff King
  2015-05-21  4:15 ` [PATCH 1/3] clone: use OPT_STRING_LIST for --reference Jeff King
                   ` (4 more replies)
  0 siblings, 5 replies; 16+ messages in thread
From: Jeff King @ 2015-05-21  4:14 UTC (permalink / raw)
  To: git; +Cc: Michael Haggerty, Junio C Hamano

In a thread a few months ago[1], we discussed the idea that the
"--dissociate --reference=foo" interface was somewhat awkward for
somebody who just wants to optimize their clone. This is mostly due to
the historical development of the features. The logical interface for
somebody who just wants a faster clone is something like

   git clone --optimize-my-clone-from=foo.git git://example.com/bar.git

But we got stuck in that thread on coming up with a decent name for the
option. Having just read through it, I think a succinct name for the
idea is "seed". That is, we seed the clone with objects from another
repository.

That thread also brought up the idea that we do not necessarily need to
seed from a local repository; we could do something like:

  1. Fetch from the seed repo into refs/seed/*

  2. Fetch from the real clone source; the fetch is optimized by the
     presence of refs/seed/*.

  3. Delete refs/seed/*. Optionally repack to drop any objects needed
     only by the seed refs.

This is awkward with the "--reference" interface, because its
implementation is publicly tied to the concept of alternates. Whereas
"--seed" is about the end result you want; we can implement it using
alternates or with a clone, depending on where the repo is located.

There are a few open issues with this series:

  1. Assuming that "seed" is a reasonable verb for this concept, is
     "--seed=<repo>" OK for the option?  Would "--seed-from=<repo>" be
     better? (Also, the response "bleh, seed is a terrible name" is
     fine, too, but only if accompanied by your own suggestion :) ).

  2. My main goal here is making the concept easier to explain to users.
     The documentation in the third patch explains "--seed" as an alias
     for the other options, which probably isn't helping much. It might
     make sense to have a patch 4/3 that explains "--seed" first, and
     then explains "--reference" as "like --seed, but keep the
     relationship after the clone". Or maybe they should just get their
     own descriptions entirely.

  3. We can't dissociate from a specific alternate, so using "--seed"
     implies that all "--reference" options get dissociated. In this
     series, I issue a warning in that case.  But that would be easily
     solved if "--seed" used the fetch strategy described above, even
     for local clones (which would probably still be quite fast if we
     took clone's usual hard-link shortcut instead of actually fetching
     from a local clone).

I don't have particular plans to implement generic "--seed" from remotes
anytime soon. I think this takes us a step in the right direction
interface-wise, and it does introduce a succinct concept and option. But
the abstraction does leak (e.g., in that it implies "--dissociate"). So
one response might be "yes, this is a good building block, and later we
can extend --seed; how it works is an implementation detail". But
equally valid would be "eh, I like the name and the concept, but this
implementation is too hacky; let's wait for somebody to implement it for
real". Hence the RFC label.

The patches are:

  [1/3]: clone: use OPT_STRING_LIST for --reference
  [2/3]: clone: reorder --dissociate and --reference options
  [3/3]: clone: add `--seed` shorthand

The third one is the interesting one, and the first two are nearby
cleanups. Whether we pursue the third one or not, I think the first two
are worth taking by themselves.

-Peff

[1] http://thread.gmane.org/gmane.comp.version-control.git/264178/focus=264234

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2015-05-27 19:35 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-05-21  4:14 [PATCH/RFC 0/3] --seed as an alias for --dissociate --reference Jeff King
2015-05-21  4:15 ` [PATCH 1/3] clone: use OPT_STRING_LIST for --reference Jeff King
2015-05-21  4:16 ` [PATCH 2/3] clone: reorder --dissociate and --reference options Jeff King
2015-05-21  4:16 ` [PATCH 3/3] clone: add `--seed` shorthand Jeff King
2015-05-21 16:05   ` Johannes Schindelin
2015-05-21 19:45     ` Philip Oakley
2015-05-22  6:37       ` Johannes Schindelin
2015-05-22  6:49         ` Jeff King
2015-05-24 19:07           ` Junio C Hamano
2015-05-27  8:19             ` Jeff King
2015-05-27 19:35               ` Junio C Hamano
2015-05-22  6:50     ` Jeff King
2015-05-21  5:01 ` [PATCH/RFC 0/3] --seed as an alias for --dissociate --reference Junio C Hamano
2015-05-21  5:06   ` Jeff King
2015-05-21 16:41     ` Junio C Hamano
2015-05-24 23:53 ` Michael Haggerty

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).