зеркало из https://github.com/microsoft/git.git
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:
Родитель
be26d2b29b
Коммит
a92b1095d1
|
@ -9,26 +9,24 @@
|
|||
*/
|
||||
#include "git-compat-util.h"
|
||||
#include "builtin.h"
|
||||
#include "diff.h"
|
||||
|
||||
static const char builtin_merge_ours_usage[] =
|
||||
"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)
|
||||
{
|
||||
if (argc == 2 && !strcmp(argv[1], "-h"))
|
||||
usage(builtin_merge_ours_usage);
|
||||
|
||||
/*
|
||||
* We need to exit with 2 if the index does not match our HEAD tree,
|
||||
* because the current index is what we will be committing as the
|
||||
* merge result.
|
||||
* The contents of the current index becomes the tree we
|
||||
* commit. The index must match HEAD, or this merge cannot go
|
||||
* 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(0);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче