Skip to content

Commit

Permalink
git-merge-ours: make it a builtin.
Browse files Browse the repository at this point in the history
Except that this fixes a longstanding corner case bug by
tightening the way underlying diff-index command is run, it is
functionally equivalent to the scripted version.

Signed-off-by: Thomas Harning Jr <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
harningt authored and gitster committed Nov 22, 2007
1 parent a7d9da6 commit a00a42a
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 1 deletion.
3 changes: 2 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ SCRIPT_SH = \
git-sh-setup.sh \
git-am.sh \
git-merge.sh git-merge-stupid.sh git-merge-octopus.sh \
git-merge-resolve.sh git-merge-ours.sh \
git-merge-resolve.sh \
git-lost-found.sh git-quiltimport.sh git-submodule.sh \
git-filter-branch.sh \
git-stash.sh
Expand Down Expand Up @@ -353,6 +353,7 @@ BUILTIN_OBJS = \
builtin-mailsplit.o \
builtin-merge-base.o \
builtin-merge-file.o \
builtin-merge-ours.o \
builtin-mv.o \
builtin-name-rev.o \
builtin-pack-objects.o \
Expand Down
28 changes: 28 additions & 0 deletions builtin-merge-ours.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Implementation of git-merge-ours.sh as builtin
*
* Copyright (c) 2007 Thomas Harning Jr
* Original:
* Original Copyright (c) 2005 Junio C Hamano
*
* Pretend we resolved the heads, but declare our tree trumps everybody else.
*/
#include "git-compat-util.h"
#include "builtin.h"

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)
{
/*
* 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.
*/
if (cmd_diff_index(NARGS, diff_index_args, prefix))
exit(2);
exit(0);
}
1 change: 1 addition & 0 deletions builtin.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ extern int cmd_ls_tree(int argc, const char **argv, const char *prefix);
extern int cmd_mailinfo(int argc, const char **argv, const char *prefix);
extern int cmd_mailsplit(int argc, const char **argv, const char *prefix);
extern int cmd_merge_base(int argc, const char **argv, const char *prefix);
extern int cmd_merge_ours(int argc, const char **argv, const char *prefix);
extern int cmd_merge_file(int argc, const char **argv, const char *prefix);
extern int cmd_mv(int argc, const char **argv, const char *prefix);
extern int cmd_name_rev(int argc, const char **argv, const char *prefix);
Expand Down
File renamed without changes.
1 change: 1 addition & 0 deletions git.c
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,7 @@ static void handle_internal_command(int argc, const char **argv)
{ "mailsplit", cmd_mailsplit },
{ "merge-base", cmd_merge_base, RUN_SETUP },
{ "merge-file", cmd_merge_file },
{ "merge-ours", cmd_merge_ours, RUN_SETUP },
{ "mv", cmd_mv, RUN_SETUP | NEED_WORK_TREE },
{ "name-rev", cmd_name_rev, RUN_SETUP },
{ "pack-objects", cmd_pack_objects, RUN_SETUP },
Expand Down

0 comments on commit a00a42a

Please sign in to comment.