git-gui: respect conflict marker size
Respect the conflict-marker-size attribute on paths when detecting merge conflicts. [PT: fixed problem with variable substitution in the regexps] Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com> Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
Bert Wesarg committed
Nov 16, 2010 at 10:21 UTC
4590307a338b1a4912c7a203c71af8b8995ea885
2 files changed
+25
-7
git-gui.sh
+3
-3
@@ -3351,13 +3351,13 @@ $ui_diff tag conf d_s- \
3351
-foreground red \
3352
-background ivory1
3353
3354
-$ui_diff tag conf d<<<<<<< \
3354
+$ui_diff tag conf d< \
3355
-foreground orange \
3356
-font font_diffbold
3357
-$ui_diff tag conf d======= \
3357
+$ui_diff tag conf d= \
3358
-foreground orange \
3359
-font font_diffbold
3360
-$ui_diff tag conf d>>>>>>> \
3360
+$ui_diff tag conf d> \
3361
-foreground orange \
3362
-font font_diffbold
3363
lib/diff.tcl
+22
-4
@@ -253,6 +253,19 @@ proc show_other_diff {path w m cont_info} {
253
}
254
}
255
256
+proc get_conflict_marker_size {path} {
257
+ set size 7
258
+ catch {
259
+ set fd_rc [eval [list git_read check-attr "conflict-marker-size" -- $path]]
260
+ set ret [gets $fd_rc line]
261
+ close $fd_rc
262
+ if {$ret > 0} {
263
+ regexp {.*: conflict-marker-size: (\d+)$} $line line size
264
+ }
265
+ }
266
+ return $size
267
+}
268
+
269
proc start_show_diff {cont_info {add_opts {}}} {
270
global file_states file_lists
271
global is_3way_diff is_submodule_diff diff_active repo_config
@@ -268,6 +281,7 @@ proc start_show_diff {cont_info {add_opts {}}} {
281
set is_submodule_diff 0
282
set diff_active 1
283
set current_diff_header {}
284
+ set conflict_size [get_conflict_marker_size $path]
285
286
set cmd [list]
287
if {$w eq $ui_index} {
@@ -329,7 +343,7 @@ proc start_show_diff {cont_info {add_opts {}}} {
343
-blocking 0 \
344
-encoding [get_path_encoding $path] \
345
-translation lf
332
- fileevent $fd readable [list read_diff $fd $cont_info]
346
+ fileevent $fd readable [list read_diff $fd $conflict_size $cont_info]
347
}
348
349
proc parse_color_line {line} {
@@ -357,7 +371,7 @@ proc parse_color_line {line} {
371
return [list $result $markup]
372
}
373
360
-proc read_diff {fd cont_info} {
374
+proc read_diff {fd conflict_size cont_info} {
375
global ui_diff diff_active is_submodule_diff
376
global is_3way_diff is_conflict_diff current_diff_header
377
global current_diff_queue
@@ -410,7 +424,9 @@ proc read_diff {fd cont_info} {
424
{- } {set tags d_-s}
425
{--} {set tags d_--}
426
{++} {
413
- if {[regexp {^\+\+([<>]{7} |={7})} $line _g op]} {
427
+ set regexp [string map [list %conflict_size $conflict_size]\
428
+ {^\+\+([<>=]){%conflict_size}(?: |$)}]
429
+ if {[regexp $regexp $line _g op]} {
430
set is_conflict_diff 1
431
set line [string replace $line 0 1 { }]
432
set tags d$op
@@ -449,7 +465,9 @@ proc read_diff {fd cont_info} {
465
{@} {set tags d_@}
466
{-} {set tags d_-}
467
{+} {
452
- if {[regexp {^\+([<>]{7} |={7})} $line _g op]} {
468
+ set regexp [string map [list %conflict_size $conflict_size]\
469
+ {^\+([<>=]){%conflict_size}(?: |$)}]
470
+ if {[regexp $regexp $line _g op]} {
471
set is_conflict_diff 1
472
set tags d$op
473
} else {