Code

Custom low-level merge driver support.
authorJunio C Hamano <junkio@cox.net>
Wed, 18 Apr 2007 05:51:45 +0000 (22:51 -0700)
committerJunio C Hamano <junkio@cox.net>
Wed, 18 Apr 2007 08:43:42 +0000 (01:43 -0700)
commitf3ef6b6bbe9bfd3d09130f7e26b87dbe11b93c5b
tree4dff356b896dfa2ddacdaff0e3c9ff06f8f0b91e
parent47579efc009c6f7afaf31be107eb92395a4f10db
Custom low-level merge driver support.

This allows users to specify custom low-level merge driver per
path, using the attributes mechanism.  Just like you can specify
one of built-in "text", "binary", "union" low-level merge
drivers by saying:

* merge=text
.gitignore merge=union
*.jpg merge=binary

pick a name of your favorite merge driver, and assign it as the
value of the 'merge' attribute.

A custom low-level merge driver is defined via the config
mechanism.  This patch introduces 'merge.driver', a multi-valued
configuration.  Its value is the name (i.e. the one you use as
the value of 'merge' attribute) followed by a command line
specification.  The command line can contain %O, %A, and %B to
be interpolated with the names of temporary files that hold the
common ancestor version, the version from your branch, and the
version from the other branch, and the resulting command is
spawned.

The low-level merge driver is expected to update the temporary
file for your branch (i.e. %A) with the result and exit with
status 0 for a clean merge, and non-zero status for a conflicted
merge.

A new test in t6026 demonstrates a sample usage.

Signed-off-by: Junio C Hamano <junkio@cox.net>
merge-recursive.c
t/t6026-merge-attr.sh