From: Jonathan Tan <jonathantanmy@google.com>
To: git@vger.kernel.org
Cc: Jonathan Tan <jonathantanmy@google.com>,
matheus.bernardino@usp.br, emilyshaffer@google.com,
gitster@pobox.com, ramsay@ramsayjones.plus.com,
steadmon@google.com
Subject: [PATCH v2 0/8] In grep, no adding submodule ODB as alternates
Date: Fri, 13 Aug 2021 14:05:15 -0700 [thread overview]
Message-ID: <cover.1628888668.git.jonathantanmy@google.com> (raw)
In-Reply-To: <cover.1628618950.git.jonathantanmy@google.com>
Thanks everyone for your reviews. I believe I've addressed all of them.
The main change is that I've also made a change in submodule-config to
avoid registering submodule ODBs as alternates (thanks, Matheus, for
noticing this).
Jonathan Tan (8):
submodule: lazily add submodule ODBs as alternates
grep: use submodule-ODB-as-alternate lazy-addition
grep: typesafe versions of grep_source_init
grep: read submodule entry with explicit repo
grep: allocate subrepos on heap
grep: add repository to OID grep sources
submodule-config: pass repo upon blob config read
t7814: show lack of alternate ODB-adding
builtin/grep.c | 64 +++++++++++++++++++-----------
config.c | 18 ++++++---
config.h | 3 ++
grep.c | 51 +++++++++++++++---------
grep.h | 18 +++++++--
object-file.c | 5 +++
submodule-config.c | 5 ++-
submodule.c | 25 +++++++++++-
submodule.h | 8 ++++
t/README | 10 +++++
t/t7814-grep-recurse-submodules.sh | 3 ++
11 files changed, 156 insertions(+), 54 deletions(-)
Range-diff against v1:
1: 5994a517e8 = 1: 5994a517e8 submodule: lazily add submodule ODBs as alternates
2: 31e9b914c4 = 2: 31e9b914c4 grep: use submodule-ODB-as-alternate lazy-addition
3: e5e6a0dc1e ! 3: aa3f1f3c89 grep: typesafe versions of grep_source_init
@@ builtin/grep.c: static int grep_file(struct grep_opt *opt, const char *filename)
if (num_threads > 1) {
## grep.c ##
-@@ grep.c: int grep_buffer(struct grep_opt *opt, char *buf, unsigned long size)
+@@ grep.c: int grep_source(struct grep_opt *opt, struct grep_source *gs)
+ return grep_source_1(opt, gs, 0);
+ }
+
++static void grep_source_init_buf(struct grep_source *gs, char *buf,
++ unsigned long size)
++{
++ gs->type = GREP_SOURCE_BUF;
++ gs->name = NULL;
++ gs->path = NULL;
++ gs->buf = buf;
++ gs->size = size;
++ gs->driver = NULL;
++ gs->identifier = NULL;
++}
++
+ int grep_buffer(struct grep_opt *opt, char *buf, unsigned long size)
+ {
struct grep_source gs;
int r;
- grep_source_init(&gs, GREP_SOURCE_BUF, NULL, NULL, NULL);
-+ grep_source_init_buf(&gs);
- gs.buf = buf;
- gs.size = size;
+- gs.buf = buf;
+- gs.size = size;
++ grep_source_init_buf(&gs, buf, size);
+
+ r = grep_source(opt, &gs);
@@ grep.c: int grep_buffer(struct grep_opt *opt, char *buf, unsigned long size)
return r;
@@ grep.c: int grep_buffer(struct grep_opt *opt, char *buf, unsigned long size)
+ gs->size = 0;
+ gs->driver = NULL;
+ gs->identifier = oiddup(oid);
-+}
-+
-+void grep_source_init_buf(struct grep_source *gs)
-+{
-+ gs->type = GREP_SOURCE_BUF;
-+ gs->name = NULL;
-+ gs->path = NULL;
-+ gs->buf = NULL;
-+ gs->size = 0;
-+ gs->driver = NULL;
-+ gs->identifier = NULL;
}
void grep_source_clear(struct grep_source *gs)
@@ grep.h: struct grep_source {
+ const char *path);
+void grep_source_init_oid(struct grep_source *gs, const char *name,
+ const char *path, const struct object_id *oid);
-+void grep_source_init_buf(struct grep_source *gs);
void grep_source_clear_data(struct grep_source *gs);
void grep_source_clear(struct grep_source *gs);
void grep_source_load_driver(struct grep_source *gs,
4: 30ead880b3 = 4: 050deacfb7 grep: read submodule entry with explicit repo
5: f62608e88f ! 5: 3f24815224 grep: allocate subrepos on heap
@@ builtin/grep.c: static void work_done(struct work_item *w)
+ free(repos_to_free[i]);
+ }
+ free(repos_to_free);
++ repos_to_free_nr = 0;
++ repos_to_free_alloc = 0;
+}
+
static void *run(void *arg)
6: b2df245587 ! 6: 50c69a988b grep: add repository to OID grep sources
@@ builtin/grep.c: static int grep_oid(struct grep_opt *opt, const struct object_id
strbuf_release(&pathbuf);
if (num_threads > 1) {
+@@ builtin/grep.c: static int grep_submodule(struct grep_opt *opt,
+ repo_read_gitmodules(subrepo, 0);
+
+ /*
+- * NEEDSWORK: This adds the submodule's object directory to the list of
+- * alternates for the single in-memory object store. This has some bad
+- * consequences for memory (processed objects will never be freed) and
+- * performance (this increases the number of pack files git has to pay
+- * attention to, to the sum of the number of pack files in all the
+- * repositories processed so far). This can be removed once the object
+- * store is no longer global and instead is a member of the repository
+- * object.
++ * All code paths tested by test code no longer need submodule ODBs to
++ * be added as alternates, but add it to the list just in case.
++ * Submodule ODBs added through add_submodule_odb_by_path() will be
++ * lazily registered as alternates when needed (and except in an
++ * unexpected code interaction, it won't be needed).
+ */
+ add_submodule_odb_by_path(subrepo->objects->odb->path);
+ obj_read_unlock();
## grep.c ##
@@ grep.c: void grep_source_init_file(struct grep_source *gs, const char *name,
@@ grep.c: void grep_source_init_oid(struct grep_source *gs, const char *name,
+ gs->repo = repo;
}
- void grep_source_init_buf(struct grep_source *gs)
+ void grep_source_clear(struct grep_source *gs)
@@ grep.c: static int grep_source_load_oid(struct grep_source *gs)
{
enum object_type type;
@@ grep.c: static int grep_source_load_oid(struct grep_source *gs)
gs->name,
## grep.h ##
+@@ grep.h: struct grep_opt {
+ struct grep_pat *header_list;
+ struct grep_pat **header_tail;
+ struct grep_expr *pattern_expression;
++
++ /*
++ * NEEDSWORK: See if we can remove this field, because the repository
++ * should probably be per-source, not per-repo. This is potentially the
++ * cause of at least one bug - "git grep" ignoring the textconv
++ * attributes from submodules. See [1] for more information.
++ * [1] https://lore.kernel.org/git/CAHd-oW5iEQarYVxEXoTG-ua2zdoybTrSjCBKtO0YT292fm0NQQ@mail.gmail.com/
++ */
+ struct repository *repo;
++
+ const char *prefix;
+ int prefix_length;
+ regex_t regexp;
@@ grep.h: struct grep_source {
GREP_SOURCE_BUF,
} type;
@@ grep.h: struct grep_source {
- const char *path, const struct object_id *oid);
+ const char *path, const struct object_id *oid,
+ struct repository *repo);
- void grep_source_init_buf(struct grep_source *gs);
void grep_source_clear_data(struct grep_source *gs);
void grep_source_clear(struct grep_source *gs);
+ void grep_source_load_driver(struct grep_source *gs,
-: ---------- > 7: 94db10a4e5 submodule-config: pass repo upon blob config read
7: f1fc89894b = 8: 4a51fcfb77 t7814: show lack of alternate ODB-adding
--
2.33.0.rc1.237.g0d66db33f3-goog
next prev parent reply other threads:[~2021-08-13 21:05 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-10 18:28 [PATCH 0/7] In grep, no adding submodule ODB as alternates Jonathan Tan
2021-08-10 18:28 ` [PATCH 1/7] submodule: lazily add submodule ODBs " Jonathan Tan
2021-08-10 21:13 ` Junio C Hamano
2021-08-13 16:53 ` Jonathan Tan
2021-08-11 21:33 ` Emily Shaffer
2021-08-13 16:23 ` Jonathan Tan
2021-08-10 18:28 ` [PATCH 2/7] grep: use submodule-ODB-as-alternate lazy-addition Jonathan Tan
2021-08-11 21:36 ` Emily Shaffer
2021-08-13 16:31 ` Jonathan Tan
2021-08-10 18:28 ` [PATCH 3/7] grep: typesafe versions of grep_source_init Jonathan Tan
2021-08-10 21:38 ` Junio C Hamano
2021-08-11 21:42 ` Emily Shaffer
2021-08-11 23:07 ` Ramsay Jones
2021-08-13 16:32 ` Jonathan Tan
2021-08-11 22:45 ` Matheus Tavares Bernardino
2021-08-12 16:49 ` Junio C Hamano
2021-08-13 16:33 ` Jonathan Tan
2021-08-10 18:28 ` [PATCH 4/7] grep: read submodule entry with explicit repo Jonathan Tan
2021-08-11 21:44 ` Emily Shaffer
2021-08-13 16:39 ` Jonathan Tan
2021-08-10 18:28 ` [PATCH 5/7] grep: allocate subrepos on heap Jonathan Tan
2021-08-11 21:50 ` Emily Shaffer
2021-08-13 16:42 ` Jonathan Tan
2021-08-10 18:28 ` [PATCH 6/7] grep: add repository to OID grep sources Jonathan Tan
2021-08-11 21:52 ` Emily Shaffer
2021-08-13 16:44 ` Jonathan Tan
2021-08-11 23:28 ` Matheus Tavares Bernardino
2021-08-13 16:47 ` Jonathan Tan
2021-08-10 18:28 ` [PATCH 7/7] t7814: show lack of alternate ODB-adding Jonathan Tan
2021-08-11 21:55 ` Emily Shaffer
2021-08-11 22:22 ` Matheus Tavares Bernardino
2021-08-13 16:50 ` Jonathan Tan
2021-08-11 21:29 ` [PATCH 0/7] In grep, no adding submodule ODB as alternates Emily Shaffer
2021-08-11 22:49 ` Josh Steadmon
2021-08-13 21:05 ` Jonathan Tan [this message]
2021-08-13 21:05 ` [PATCH v2 1/8] submodule: lazily add submodule ODBs " Jonathan Tan
2021-08-13 21:05 ` [PATCH v2 2/8] grep: use submodule-ODB-as-alternate lazy-addition Jonathan Tan
2021-08-13 21:05 ` [PATCH v2 3/8] grep: typesafe versions of grep_source_init Jonathan Tan
2021-08-16 15:06 ` Matheus Tavares Bernardino
2021-08-13 21:05 ` [PATCH v2 4/8] grep: read submodule entry with explicit repo Jonathan Tan
2021-08-13 21:05 ` [PATCH v2 5/8] grep: allocate subrepos on heap Jonathan Tan
2021-08-13 21:44 ` Junio C Hamano
2021-08-16 19:42 ` Jonathan Tan
2021-08-13 21:05 ` [PATCH v2 6/8] grep: add repository to OID grep sources Jonathan Tan
2021-08-16 14:48 ` Matheus Tavares Bernardino
2021-08-16 19:44 ` Jonathan Tan
2021-08-13 21:05 ` [PATCH v2 7/8] submodule-config: pass repo upon blob config read Jonathan Tan
2021-08-16 14:32 ` Matheus Tavares Bernardino
2021-08-16 19:57 ` Matheus Tavares Bernardino
2021-08-16 20:02 ` Jonathan Tan
2021-08-16 15:48 ` Matheus Tavares Bernardino
2021-08-16 20:09 ` Jonathan Tan
2021-08-16 20:57 ` Jonathan Tan
2021-08-13 21:05 ` [PATCH v2 8/8] t7814: show lack of alternate ODB-adding Jonathan Tan
2021-08-16 15:14 ` [PATCH v2 0/8] In grep, no adding submodule ODB as alternates Matheus Tavares Bernardino
2021-08-16 21:09 ` [PATCH v3 " Jonathan Tan
2021-08-16 21:09 ` [PATCH v3 1/8] submodule: lazily add submodule ODBs " Jonathan Tan
2021-08-16 21:09 ` [PATCH v3 2/8] grep: use submodule-ODB-as-alternate lazy-addition Jonathan Tan
2021-08-16 21:09 ` [PATCH v3 3/8] grep: typesafe versions of grep_source_init Jonathan Tan
2021-08-16 21:09 ` [PATCH v3 4/8] grep: read submodule entry with explicit repo Jonathan Tan
2021-08-16 21:09 ` [PATCH v3 5/8] grep: allocate subrepos on heap Jonathan Tan
2021-08-16 21:09 ` [PATCH v3 6/8] grep: add repository to OID grep sources Jonathan Tan
2021-09-27 12:08 ` Ævar Arnfjörð Bjarmason
2021-09-27 16:45 ` [RFC PATCH 0/3] grep: don'\''t add subrepos to in-memory alternates Matheus Tavares
2021-09-27 17:30 ` Ævar Arnfjörð Bjarmason
2021-08-16 21:09 ` [PATCH v3 7/8] submodule-config: pass repo upon blob config read Jonathan Tan
2021-08-16 21:09 ` [PATCH v3 8/8] t7814: show lack of alternate ODB-adding Jonathan Tan
2021-08-17 19:29 ` [PATCH v3 0/8] In grep, no adding submodule ODB as alternates Matheus Tavares Bernardino
2021-09-08 0:26 ` Junio C Hamano
2021-09-08 15:31 ` Matheus Tavares Bernardino
2021-09-08 18:45 ` Junio C Hamano
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=cover.1628888668.git.jonathantanmy@google.com \
--to=jonathantanmy@google.com \
--cc=emilyshaffer@google.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=matheus.bernardino@usp.br \
--cc=ramsay@ramsayjones.plus.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;
as well as URLs for NNTP newsgroup(s).