Skip to content

Commit

Permalink
merge-one-file: use common as base, instead of emptiness.
Browse files Browse the repository at this point in the history
Unlike the previous round that merged the path added differently
in each branches using emptiness as the base, compute a common
version and use it as input to 'merge' program.

This would show the resulting (still conflicting) file left in
the working tree as:

	common file contents...
	<<<<<< FILENAME
	version from our branch...
	======
	version from their branch...
	>>>>>> .merge_file_XXXXXX
	more common file contents...

when both sides added similar contents.

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Nov 12, 2005
1 parent f7d24bb commit cb93c19
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 4 deletions.
11 changes: 9 additions & 2 deletions apply.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ static int numstat = 0;
static int summary = 0;
static int check = 0;
static int apply = 1;
static int no_add = 0;
static int show_index_info = 0;
static int line_termination = '\n';
static const char apply_usage[] =
Expand Down Expand Up @@ -1112,8 +1113,10 @@ static int apply_one_fragment(struct buffer_desc *desc, struct fragment *frag)
break;
/* Fall-through for ' ' */
case '+':
memcpy(new + newsize, patch + 1, plen);
newsize += plen;
if (*patch != '+' || !no_add) {
memcpy(new + newsize, patch + 1, plen);
newsize += plen;
}
break;
case '@': case '\\':
/* Ignore it, we already handled it */
Expand Down Expand Up @@ -1710,6 +1713,10 @@ int main(int argc, char **argv)
excludes = x;
continue;
}
if (!strcmp(arg, "--no-add")) {
no_add = 1;
continue;
}
if (!strcmp(arg, "--stat")) {
apply = 0;
diffstat = 1;
Expand Down
6 changes: 4 additions & 2 deletions git-merge-one-file.sh
Original file line number Diff line number Diff line change
Expand Up @@ -57,18 +57,20 @@ case "${1:-.}${2:-.}${3:-.}" in
# Modified in both, but differently.
#
"$1$2$3" | ".$2$3")
src2=`git-unpack-file $3`
case "$1" in
'')
echo "Added $4 in both, but differently."
# This extracts OUR file in $orig, and uses git-apply to
# remove lines that are unique to ours.
orig=`git-unpack-file $2`
: >$orig
diff -u -La/$orig -Lb/$orig $orig $src2 | git-apply --no-add
;;
*)
echo "Auto-merging $4."
orig=`git-unpack-file $1`
;;
esac
src2=`git-unpack-file $3`

# We reset the index to the first branch, making
# git-diff-file useful
Expand Down

0 comments on commit cb93c19

Please sign in to comment.