Merge branch 'xx/diff-tree-remerge-diff-fix' into maint-2.46

"git rev-list ... | git diff-tree -p --remerge-diff --stdin" should
behave more or less like "git log -p --remerge-diff" but instead it
crashed, forgetting to prepare a temporary object store needed.

* xx/diff-tree-remerge-diff-fix:
  diff-tree: fix crash when used with --remerge-diff
This commit is contained in:
Junio C Hamano
2024-08-26 11:10:24 -07:00
2 changed files with 48 additions and 0 deletions

View File

@ -8,6 +8,7 @@
#include "read-cache-ll.h"
#include "repository.h"
#include "revision.h"
#include "tmp-objdir.h"
#include "tree.h"
static struct rev_info log_tree_opt;
@ -166,6 +167,13 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)
opt->diffopt.rotate_to_strict = 1;
if (opt->remerge_diff) {
opt->remerge_objdir = tmp_objdir_create("remerge-diff");
if (!opt->remerge_objdir)
die(_("unable to create temporary object directory"));
tmp_objdir_replace_primary_odb(opt->remerge_objdir, 1);
}
/*
* NOTE! We expect "a..b" to expand to "^a b" but it is
* perfectly valid for revision range parser to yield "b ^a",
@ -230,5 +238,10 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)
diff_free(&opt->diffopt);
}
if (opt->remerge_diff) {
tmp_objdir_destroy(opt->remerge_objdir);
opt->remerge_objdir = NULL;
}
return diff_result_code(&opt->diffopt);
}