]> git.ipfire.org Git - thirdparty/git.git/blobdiff - commit.c
Merge branch 'eb/hash-transition'
[thirdparty/git.git] / commit.c
index 2b61a4d0aa11b02869d13ff906605264a112b281..1da10ec916c5e08a542da4bdc3b70518e91f113d 100644 (file)
--- a/commit.c
+++ b/commit.c
@@ -8,7 +8,6 @@
 #include "repository.h"
 #include "object-name.h"
 #include "object-store-ll.h"
-#include "pkt-line.h"
 #include "utf8.h"
 #include "diff.h"
 #include "revision.h"
 #include "advice.h"
 #include "refs.h"
 #include "commit-reach.h"
-#include "run-command.h"
 #include "setup.h"
 #include "shallow.h"
 #include "tree.h"
 #include "hook.h"
+#include "parse.h"
 #include "object-file-convert.h"
 
 static struct commit_extra_header *read_commit_extra_header_lines(const char *buf, size_t len, const char **);
@@ -573,8 +572,21 @@ int repo_parse_commit_internal(struct repository *r,
                return -1;
        if (item->object.parsed)
                return 0;
-       if (use_commit_graph && parse_commit_in_graph(r, item))
+       if (use_commit_graph && parse_commit_in_graph(r, item)) {
+               static int commit_graph_paranoia = -1;
+
+               if (commit_graph_paranoia == -1)
+                       commit_graph_paranoia = git_env_bool(GIT_COMMIT_GRAPH_PARANOIA, 0);
+
+               if (commit_graph_paranoia && !has_object(r, &item->object.oid, 0)) {
+                       unparse_commit(r, &item->object.oid);
+                       return quiet_on_missing ? -1 :
+                               error(_("commit %s exists in commit-graph but not in the object database"),
+                                     oid_to_hex(&item->object.oid));
+               }
+
                return 0;
+       }
 
        if (oid_object_info_extended(r, &item->object.oid, &oi, flags) < 0)
                return quiet_on_missing ? -1 :
@@ -1041,7 +1053,7 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)
 {
        struct object_id oid;
        struct rev_collect revs;
-       struct commit_list *bases;
+       struct commit_list *bases = NULL;
        int i;
        struct commit *ret = NULL;
        char *full_refname;
@@ -1066,8 +1078,9 @@ struct commit *get_fork_point(const char *refname, struct commit *commit)
        for (i = 0; i < revs.nr; i++)
                revs.commit[i]->object.flags &= ~TMP_MARK;
 
-       bases = repo_get_merge_bases_many(the_repository, commit, revs.nr,
-                                         revs.commit);
+       if (repo_get_merge_bases_many(the_repository, commit, revs.nr,
+                                     revs.commit, &bases) < 0)
+               exit(128);
 
        /*
         * There should be one and only one merge base, when we found
@@ -1900,7 +1913,7 @@ const char *find_commit_header(const char *msg, const char *key, size_t *out_len
  * Returns the number of bytes from the tail to ignore, to be fed as
  * the second parameter to append_signoff().
  */
-size_t ignore_non_trailer(const char *buf, size_t len)
+size_t ignored_log_message_bytes(const char *buf, size_t len)
 {
        size_t boc = 0;
        size_t bol = 0;