Converted git-merge-ours.sh -> builtin-merge-ours.c
PATCH 1/1 Converted git-merge-ours.sh -> builtin-merge-ours.c
Here's a simple patch to make git-merge-ours.sh into a builtin.
I figure this would be a simple way of getting in the git-development flow.
--- Makefile | 3 ++- builtin-merge-ours.c | 32 ++++++++++++++++++++++++++++++++ builtin.h | 1 + git-merge-ours.sh | 14 -------------- git.c | 1 + 5 files changed, 36 insertions(+), 15 deletions(-) create mode 100644 builtin-merge-ours.c delete mode 100755 git-merge-ours.sh
Makefile +2 -1
@@ -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
@@ -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 \
builtin-merge-ours.c new file +32 -0
@@ -0,0 +1,32 @@ +/* +* 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" + +int cmd_merge_ours (int argc,const char **argv,const char *prefix) +{ +const char *nargv[] = { +"diff-index" , +"--quiet" , +"--cached" , +"HEAD" , +NULL + }; +int i; + +int ret =cmd_diff_index (4 , nargv, prefix); +printf ("GOT: %i\n" , ret); +/* 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 (ret) ret =2 ; +return ret; +}
builtin.h +1 -0
@@ -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);
git-merge-ours.sh deleted +0 -14
@@ -1,14 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2005 Junio C Hamano -# -# Pretend we resolved the heads, but declare our tree trumps everybody else. -# - -# 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. - -git diff-index --quiet --cached HEAD || exit 2 - -exit 0
git.c +1 -0
@@ -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 },
Signature · 1 line
1.5.3.6.861.gd794
Quoted 5 lines · Thomas Harning
Here's a simple patch to make
git-merge-ours.shinto a builtin.I figure this would be a simple way of getting in the git-development flow.
Signed-off-by Thomas Harning Jr <[email protected]>
Have you tried to read this proposed commit log message in the context of "git log", after applying it on top of 'master'? "Here's a simple patch to" and "I figure ..." are of not much use.
The patch looks good except for minor style nits.
builtin-merge-ours.c line 3
Quoted 9 lines
builtin-merge-ours.c new file +3
-0@@ -0,0 +1,32 @@ +/* +* Implementation of git-merge-ours.sh as builtin +*
Traling whitespace.
builtin-merge-ours.c line 25
Quoted 13 lines
builtin-merge-ours.c new file +13
-0+int cmd_merge_ours (int argc,const char **argv,const char *prefix) +{ +const char *nargv[] = { +"diff-index" , +"--quiet" , +"--cached" , +"HEAD" , +NULL + }; +int i; + +int ret =cmd_diff_index (4 , nargv, prefix); +printf ("GOT: %i\n" , ret);
Unused variable "i".
An unwanted blank line still in the sequence of variable definitions, and a missing blank line after the definitions.
A leftover debug printf() is not very welcomed.
[Not a nit but a comment]
The call to cmd_diff_index() here raised my eyebrow a bit. I would have skipped all the parameter parsing and arranged it to directly call into run_diff_index() instead.
As the result of literally translating the scripted version of git-merge-ours, the code inherits a corner-case bug. Can you spot it?
builtin-merge-ours.c line 29
Quoted 4 lines
builtin-merge-ours.c new file +4
-0+/* 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. +*/
We tend to format a multi-line comment block as:
/*
* We need to ...
* ... merge result.
*/builtin-merge-ours.c line 30
Quoted 1 line
builtin-merge-ours.c new file +1
-0+if (ret) ret =2 ;
A SP between "if" and "("; put the body of the "if" on a separate line.
Thanks. No need to resend; all these minor nits can be fixed here easily.
git-merge-ours.sh
Quoted 5 lines · Thomas Harning
git-merge-ours.sh deleted +0
-0
Shouldn't script version be moved to contrib/examples/ as is git.git policy, or is it too simple script?
Signature · 3 lines
Jakub Narebski Warsaw, Poland ShadeHawk on #git