merge-ours: do not use cmd_*() as a subroutine
The call to cmd_diff_index() "git merge-ours" makes has been working by accident that the function did not call exit(3), and the caller exited almost immediately after making a call, but it sets a bad precedent for people to cut and paste. For finding out if the index exactly matches the HEAD (or a given tree-ish), there is index_differs_from() which is exactly written for that purpose. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
@ -9,26 +9,24 @@
|
|||||||
*/
|
*/
|
||||||
#include "git-compat-util.h"
|
#include "git-compat-util.h"
|
||||||
#include "builtin.h"
|
#include "builtin.h"
|
||||||
|
#include "diff.h"
|
||||||
|
|
||||||
static const char builtin_merge_ours_usage[] =
|
static const char builtin_merge_ours_usage[] =
|
||||||
"git merge-ours <base>... -- HEAD <remote>...";
|
"git merge-ours <base>... -- HEAD <remote>...";
|
||||||
|
|
||||||
static const char *diff_index_args[] = {
|
|
||||||
"diff-index", "--quiet", "--cached", "HEAD", "--", NULL
|
|
||||||
};
|
|
||||||
#define NARGS (ARRAY_SIZE(diff_index_args) - 1)
|
|
||||||
|
|
||||||
int cmd_merge_ours(int argc, const char **argv, const char *prefix)
|
int cmd_merge_ours(int argc, const char **argv, const char *prefix)
|
||||||
{
|
{
|
||||||
if (argc == 2 && !strcmp(argv[1], "-h"))
|
if (argc == 2 && !strcmp(argv[1], "-h"))
|
||||||
usage(builtin_merge_ours_usage);
|
usage(builtin_merge_ours_usage);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We need to exit with 2 if the index does not match our HEAD tree,
|
* The contents of the current index becomes the tree we
|
||||||
* because the current index is what we will be committing as the
|
* commit. The index must match HEAD, or this merge cannot go
|
||||||
* merge result.
|
* through.
|
||||||
*/
|
*/
|
||||||
if (cmd_diff_index(NARGS, diff_index_args, prefix))
|
if (read_cache() < 0)
|
||||||
|
die_errno("read_cache failed");
|
||||||
|
if (index_differs_from("HEAD", 0, 0))
|
||||||
exit(2);
|
exit(2);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user