From: Junio C Hamano <gitster@pobox•com>
To: Jeff Hostetler <git@jeffhostetler•com>
Cc: git@vger•kernel.org, peff@peff•net, jonathantanmy@google•com,
Jeff Hostetler <jeffhost@microsoft•com>,
Johannes Schindelin <Johannes.Schindelin@gmx•de>,
Stefan Beller <sbeller@google•com>
Subject: Re: [PATCH 00/14] WIP Partial clone part 3: clone, fetch, fetch-pack, upload-pack, and tests
Date: Sat, 04 Nov 2017 00:12:25 +0900 [thread overview]
Message-ID: <xmqqy3nno0py.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <20171102203129.59417-1-git@jeffhostetler.com> (Jeff Hostetler's message of "Thu, 2 Nov 2017 20:31:15 +0000")
Jeff Hostetler <git@jeffhostetler•com> writes:
> From: Jeff Hostetler <jeffhost@microsoft•com>
>
> This is part 3 of 3 for partial clone.
> It assumes that part 1 [1] and part 2 [2] are in place.
Thanks. As planned these replaced the partial clone with size
filter thing from Jonathan. The resulting integration passed the
tests locally so I pushed it out.
By the way, the enhancement in this series made to list-objects.c
had a bit of interaction with the last round of Stefan's "describe
blob" topic when both were merged to 'pu'. I think I resolved it
correctly, but the merge resolution can use extra sets of eyes.
diff --cc list-objects.c
index 5390a7440d,07a92f35fe..e05de01af1
--- a/list-objects.c
+++ b/list-objects.c
@@@ -220,32 -183,20 +220,22 @@@ static void add_pending_tree(struct rev
add_pending_object(revs, &tree->object, "");
}
- static void do_traverse(struct rev_info *revs,
- show_commit_fn show_commit,
- show_object_fn show_object,
- void *show_data,
- filter_object_fn filter_fn,
- void *filter_data)
+ static void traverse_trees_and_blobs(struct rev_info *revs,
+ struct strbuf *base,
+ show_object_fn show_object,
- void *data)
++ void *show_data,
++ filter_object_fn filter_fn,
++ void *filter_data)
{
int i;
- struct commit *commit;
- struct strbuf base;
- strbuf_init(&base, PATH_MAX);
- while ((commit = get_revision(revs)) != NULL) {
- /*
- * an uninteresting boundary commit may not have its tree
- * parsed yet, but we are not going to show them anyway
- */
- if (commit->tree)
- add_pending_tree(revs, commit->tree);
- show_commit(commit, show_data);
- }
- assert(base->len == 0);
-
++ assert(!base->len);
for (i = 0; i < revs->pending.nr; i++) {
struct object_array_entry *pending = revs->pending.objects + i;
struct object *obj = pending->item;
const char *name = pending->name;
const char *path = pending->path;
++
if (obj->flags & (UNINTERESTING | SEEN))
continue;
if (obj->type == OBJ_TAG) {
@@@ -257,47 -208,41 +247,76 @@@
path = "";
if (obj->type == OBJ_TREE) {
process_tree(revs, (struct tree *)obj, show_object,
- &base, path, show_data,
- base, path, data);
++ base, path, show_data,
+ filter_fn, filter_data);
continue;
}
if (obj->type == OBJ_BLOB) {
process_blob(revs, (struct blob *)obj, show_object,
- &base, path, show_data,
- base, path, data);
++ base, path, show_data,
+ filter_fn, filter_data);
continue;
}
die("unknown pending object %s (%s)",
oid_to_hex(&obj->oid), name);
}
object_array_clear(&revs->pending);
- strbuf_release(&base);
+ }
+
-void traverse_commit_list(struct rev_info *revs,
- show_commit_fn show_commit,
- show_object_fn show_object,
- void *data)
++static void do_traverse(struct rev_info *revs,
++ show_commit_fn show_commit,
++ show_object_fn show_object,
++ void *show_data,
++ filter_object_fn filter_fn,
++ void *filter_data)
+ {
+ struct commit *commit;
+ struct strbuf csp; /* callee's scratch pad */
- strbuf_init(&csp, PATH_MAX);
+
++ strbuf_init(&csp, PATH_MAX);
+ while ((commit = get_revision(revs)) != NULL) {
+ /*
+ * an uninteresting boundary commit may not have its tree
+ * parsed yet, but we are not going to show them anyway
+ */
+ if (commit->tree)
+ add_pending_tree(revs, commit->tree);
- show_commit(commit, data);
++ show_commit(commit, show_data);
+ if (revs->tree_blobs_in_commit_order)
- traverse_trees_and_blobs(revs, &csp, show_object, data);
++ traverse_trees_and_blobs(revs, &csp,
++ show_object, show_data,
++ filter_fn, filter_data);
+ }
- traverse_trees_and_blobs(revs, &csp, show_object, data);
-
++ traverse_trees_and_blobs(revs, &csp,
++ show_object, show_data,
++ filter_fn, filter_data);
+ strbuf_release(&csp);
}
+
+void traverse_commit_list(struct rev_info *revs,
+ show_commit_fn show_commit,
+ show_object_fn show_object,
+ void *show_data)
+{
+ do_traverse(revs, show_commit, show_object, show_data, NULL, NULL);
+}
+
+void traverse_commit_list_filtered(
+ struct list_objects_filter_options *filter_options,
+ struct rev_info *revs,
+ show_commit_fn show_commit,
+ show_object_fn show_object,
+ void *show_data,
+ struct oidset *omitted)
+{
+ filter_object_fn filter_fn = NULL;
+ filter_free_fn filter_free_fn = NULL;
+ void *filter_data = NULL;
+
+ filter_data = list_objects_filter__init(omitted, filter_options,
+ &filter_fn, &filter_free_fn);
+ do_traverse(revs, show_commit, show_object, show_data,
+ filter_fn, filter_data);
+ if (filter_data && filter_free_fn)
+ filter_free_fn(filter_data);
+}
prev parent reply other threads:[~2017-11-03 15:12 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-02 20:31 [PATCH 00/14] WIP Partial clone part 3: clone, fetch, fetch-pack, upload-pack, and tests Jeff Hostetler
2017-11-02 20:31 ` [PATCH 01/14] upload-pack: add object filtering for partial clone Jeff Hostetler
2017-11-02 20:31 ` [PATCH 02/14] clone, fetch-pack, index-pack, transport: " Jeff Hostetler
2017-11-03 20:32 ` Jonathan Tan
2017-11-08 18:01 ` Adam Dinwoodie
2017-11-16 17:43 ` Jeff Hostetler
2017-11-02 20:31 ` [PATCH 03/14] fetch: refactor calculation of remote list Jeff Hostetler
2017-11-02 20:31 ` [PATCH 04/14] fetch: add object filtering for partial fetch Jeff Hostetler
2017-11-03 20:38 ` Jonathan Tan
2017-11-16 17:53 ` Jeff Hostetler
2017-11-02 20:31 ` [PATCH 05/14] remote-curl: add object filtering for partial clone Jeff Hostetler
2017-11-02 20:31 ` [PATCH 06/14] pack-objects: test support for blob filtering Jeff Hostetler
2017-11-02 20:31 ` [PATCH 07/14] fetch-pack: test support excluding large blobs Jeff Hostetler
2017-11-02 20:31 ` [PATCH 08/14] fetch: add from_promisor and exclude-promisor-objects parameters Jeff Hostetler
2017-11-02 20:31 ` [PATCH 09/14] t5500: add fetch-pack tests for partial clone Jeff Hostetler
2017-11-02 20:31 ` [PATCH 10/14] t5601: test " Jeff Hostetler
2017-11-02 20:31 ` [PATCH 11/14] t5500: more tests for partial clone and fetch Jeff Hostetler
2017-11-02 20:31 ` [PATCH 12/14] unpack-trees: batch fetching of missing blobs Jeff Hostetler
2017-11-02 20:31 ` [PATCH 13/14] fetch-pack: restore save_commit_buffer after use Jeff Hostetler
2017-11-02 20:31 ` [PATCH 14/14] index-pack: silently assume missing objects are promisor Jeff Hostetler
2017-11-02 23:41 ` [PATCH 00/14] WIP Partial clone part 3: clone, fetch, fetch-pack, upload-pack, and tests Jonathan Tan
2017-11-03 14:22 ` Jeff Hostetler
2017-11-03 15:12 ` Junio C Hamano [this message]
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=xmqqy3nno0py.fsf@gitster.mtv.corp.google.com \
--to=gitster@pobox$(echo .)com \
--cc=Johannes.Schindelin@gmx$(echo .)de \
--cc=git@jeffhostetler$(echo .)com \
--cc=git@vger$(echo .)kernel.org \
--cc=jeffhost@microsoft$(echo .)com \
--cc=jonathantanmy@google$(echo .)com \
--cc=peff@peff$(echo .)net \
--cc=sbeller@google$(echo .)com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
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