From: Ben Peart <peartben@gmail.com>
To: Christian Couder <christian.couder@gmail.com>, git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>, Jeff King <peff@peff.net>,
Ben Peart <Ben.Peart@microsoft.com>,
Jonathan Tan <jonathantanmy@google.com>,
Nguyen Thai Ngoc Duy <pclouds@gmail.com>,
Mike Hommey <mh@glandium.org>,
Lars Schneider <larsxschneider@gmail.com>,
Eric Wong <e@80x24.org>,
Christian Couder <chriscool@tuxfamily.org>
Subject: Re: [PATCH v6 00/40] Add initial experimental external ODB support
Date: Mon, 2 Oct 2017 10:18:15 -0400 [thread overview]
Message-ID: <1d53569f-4bc8-0d8e-0182-eec0eb6634cd@gmail.com> (raw)
In-Reply-To: <20170916080731.13925-1-chriscool@tuxfamily.org>
On 9/16/2017 4:06 AM, Christian Couder wrote:
> Highlevel view of the patches in the series
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
This is a massive patch series and IMO keeping it a single monolithic
set of patches makes it difficult to review and unwieldy to make
progress on as an "all or nothing" series.
I highly recommend breaking it up into multiple smaller patch series
that can be reviewed and accepted individually. I have to admit I've
skipped reviewing the last couple of iterations simply because of the
time investment required and difficulty separating out the various pieces.
I think using your division of the patches below is a good place to
start. Many of these would be good changes even if they weren't part of
the larger external ODB effort.
- Patch 1/40 is a small code cleanup that I already sent to the
> mailing list but may be removed in the end due to ongoing work
> on "git clone".
>
> - Patches 02/40 to 07/40 create a "Git/Packet.pm" module by
> refactoring "t0021/rot13-filter.pl". Functions from this new
> module will be used later in test scripts. According to Junio's
> suggestion compared to v5 we now first fully refactor
> "t0021/rot13-filter.pl" before creating the "Git/Packet.pm"
> module.
>
This seems like a very logical thing to do and should be split out so
that progress can be made independently.
> - Patches 08/40 to 16/40 create the external ODB insfrastructure
> in external-odb.{c,h} and odb-helper.{c,h} for the script mode.
> The main changes compared to v5 are the following:
> - we mark as "extern" functions in *.h files
> - we use sha1_pos() instead of sha1_entry_pos()
> - we check the size in the header when we 'get' a Git object
>
This is the heart of the ODB infrastructure series. I'll respond in
more detail in the specific patches.
> - Patches 17/40 to 23/40 improve lib-http to make it possible to
> use it as an external ODB to test storing blobs in an HTTP
> server. The "upload.sh" and "list.sh" files are now properly
> indented and they use %% instead of % in parameter
> substitutions compared to v5.
>
> - Patches 24/40 to 32/40 improve the external ODB insfrastructure
> to support sub-processes and make everything work using
> them. The main changes compared to v5 are the following:
> - we mark as "extern" functions in *.h files
> - we use the new subprocess_handshake() function
> - we check the size in the header when we 'get' a Git object
>
> - Patch 33/40 uses attributes to mark blobs that should be handled
> by an external odb.
>
> - Patch 34/40 adds documentation about the external odb
> mechanism. This patch has been much improved since v5.
>
> - Patches 35/40 to 39/40 add the --initial-refspec to git clone
> along with tests.
>
> - Patch 40/40 adds documentation about transfering objects and
> metadata when using the external odb mechanism. This patch is
> new since v5.
>
> Future work
> ~~~~~~~~~~~
>
> There are still things that could be cleaned or improved. I think I
> may work on:
>
> - Integrate changes in recent "read-object-process" work by Ben Peart.
>
> - Better test all the combinations of the different modes with and
> without "have" and "put_*" instructions.
>
> - Maybe implement the missing kinds of 'put' ('put_git_obj' and
> 'put_direct'), so that Git could pass either a git object a plain
> object or ask the helper to retreive it directly from Git's object
> database.
>
> - Add more long running tests and improve tests in general.
>
> Previous work and discussions
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> (Sorry for the old Gmane links, I hope I will try to replace them with
> public-inbox.org at one point.)
>
> Peff started to work on this and discuss this some years ago:
>
> http://thread.gmane.org/gmane.comp.version-control.git/206886/focus=207040
> http://thread.gmane.org/gmane.comp.version-control.git/247171
> http://thread.gmane.org/gmane.comp.version-control.git/202902/focus=203020
>
> His work, which is not compile-tested any more, is still there:
>
> https://github.com/peff/git/commits/jk/external-odb-wip
>
> Initial discussions about this new series are there:
>
> http://thread.gmane.org/gmane.comp.version-control.git/288151/focus=295160
>
> Version 1, 2, 3, 4 and 5 of this series are here:
>
> https://public-inbox.org/git/20160613085546.11784-1-chriscool@tuxfamily.org/
> https://public-inbox.org/git/20160628181933.24620-1-chriscool@tuxfamily.org/
> https://public-inbox.org/git/20161130210420.15982-1-chriscool@tuxfamily.org/
> https://public-inbox.org/git/20170620075523.26961-1-chriscool@tuxfamily.org/
> https://public-inbox.org/git/20170803091926.1755-1-chriscool@tuxfamily.org/
>
> Some of the discussions related to Ben Peart's work that is used by
> this series are here:
>
> https://public-inbox.org/git/20170113155253.1644-1-benpeart@microsoft.com/
> https://public-inbox.org/git/20170322165220.5660-1-benpeart@microsoft.com/
> https://public-inbox.org/git/20170714132651.170708-1-benpeart@microsoft.com/
>
> Links
> ~~~~~
>
> This patch series is available here:
>
> https://github.com/chriscool/git/commits/external-odb
>
> Version 1, 2, 3, 4 and 5 are here:
>
> https://github.com/chriscool/git/commits/gl-external-odb12
> https://github.com/chriscool/git/commits/gl-external-odb22
> https://github.com/chriscool/git/commits/gl-external-odb61
> https://github.com/chriscool/git/commits/gl-external-odb239
> https://github.com/chriscool/git/commits/gl-external-odb373
>
>
> Ben Peart (2):
> odb-helper: add init_object_process()
> Add t0450 to test 'get_direct' mechanism
>
> Christian Couder (38):
> builtin/clone: get rid of 'value' strbuf
> t0021/rot13-filter: refactor packet reading functions
> t0021/rot13-filter: improve 'if .. elsif .. else' style
> t0021/rot13-filter: improve error message
> t0021/rot13-filter: add packet_initialize()
> t0021/rot13-filter: add capability functions
> Add Git/Packet.pm from parts of t0021/rot13-filter.pl
> sha1_file: prepare for external odbs
> Add initial external odb support
> odb-helper: add odb_helper_init() to send 'init' instruction
> t0400: add 'put_raw_obj' instruction to odb-helper script
> external odb: add 'put_raw_obj' support
> external-odb: accept only blobs for now
> t0400: add test for external odb write support
> Add GIT_NO_EXTERNAL_ODB env variable
> Add t0410 to test external ODB transfer
> lib-httpd: pass config file to start_httpd()
> lib-httpd: add upload.sh
> lib-httpd: add list.sh
> lib-httpd: add apache-e-odb.conf
> odb-helper: add odb_helper_get_raw_object()
> pack-objects: don't pack objects in external odbs
> Add t0420 to test transfer to HTTP external odb
> external-odb: add 'get_direct' support
> odb-helper: add 'script_mode' to 'struct odb_helper'
> Add t0460 to test passing git objects
> odb-helper: add put_object_process()
> Add t0470 to test passing raw objects
> odb-helper: add have_object_process()
> Add t0480 to test "have" capability and raw objects
> external-odb: use 'odb=magic' attribute to mark odb blobs
> Add Documentation/technical/external-odb.txt
> clone: add 'initial' param to write_remote_refs()
> clone: add --initial-refspec option
> clone: disable external odb before initial clone
> Add tests for 'clone --initial-refspec'
> Add t0430 to test cloning using bundles
> Doc/external-odb: explain transfering objects and metadata
>
> Documentation/technical/external-odb.txt | 447 +++++++++++++
> Makefile | 2 +
> builtin/clone.c | 91 ++-
> builtin/pack-objects.c | 4 +
> cache.h | 18 +
> environment.c | 4 +
> external-odb.c | 196 ++++++
> external-odb.h | 12 +
> odb-helper.c | 1076 ++++++++++++++++++++++++++++++
> odb-helper.h | 45 ++
> perl/Git/Packet.pm | 118 ++++
> sha1_file.c | 155 +++--
> t/lib-httpd.sh | 8 +-
> t/lib-httpd/apache-e-odb.conf | 214 ++++++
> t/lib-httpd/list.sh | 41 ++
> t/lib-httpd/upload.sh | 45 ++
> t/t0021/rot13-filter.pl | 110 +--
> t/t0400-external-odb.sh | 85 +++
> t/t0410-transfer-e-odb.sh | 147 ++++
> t/t0420-transfer-http-e-odb.sh | 152 +++++
> t/t0430-clone-bundle-e-odb.sh | 85 +++
> t/t0450-read-object.sh | 28 +
> t/t0450/read-object | 68 ++
> t/t0460-read-object-git.sh | 28 +
> t/t0460/read-object-git | 78 +++
> t/t0470-read-object-http-e-odb.sh | 119 ++++
> t/t0470/read-object-plain | 83 +++
> t/t0480-read-object-have-http-e-odb.sh | 119 ++++
> t/t0480/read-object-plain-have | 103 +++
> t/t5616-clone-initial-refspec.sh | 48 ++
> 30 files changed, 3588 insertions(+), 141 deletions(-)
> create mode 100644 Documentation/technical/external-odb.txt
> create mode 100644 external-odb.c
> create mode 100644 external-odb.h
> create mode 100644 odb-helper.c
> create mode 100644 odb-helper.h
> create mode 100644 perl/Git/Packet.pm
> create mode 100644 t/lib-httpd/apache-e-odb.conf
> create mode 100644 t/lib-httpd/list.sh
> create mode 100644 t/lib-httpd/upload.sh
> create mode 100755 t/t0400-external-odb.sh
> create mode 100755 t/t0410-transfer-e-odb.sh
> create mode 100755 t/t0420-transfer-http-e-odb.sh
> create mode 100755 t/t0430-clone-bundle-e-odb.sh
> create mode 100755 t/t0450-read-object.sh
> create mode 100755 t/t0450/read-object
> create mode 100755 t/t0460-read-object-git.sh
> create mode 100755 t/t0460/read-object-git
> create mode 100755 t/t0470-read-object-http-e-odb.sh
> create mode 100755 t/t0470/read-object-plain
> create mode 100755 t/t0480-read-object-have-http-e-odb.sh
> create mode 100755 t/t0480/read-object-plain-have
> create mode 100755 t/t5616-clone-initial-refspec.sh
>
next prev parent reply other threads:[~2017-10-02 14:18 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-16 8:06 [PATCH v6 00/40] Add initial experimental external ODB support Christian Couder
2017-09-16 8:06 ` [PATCH v6 01/40] builtin/clone: get rid of 'value' strbuf Christian Couder
2017-09-16 8:06 ` [PATCH v6 02/40] t0021/rot13-filter: refactor packet reading functions Christian Couder
2017-09-16 8:06 ` [PATCH v6 03/40] t0021/rot13-filter: improve 'if .. elsif .. else' style Christian Couder
2017-09-16 8:06 ` [PATCH v6 04/40] t0021/rot13-filter: improve error message Christian Couder
2017-09-16 8:06 ` [PATCH v6 05/40] t0021/rot13-filter: add packet_initialize() Christian Couder
2017-09-16 8:06 ` [PATCH v6 06/40] t0021/rot13-filter: add capability functions Christian Couder
2017-09-16 8:06 ` [PATCH v6 07/40] Add Git/Packet.pm from parts of t0021/rot13-filter.pl Christian Couder
2017-09-16 8:06 ` [PATCH v6 08/40] sha1_file: prepare for external odbs Christian Couder
2017-09-16 8:07 ` [PATCH v6 09/40] Add initial external odb support Christian Couder
2017-09-19 17:45 ` Jonathan Tan
2017-09-27 16:46 ` Christian Couder
2017-09-29 20:36 ` Jonathan Tan
2017-10-02 14:34 ` Ben Peart
2017-10-03 9:45 ` Christian Couder
2017-10-04 0:15 ` Jonathan Tan
2017-09-16 8:07 ` [PATCH v6 10/40] odb-helper: add odb_helper_init() to send 'init' instruction Christian Couder
2017-09-16 8:07 ` [PATCH v6 11/40] t0400: add 'put_raw_obj' instruction to odb-helper script Christian Couder
2017-09-16 8:07 ` [PATCH v6 12/40] external odb: add 'put_raw_obj' support Christian Couder
2017-09-16 8:07 ` [PATCH v6 13/40] external-odb: accept only blobs for now Christian Couder
2017-09-16 8:07 ` [PATCH v6 14/40] t0400: add test for external odb write support Christian Couder
2017-09-16 8:07 ` [PATCH v6 15/40] Add GIT_NO_EXTERNAL_ODB env variable Christian Couder
2017-09-16 8:07 ` [PATCH v6 16/40] Add t0410 to test external ODB transfer Christian Couder
2017-09-16 8:07 ` [PATCH v6 17/40] lib-httpd: pass config file to start_httpd() Christian Couder
2017-09-16 8:07 ` [PATCH v6 18/40] lib-httpd: add upload.sh Christian Couder
2017-09-16 8:07 ` [PATCH v6 19/40] lib-httpd: add list.sh Christian Couder
2017-09-16 8:07 ` [PATCH v6 20/40] lib-httpd: add apache-e-odb.conf Christian Couder
2017-09-16 8:07 ` [PATCH v6 21/40] odb-helper: add odb_helper_get_raw_object() Christian Couder
2017-09-16 8:07 ` [PATCH v6 22/40] pack-objects: don't pack objects in external odbs Christian Couder
2017-09-16 8:07 ` [PATCH v6 23/40] Add t0420 to test transfer to HTTP external odb Christian Couder
2017-09-16 8:07 ` [PATCH v6 24/40] external-odb: add 'get_direct' support Christian Couder
2017-09-16 8:07 ` [PATCH v6 25/40] odb-helper: add 'script_mode' to 'struct odb_helper' Christian Couder
2017-09-16 8:07 ` [PATCH v6 26/40] odb-helper: add init_object_process() Christian Couder
2017-09-16 8:07 ` [PATCH v6 27/40] Add t0450 to test 'get_direct' mechanism Christian Couder
2017-09-16 8:07 ` [PATCH v6 28/40] Add t0460 to test passing git objects Christian Couder
2017-09-16 8:07 ` [PATCH v6 29/40] odb-helper: add put_object_process() Christian Couder
2017-09-16 8:07 ` [PATCH v6 30/40] Add t0470 to test passing raw objects Christian Couder
2017-09-16 8:07 ` [PATCH v6 31/40] odb-helper: add have_object_process() Christian Couder
2017-09-16 8:07 ` [PATCH v6 32/40] Add t0480 to test "have" capability and raw objects Christian Couder
2017-09-16 8:07 ` [PATCH v6 33/40] external-odb: use 'odb=magic' attribute to mark odb blobs Christian Couder
2017-09-16 8:07 ` [PATCH v6 34/40] Add Documentation/technical/external-odb.txt Christian Couder
2017-09-16 8:07 ` [PATCH v6 35/40] clone: add 'initial' param to write_remote_refs() Christian Couder
2017-09-16 8:07 ` [PATCH v6 36/40] clone: add --initial-refspec option Christian Couder
2017-09-16 8:07 ` [PATCH v6 37/40] clone: disable external odb before initial clone Christian Couder
2017-09-16 8:07 ` [PATCH v6 38/40] Add tests for 'clone --initial-refspec' Christian Couder
2017-09-16 8:07 ` [PATCH v6 39/40] Add t0430 to test cloning using bundles Christian Couder
2017-09-16 8:07 ` [PATCH v6 40/40] Doc/external-odb: explain transfering objects and metadata Christian Couder
2017-10-02 14:18 ` Ben Peart [this message]
2017-10-03 6:32 ` [PATCH v6 00/40] Add initial experimental external ODB support Christian Couder
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1d53569f-4bc8-0d8e-0182-eec0eb6634cd@gmail.com \
--to=peartben@gmail.com \
--cc=Ben.Peart@microsoft.com \
--cc=chriscool@tuxfamily.org \
--cc=christian.couder@gmail.com \
--cc=e@80x24.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jonathantanmy@google.com \
--cc=larsxschneider@gmail.com \
--cc=mh@glandium.org \
--cc=pclouds@gmail.com \
--cc=peff@peff.net \
/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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
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 read-only IMAP folder(s) and NNTP newsgroup(s).