mbox series

[v2,0/7] Lazy fetch with subprocess

Message ID cover.1597184948.git.jonathantanmy@google.com (mailing list archive)
Headers show
Series Lazy fetch with subprocess | expand

Message

Jonathan Tan Aug. 11, 2020, 10:52 p.m. UTC
These patches are based on jc/no-update-fetch-head.

After the email exchange with Junio, I went back and took a look to see
if I could accomplish what I needed without using NULL methods in the
fetch negotiators. And I could do it - I just had to be more careful
when iterating over refs and dereferencing them. You can see it in patch
5.

In version 1, I wrote that these needed to be done:

 - Commit messages
 - User-facing documentation
 - A way to prevent a promisor-remote fetch from invoking another
   promisor-remote fetch (use a file as a lock?)
 - Remove no_dependents code (fetch-pack, transport)

1, 2, and 4 are already done. As for 3, we currently don't have this
safeguard before this patch set, so I did not include one in this patch
set either.

Jonathan Tan (7):
  negotiator/null: add null fetch negotiator
  fetch: allow refspecs specified through stdin
  fetch: avoid reading submodule config until needed
  fetch: only populate existing_refs if needed
  fetch-pack: do not lazy-fetch during ref iteration
  promisor-remote: lazy-fetch objects in subprocess
  fetch-pack: remove no_dependents code

 Documentation/config/fetch.txt            |   5 +-
 Documentation/git-fetch.txt               |   4 +
 Documentation/technical/partial-clone.txt |  13 +-
 Makefile                                  |   1 +
 builtin/fetch-pack.c                      |   4 -
 builtin/fetch.c                           |  42 ++++-
 fetch-negotiator.c                        |   5 +
 fetch-pack.c                              | 189 +++++++++-------------
 fetch-pack.h                              |  14 --
 negotiator/null.c                         |  44 +++++
 negotiator/null.h                         |   8 +
 promisor-remote.c                         |  46 +++---
 remote-curl.c                             |   6 -
 repo-settings.c                           |   2 +
 repository.h                              |   1 +
 submodule-config.c                        |   5 +-
 t/t0410-partial-clone.sh                  |   2 +-
 t/t4067-diff-partial-clone.sh             |   8 +-
 t/t5554-null-fetch-negotiator.sh          |  22 +++
 t/t5601-clone.sh                          |   2 +-
 t/t5616-partial-clone.sh                  |  20 +++
 transport.c                               |   4 -
 transport.h                               |   7 -
 23 files changed, 252 insertions(+), 202 deletions(-)
 create mode 100644 negotiator/null.c
 create mode 100644 negotiator/null.h
 create mode 100755 t/t5554-null-fetch-negotiator.sh

Comments

Derrick Stolee Aug. 12, 2020, 12:51 p.m. UTC | #1
On 8/11/2020 6:52 PM, Jonathan Tan wrote:
>  - A way to prevent a promisor-remote fetch from invoking another
>    promisor-remote fetch (use a file as a lock?)

In the VFS for Git world, the C# layer frequently needs to ask
Git for some information, but doesn't want to trigger a download
of a missing object. We use a config option when running our
command that disables the GVFS protocol for that command.

It's possible that a config option _or_ environment variable would
suffice instead of adding another file-based lock.

Thanks,
-Stolee