From: Eyvind Bernhardsen <eyvind.bernhardsen@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: "git@vger.kernel.org List" <git@vger.kernel.org>
Subject: [PATCH v5 2/4] Introduce "double conversion during merge" more gradually
Date: Thu, 1 Jul 2010 11:09:50 +0200 [thread overview]
Message-ID: <3ae294ef30c3539da47d101bc39638e63721eb0e.1277974452.git.eyvind.bernhardsen@gmail.com> (raw)
In-Reply-To: <cover.1277974452.git.eyvind.bernhardsen@gmail.com>
From: Junio C Hamano <gitster@pobox.com>
This marks the recent improvement to the merge machinery that helps people
who changed their mind between CRLF/LF an opt in feature, so that we can
more easily release it early to everybody, without fear of breaking the
majority of users (read: on POSIX) that don't need it.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Eyvind Bernhardsen <eyvind.bernhardsen@gmail.com>
---
Documentation/config.txt | 10 ++++++++++
Documentation/gitattributes.txt | 5 +++--
cache.h | 1 +
config.c | 5 +++++
environment.c | 1 +
ll-merge.c | 8 +++++---
t/t6038-merge-text-auto.sh | 1 +
7 files changed, 26 insertions(+), 5 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 72949e7..454cbc7 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -538,6 +538,16 @@ core.sparseCheckout::
Enable "sparse checkout" feature. See section "Sparse checkout" in
linkgit:git-read-tree[1] for more information.
+core.mergePrefilter::
+ Tell git that canonical representation of files in the repository
+ has changed over time (e.g. earlier commits record text files
+ with CRLF line endings, but recent ones use LF line endings). In
+ such a repository, git can convert the data recorded in commits to
+ a canonical form before performing a merge to reduce unnecessary
+ conflicts. For more information, see section
+ "Merging branches with differing checkin/checkout attributes" in
+ linkgit:gitattributes[5].
+
add.ignore-errors::
Tells 'git add' to continue adding files when some files cannot be
added due to indexing errors. Equivalent to the '--ignore-errors'
diff --git a/Documentation/gitattributes.txt b/Documentation/gitattributes.txt
index 22400c1..316fac0 100644
--- a/Documentation/gitattributes.txt
+++ b/Documentation/gitattributes.txt
@@ -351,9 +351,10 @@ clean/smudge filter or text/eol/ident attributes, merging anything
where the attribute is not in place would normally cause merge
conflicts.
-To prevent these unnecessary merge conflicts, git runs a virtual
+To prevent these unnecessary merge conflicts, git can be told to run a virtual
check-out and check-in of all three stages of a file when resolving a
-three-way merge. This prevents changes caused by check-in conversion
+three-way merge by setting the `core.mergePrefilter` configuration variable.
+This prevents changes caused by check-in conversion
from causing spurious merge conflicts when a converted file is merged
with an unconverted file.
diff --git a/cache.h b/cache.h
index aa725b0..255da02 100644
--- a/cache.h
+++ b/cache.h
@@ -551,6 +551,7 @@ extern int read_replace_refs;
extern int fsync_object_files;
extern int core_preload_index;
extern int core_apply_sparse_checkout;
+extern int core_merge_prefilter;
enum safe_crlf {
SAFE_CRLF_FALSE = 0,
diff --git a/config.c b/config.c
index cdcf583..36a0d1a 100644
--- a/config.c
+++ b/config.c
@@ -595,6 +595,11 @@ static int git_default_core_config(const char *var, const char *value)
return 0;
}
+ if (!strcmp(var, "core.mergeprefilter")) {
+ core_merge_prefilter = git_config_bool(var, value);
+ return 0;
+ }
+
/* Add other config variables here and to Documentation/config.txt. */
return 0;
}
diff --git a/environment.c b/environment.c
index 83d38d3..59c4515 100644
--- a/environment.c
+++ b/environment.c
@@ -53,6 +53,7 @@ enum object_creation_mode object_creation_mode = OBJECT_CREATION_MODE;
char *notes_ref_name;
int grafts_replace_parents = 1;
int core_apply_sparse_checkout;
+int core_merge_prefilter;
/* Parallel index stat data preload? */
int core_preload_index = 0;
diff --git a/ll-merge.c b/ll-merge.c
index 28c6f54..8e59ea7 100644
--- a/ll-merge.c
+++ b/ll-merge.c
@@ -344,9 +344,11 @@ int ll_merge(mmbuffer_t *result_buf,
const struct ll_merge_driver *driver;
int virtual_ancestor = flag & 01;
- normalize_file(ancestor, path);
- normalize_file(ours, path);
- normalize_file(theirs, path);
+ if (core_merge_prefilter) {
+ normalize_file(ancestor, path);
+ normalize_file(ours, path);
+ normalize_file(theirs, path);
+ }
if (!git_path_check_merge(path, check)) {
ll_driver_name = check[0].value;
if (check[1].value) {
diff --git a/t/t6038-merge-text-auto.sh b/t/t6038-merge-text-auto.sh
index 44e6003..1f2b3a8 100755
--- a/t/t6038-merge-text-auto.sh
+++ b/t/t6038-merge-text-auto.sh
@@ -5,6 +5,7 @@ test_description='CRLF merge conflict across text=auto change'
. ./test-lib.sh
test_expect_success setup '
+ git config core.mergeprefilter true &&
git config core.autocrlf false &&
echo first line | append_cr >file &&
git add file &&
--
1.7.2.rc1.4.g09d06
next prev parent reply other threads:[~2010-07-01 9:10 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-01 9:09 [PATCH v5 0/4] Re-rolled merge normalization Eyvind Bernhardsen
2010-07-01 9:09 ` [PATCH v5 1/4] Avoid conflicts when merging branches with mixed normalization Eyvind Bernhardsen
2010-07-01 9:09 ` Eyvind Bernhardsen [this message]
2010-07-01 10:19 ` [PATCH v5 2/4] Introduce "double conversion during merge" more gradually Johannes Sixt
2010-07-01 16:25 ` Junio C Hamano
2010-07-01 16:41 ` Eyvind Bernhardsen
2010-07-01 17:05 ` Jakub Narebski
2010-07-01 18:57 ` Finn Arne Gangstad
2010-07-01 20:15 ` Jakub Narebski
2010-07-01 20:25 ` Eyvind Bernhardsen
2010-07-01 20:13 ` Eyvind Bernhardsen
2010-07-01 9:09 ` [PATCH v5 3/4] Try normalizing files to avoid delete/modify conflicts when merging Eyvind Bernhardsen
2010-07-01 9:09 ` [PATCH v5 4/4] Don't expand CRLFs when normalizing text during merge Eyvind Bernhardsen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3ae294ef30c3539da47d101bc39638e63721eb0e.1277974452.git.eyvind.bernhardsen@gmail.com \
--to=eyvind.bernhardsen@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).