@matheusbsbs / matheus-bagliano / commits / 4590307a33
Fork 0

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 {