gitk: Make "touching paths" search support backslashes

Gitk can search for commits touching a specified path. The search text is always treated as a regular expression, regardless of the matching option selected (Exact, IgnCase, or Regexp). In particular, backslashes escape the next character. This is inconvenient on Windows systems, where backslashes are the norm for path specifiers, for example when copy/pasting from Windows Explorer or a cmd shell -- these copy-pasted paths must be manually modified in the gitk search text edit box before they will work. This change uses the match option "Exact" to mean that a slash is a slash, not part of a regular expression. Backslashes are converted to frontslashes before searching, thus allowing easy copy/pasting of paths on Windows systems. If the previous behaviour of "touching paths" search is desired, simply select the "Regexp" search mode. One potential drawback is that the default setting for the match option ($findtype in the code) is "Exact", and so this change alters the default behaviour, which may confuse users and lead to bug reports. Signed-off-by: Yggy King <yggy@zeroandone.ca> Signed-off-by: Paul Mackerras <paulus@samba.org>

Yggy King committed Jul 13, 2011 at 01:30 UTC de665fd3cfee674a62818246dfb158ecf81b2b76
1 file changed +6 -1
gitk
+6 -1
@@ -4522,9 +4522,14 @@ proc makepatterns {l} {
4522
4523 proc do_file_hl {serial} {
4524 global highlight_files filehighlight highlight_paths gdttype fhl_list
4525 - global cdup
4525 + global cdup findtype
4526
4527 if {$gdttype eq [mc "touching paths:"]} {
4528 + # If "exact" match then convert backslashes to forward slashes.
4529 + # Most useful to support Windows-flavoured file paths.
4530 + if {$findtype eq [mc "Exact"]} {
4531 + set highlight_files [string map {"\\" "/"} $highlight_files]
4532 + }
4533 if {[catch {set paths [shellsplit $highlight_files]}]} return
4534 set highlight_paths [makepatterns $paths]
4535 highlight_filelist