From: Stefan Beller <sbeller@google.com>
To: sbeller@google.com
Cc: git@vger.kernel.org, jonathantanmy@google.com, stolee@gmail.com
Subject: [RFC PATCH 2/2 (BREAKS BUILD)] builtin/merge-base.c: do not rely on the_repository any more
Date: Thu, 18 Oct 2018 11:37:58 -0700 [thread overview]
Message-ID: <20181018183758.81186-3-sbeller@google.com> (raw)
In-Reply-To: <20181018183758.81186-1-sbeller@google.com>
To avoid creeping in the dependency of the_repository,
use GIT_NO_THE_REPOSITORY in the test to prove it still works.
Signed-off-by: Stefan Beller <sbeller@google.com>
---
This doesn't work yet, as we have not converted get_oid, yet.
It proves that GIT_NO_THE_REPOSITORY works, though.
Stefan
builtin/merge-base.c | 67 ++++++++++++++++++++++++++-----------------
t/t6010-merge-base.sh | 3 +-
2 files changed, 43 insertions(+), 27 deletions(-)
diff --git a/builtin/merge-base.c b/builtin/merge-base.c
index 1c92099070..29341f8839 100644
--- a/builtin/merge-base.c
+++ b/builtin/merge-base.c
@@ -1,3 +1,4 @@
+#define NO_THE_REPOSITORY_COMPATIBILITY_MACROS
#include "builtin.h"
#include "cache.h"
#include "config.h"
@@ -37,27 +38,28 @@ static const char * const merge_base_usage[] = {
NULL
};
-static struct commit *get_commit_reference(const char *arg)
+static struct commit *get_commit_reference(struct repository *r,
+ const char *arg)
{
struct object_id revkey;
- struct commit *r;
+ struct commit *ref;
if (get_oid(arg, &revkey))
die("Not a valid object name %s", arg);
- r = lookup_commit_reference(the_repository, &revkey);
- if (!r)
+ ref = lookup_commit_reference(r, &revkey);
+ if (!ref)
die("Not a valid commit name %s", arg);
- return r;
+ return ref;
}
-static int handle_independent(int count, const char **args)
+static int handle_independent(struct repository *r, int count, const char **args)
{
struct commit_list *revs = NULL, *rev;
int i;
for (i = count - 1; i >= 0; i--)
- commit_list_insert(get_commit_reference(args[i]), &revs);
+ commit_list_insert(get_commit_reference(r, args[i]), &revs);
reduce_heads_replace(&revs);
@@ -71,14 +73,16 @@ static int handle_independent(int count, const char **args)
return 0;
}
-static int handle_octopus(int count, const char **args, int show_all)
+static int handle_octopus(struct repository *r,
+ int count, const char **args,
+ int show_all)
{
struct commit_list *revs = NULL;
struct commit_list *result, *rev;
int i;
for (i = count - 1; i >= 0; i--)
- commit_list_insert(get_commit_reference(args[i]), &revs);
+ commit_list_insert(get_commit_reference(r, args[i]), &revs);
result = get_octopus_merge_bases(revs);
free_commit_list(revs);
@@ -97,15 +101,15 @@ static int handle_octopus(int count, const char **args, int show_all)
return 0;
}
-static int handle_is_ancestor(int argc, const char **argv)
+static int handle_is_ancestor(struct repository *r, int argc, const char **argv)
{
struct commit *one, *two;
if (argc != 2)
die("--is-ancestor takes exactly two commits");
- one = get_commit_reference(argv[0]);
- two = get_commit_reference(argv[1]);
- if (in_merge_bases(one, two))
+ one = get_commit_reference(r, argv[0]);
+ two = get_commit_reference(r, argv[1]);
+ if (repo_in_merge_bases(r, one, two))
return 0;
else
return 1;
@@ -116,19 +120,22 @@ struct rev_collect {
int nr;
int alloc;
unsigned int initial : 1;
+ struct repository *repo;
};
-static void add_one_commit(struct object_id *oid, struct rev_collect *revs)
+static void add_one_commit(struct repository *r,
+ struct object_id *oid,
+ struct rev_collect *revs)
{
struct commit *commit;
if (is_null_oid(oid))
return;
- commit = lookup_commit(the_repository, oid);
+ commit = lookup_commit(r, oid);
if (!commit ||
(commit->object.flags & TMP_MARK) ||
- parse_commit(commit))
+ repo_parse_commit(r, commit))
return;
ALLOC_GROW(revs->commit, revs->nr + 1, revs->alloc);
@@ -144,13 +151,13 @@ static int collect_one_reflog_ent(struct object_id *ooid, struct object_id *noid
if (revs->initial) {
revs->initial = 0;
- add_one_commit(ooid, revs);
+ add_one_commit(revs->repo, ooid, revs);
}
- add_one_commit(noid, revs);
+ add_one_commit(revs->repo, noid, revs);
return 0;
}
-static int handle_fork_point(int argc, const char **argv)
+static int handle_fork_point(struct repository *r, int argc, const char **argv)
{
struct object_id oid;
char *refname;
@@ -173,13 +180,14 @@ static int handle_fork_point(int argc, const char **argv)
if (get_oid(commitname, &oid))
die("Not a valid object name: '%s'", commitname);
- derived = lookup_commit_reference(the_repository, &oid);
+ derived = lookup_commit_reference(r, &oid);
memset(&revs, 0, sizeof(revs));
revs.initial = 1;
+ revs.repo = r;
for_each_reflog_ent(refname, collect_one_reflog_ent, &revs);
if (!revs.nr && !get_oid(refname, &oid))
- add_one_commit(&oid, &revs);
+ add_one_commit(r, &oid, &revs);
for (i = 0; i < revs.nr; i++)
revs.commit[i]->object.flags &= ~TMP_MARK;
@@ -217,6 +225,7 @@ int cmd_merge_base(int argc, const char **argv, const char *prefix)
int rev_nr = 0;
int show_all = 0;
int cmdmode = 0;
+ struct repository *r;
struct option options[] = {
OPT_BOOL('a', "all", &show_all, N_("output all common ancestors")),
@@ -234,27 +243,33 @@ int cmd_merge_base(int argc, const char **argv, const char *prefix)
git_config(git_default_config, NULL);
argc = parse_options(argc, argv, prefix, options, merge_base_usage, 0);
+ /*
+ * TODO: once the config machinery can cope without proper setup of
+ * the_repository, move this call up
+ */
+ r = get_the_repository();
+
if (cmdmode == 'a') {
if (argc < 2)
usage_with_options(merge_base_usage, options);
if (show_all)
die("--is-ancestor cannot be used with --all");
- return handle_is_ancestor(argc, argv);
+ return handle_is_ancestor(r, argc, argv);
}
if (cmdmode == 'r' && show_all)
die("--independent cannot be used with --all");
if (cmdmode == 'o')
- return handle_octopus(argc, argv, show_all);
+ return handle_octopus(r, argc, argv, show_all);
if (cmdmode == 'r')
- return handle_independent(argc, argv);
+ return handle_independent(r, argc, argv);
if (cmdmode == 'f') {
if (argc < 1 || 2 < argc)
usage_with_options(merge_base_usage, options);
- return handle_fork_point(argc, argv);
+ return handle_fork_point(r, argc, argv);
}
if (argc < 2)
@@ -262,6 +277,6 @@ int cmd_merge_base(int argc, const char **argv, const char *prefix)
ALLOC_ARRAY(rev, argc);
while (argc-- > 0)
- rev[rev_nr++] = get_commit_reference(*argv++);
+ rev[rev_nr++] = get_commit_reference(r, *argv++);
return show_merge_base(rev, rev_nr, show_all);
}
diff --git a/t/t6010-merge-base.sh b/t/t6010-merge-base.sh
index 44c726ea39..ae1c85ee8d 100755
--- a/t/t6010-merge-base.sh
+++ b/t/t6010-merge-base.sh
@@ -15,7 +15,8 @@ GIT_COMMITTER_EMAIL=git@comm.iter.xz
GIT_COMMITTER_NAME='C O Mmiter'
GIT_AUTHOR_NAME='A U Thor'
GIT_AUTHOR_EMAIL=git@au.thor.xz
-export GIT_COMMITTER_EMAIL GIT_COMMITTER_NAME GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL
+GIT_NO_THE_REPOSITORY=1
+export GIT_COMMITTER_EMAIL GIT_COMMITTER_NAME GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_NO_THE_REPOSITORY
doit () {
OFFSET=$1 &&
--
2.19.0
next prev parent reply other threads:[~2018-10-18 18:38 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-16 23:35 [PATCH 00/19] Bring more repository handles into our code base Stefan Beller
2018-10-16 23:35 ` [PATCH 01/19] sha1_file: allow read_object to read objects in arbitrary repositories Stefan Beller
2018-10-16 23:35 ` [PATCH 02/19] packfile: allow has_packed_and_bad to handle " Stefan Beller
2018-10-16 23:35 ` [PATCH 03/19] object-store: allow read_object_file_extended to read from " Stefan Beller
2018-10-16 23:35 ` [PATCH 04/19] object-store: prepare read_object_file to deal with " Stefan Beller
2018-10-16 23:35 ` [PATCH 05/19] object-store: prepare has_{sha1, object}_file[_with_flags] to handle " Stefan Beller
2018-10-16 23:35 ` [PATCH 06/19] object: parse_object to honor its repository argument Stefan Beller
2018-10-16 23:35 ` [PATCH 07/19] commit: allow parse_commit* to handle arbitrary repositories Stefan Beller
2018-10-16 23:35 ` [PATCH 08/19] commit-reach.c: allow paint_down_to_common " Stefan Beller
2018-10-16 23:35 ` [PATCH 09/19] commit-reach.c: allow merge_bases_many " Stefan Beller
2018-10-16 23:35 ` [PATCH 10/19] commit-reach.c: allow remove_redundant " Stefan Beller
2018-10-16 23:35 ` [PATCH 11/19] commit-reach.c: allow get_merge_bases_many_0 " Stefan Beller
2018-10-16 23:35 ` [PATCH 12/19] commit-reach: prepare get_merge_bases " Stefan Beller
2018-10-16 23:35 ` [PATCH 13/19] commit-reach: prepare in_merge_bases[_many] " Stefan Beller
2018-10-16 23:35 ` [PATCH 14/19] commit: prepare get_commit_buffer " Stefan Beller
2018-10-16 23:35 ` [PATCH 15/19] commit: prepare repo_unuse_commit_buffer " Stefan Beller
2018-10-16 23:35 ` [PATCH 16/19] commit: prepare logmsg_reencode " Stefan Beller
2018-10-16 23:35 ` [PATCH 17/19] pretty: prepare format_commit_message " Stefan Beller
2018-10-16 23:35 ` [PATCH 18/19] submodule: use submodule repos for object lookup Stefan Beller
2018-10-19 20:37 ` Jonathan Tan
2018-10-25 9:14 ` SZEDER Gábor
2018-10-31 13:38 ` Derrick Stolee
2018-11-01 19:13 ` Stefan Beller
2018-10-16 23:35 ` [PATCH 19/19] submodule: don't add submodule as odb for push Stefan Beller
2018-10-19 20:39 ` Jonathan Tan
2018-10-17 12:41 ` [PATCH 00/19] Bring more repository handles into our code base Derrick Stolee
2018-10-17 17:53 ` Stefan Beller
2018-10-18 18:37 ` [RFC PATCH 0/2] Bring the_repository into cmd_foo Stefan Beller
2018-10-18 18:37 ` [RFC PATCH 1/2] repository: have get_the_repository() to remove the_repository dependency Stefan Beller
2018-10-18 18:37 ` Stefan Beller [this message]
2018-10-18 21:01 ` [RFC PATCH 0/2] Bring the_repository into cmd_foo Jonathan Tan
2018-10-18 23:23 ` Stefan Beller
2018-10-19 7:23 ` [PATCH 00/19] Bring more repository handles into our code base Junio C Hamano
2018-10-22 17:39 ` New semantic patches vs. in-flight topics [was: Re: [PATCH 00/19] Bring more repository handles into our code base] SZEDER Gábor
2018-10-22 18:54 ` Stefan Beller
2018-10-25 1:59 ` SZEDER Gábor
2018-10-25 19:25 ` Stefan Beller
2018-10-22 22:49 ` Junio C Hamano
2018-10-23 0:26 ` Stefan Beller
2018-10-23 4:24 ` Junio C Hamano
2018-10-23 9:38 ` Junio C Hamano
2018-10-23 10:15 ` Carlo Arenas
2018-10-23 10:21 ` Junio C Hamano
2018-10-23 17:30 ` Stefan Beller
2018-10-24 1:22 ` Junio C Hamano
2018-10-25 5:39 ` Jeff King
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=20181018183758.81186-3-sbeller@google.com \
--to=sbeller@google.com \
--cc=git@vger.kernel.org \
--cc=jonathantanmy@google.com \
--cc=stolee@gmail.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).