From: Stefan Beller <sbeller@google.com>
To: git@vger.kernel.org
Cc: jonathantanmy@google.com, Stefan Beller <sbeller@google.com>
Subject: [PATCH 17/19] submodule: use submodule repos for object lookup
Date: Thu, 11 Oct 2018 14:17:52 -0700 [thread overview]
Message-ID: <20181011211754.31369-18-sbeller@google.com> (raw)
In-Reply-To: <20181011211754.31369-1-sbeller@google.com>
This converts the 'show_submodule_header' function to use
the repository API properly, such that the submodule objects
are not added to the main object store.
Signed-off-by: Stefan Beller <sbeller@google.com>
---
submodule.c | 48 ++++++++++++++++++++++++++++++++++++++----------
1 file changed, 38 insertions(+), 10 deletions(-)
diff --git a/submodule.c b/submodule.c
index 442229bb49..5e1a6c0b7c 100644
--- a/submodule.c
+++ b/submodule.c
@@ -443,7 +443,7 @@ static int prepare_submodule_summary(struct rev_info *rev, const char *path,
return prepare_revision_walk(rev);
}
-static void print_submodule_summary(struct rev_info *rev, struct diff_options *o)
+static void print_submodule_summary(struct repository *r, struct rev_info *rev, struct diff_options *o)
{
static const char format[] = " %m %s";
struct strbuf sb = STRBUF_INIT;
@@ -454,7 +454,8 @@ static void print_submodule_summary(struct rev_info *rev, struct diff_options *o
ctx.date_mode = rev->date_mode;
ctx.output_encoding = get_log_output_encoding();
strbuf_setlen(&sb, 0);
- format_commit_message(commit, format, &sb, &ctx);
+ repo_format_commit_message(r, commit, format, &sb,
+ &ctx);
strbuf_addch(&sb, '\n');
if (commit->object.flags & SYMMETRIC_LEFT)
diff_emit_submodule_del(o, sb.buf);
@@ -481,12 +482,37 @@ void prepare_submodule_repo_env(struct argv_array *out)
DEFAULT_GIT_DIR_ENVIRONMENT);
}
+/*
+ * Initialize 'out' based on the provided submodule path.
+ *
+ * Unlike repo_submodule_init, this tolerates submodules not present
+ * in .gitmodules. NEEDSWORK: The repo_submodule_init behavior is
+ * preferrable. This function exists only to preserve historical behavior.
+ *
+ * Returns 0 on success, -1 when the submodule is not present.
+ */
+static int open_submodule(struct repository *out, const char *path)
+{
+ struct strbuf sb = STRBUF_INIT;
+
+ if (submodule_to_gitdir(&sb, path) || repo_init(out, sb.buf, NULL)) {
+ strbuf_release(&sb);
+ return -1;
+ }
+
+ out->submodule_prefix = xstrdup(path);
+
+ strbuf_release(&sb);
+ return 0;
+}
+
/* Helper function to display the submodule header line prior to the full
* summary output. If it can locate the submodule objects directory it will
* attempt to lookup both the left and right commits and put them into the
* left and right pointers.
*/
-static void show_submodule_header(struct diff_options *o, const char *path,
+static void show_submodule_header(struct diff_options *o, struct repository *sub,
+ const char *path,
struct object_id *one, struct object_id *two,
unsigned dirty_submodule,
struct commit **left, struct commit **right,
@@ -507,7 +533,7 @@ static void show_submodule_header(struct diff_options *o, const char *path,
else if (is_null_oid(two))
message = "(submodule deleted)";
- if (add_submodule_odb(path)) {
+ if (open_submodule(sub, path) < 0) {
if (!message)
message = "(commits not present)";
goto output_header;
@@ -517,8 +543,8 @@ static void show_submodule_header(struct diff_options *o, const char *path,
* Attempt to lookup the commit references, and determine if this is
* a fast forward or fast backwards update.
*/
- *left = lookup_commit_reference(the_repository, one);
- *right = lookup_commit_reference(the_repository, two);
+ *left = lookup_commit_reference(sub, one);
+ *right = lookup_commit_reference(sub, two);
/*
* Warn about missing commits in the submodule project, but only if
@@ -528,7 +554,7 @@ static void show_submodule_header(struct diff_options *o, const char *path,
(!is_null_oid(two) && !*right))
message = "(commits not present)";
- *merge_bases = get_merge_bases(*left, *right);
+ *merge_bases = repo_get_merge_bases(sub, *left, *right);
if (*merge_bases) {
if ((*merge_bases)->item == *left)
fast_forward = 1;
@@ -562,8 +588,9 @@ void show_submodule_summary(struct diff_options *o, const char *path,
struct rev_info rev;
struct commit *left = NULL, *right = NULL;
struct commit_list *merge_bases = NULL;
+ struct repository sub;
- show_submodule_header(o, path, one, two, dirty_submodule,
+ show_submodule_header(o, &sub, path, one, two, dirty_submodule,
&left, &right, &merge_bases);
/*
@@ -580,7 +607,7 @@ void show_submodule_summary(struct diff_options *o, const char *path,
goto out;
}
- print_submodule_summary(&rev, o);
+ print_submodule_summary(&sub, &rev, o);
out:
if (merge_bases)
@@ -598,8 +625,9 @@ void show_submodule_inline_diff(struct diff_options *o, const char *path,
struct commit_list *merge_bases = NULL;
struct child_process cp = CHILD_PROCESS_INIT;
struct strbuf sb = STRBUF_INIT;
+ struct repository sub;
- show_submodule_header(o, path, one, two, dirty_submodule,
+ show_submodule_header(o, &sub, path, one, two, dirty_submodule,
&left, &right, &merge_bases);
/* We need a valid left and right commit to display a difference */
--
2.19.0
next prev parent reply other threads:[~2018-10-11 21:18 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-11 21:17 [RFC PATCH 00/19] Bring more repository handles into our code base Stefan Beller
2018-10-11 21:17 ` [PATCH 01/19] sha1_file: allow read_object to read objects in arbitrary repositories Stefan Beller
2018-10-11 21:17 ` [PATCH 02/19] packfile: allow has_packed_and_bad to handle " Stefan Beller
2018-10-11 21:17 ` [PATCH 03/19] object-store: allow read_object_file_extended to read from " Stefan Beller
2018-10-11 21:58 ` Jonathan Tan
2018-10-11 21:17 ` [PATCH 04/19] object-store: prepare read_object_file to deal with " Stefan Beller
2018-10-11 22:01 ` Jonathan Tan
2018-10-11 22:02 ` Stefan Beller
2018-10-11 21:17 ` [PATCH 05/19] object: parse_object to honor its repository argument Stefan Beller
2018-10-11 22:11 ` Jonathan Tan
2018-10-13 0:00 ` Stefan Beller
2018-10-11 21:17 ` [PATCH 06/19] commit: allow parse_commit* to handle arbitrary repositories Stefan Beller
2018-10-11 21:17 ` [PATCH 07/19] commit.c: allow paint_down_to_common " Stefan Beller
2018-10-11 21:17 ` [PATCH 08/19] commit.c: allow merge_bases_many " Stefan Beller
2018-10-11 21:17 ` [PATCH 09/19] commit.c: allow remove_redundant " Stefan Beller
2018-10-11 21:17 ` [PATCH 10/19] commit: allow get_merge_bases_many_0 " Stefan Beller
2018-10-11 21:17 ` [PATCH 11/19] commit: prepare get_merge_bases " Stefan Beller
2018-10-11 21:17 ` [PATCH 12/19] commit: prepare get_commit_buffer " Stefan Beller
2018-10-11 21:17 ` [PATCH 13/19] commit: prepare in_merge_bases[_many] " Stefan Beller
2018-10-11 21:17 ` [PATCH 14/19] commit: prepare repo_unuse_commit_buffer " Stefan Beller
2018-10-11 21:17 ` [PATCH 15/19] commit: prepare logmsg_reencode " Stefan Beller
2018-10-11 21:17 ` [PATCH 16/19] pretty: prepare format_commit_message " Stefan Beller
2018-10-11 22:22 ` Jonathan Tan
2018-10-11 21:17 ` Stefan Beller [this message]
2018-10-11 22:40 ` [PATCH 17/19] submodule: use submodule repos for object lookup Jonathan Tan
2018-10-13 0:20 ` Stefan Beller
2018-10-16 19:30 ` Stefan Beller
2018-10-16 23:13 ` Jonathan Tan
2018-10-16 23:16 ` Stefan Beller
2018-10-11 21:17 ` [PATCH 18/19] submodule: don't add submodule as odb for push Stefan Beller
2018-10-11 23:00 ` Jonathan Tan
2018-10-11 23:09 ` Stefan Beller
2018-10-11 21:17 ` [PATCH 19/19] Apply semantic patches from previous patches Stefan Beller
2018-10-11 23:07 ` [RFC PATCH 00/19] Bring more repository handles into our code base Jonathan Tan
2018-10-11 23:31 ` Junio C Hamano
2018-10-12 18:50 ` Jonathan Nieder
2018-10-13 0:30 ` Stefan Beller
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=20181011211754.31369-18-sbeller@google.com \
--to=sbeller@google.com \
--cc=git@vger.kernel.org \
--cc=jonathantanmy@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.
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).