Browse Source

gitk: Fix a couple more bugs in the path limiting

First, paths ending in a slash were not matching anything.  This fixes
path_filter to handle paths ending in a slash (such entries have to
match a directory, and can't match a file, e.g., foo/bar/ can't match
a plain file called foo/bar).

Secondly, clicking in the file list pane (bottom right) was broken
because $treediffs($ids) contained all the files modified by the
commit, not just those within the file list.  This fixes that too.

Signed-off-by: Paul Mackerras <paulus@samba.org>
maint
Paul Mackerras 18 years ago
parent
commit
74a40c7110
  1. 47
      gitk

47
gitk

@ -5023,28 +5023,25 @@ proc startdiff {ids} {
proc path_filter {filter name} { proc path_filter {filter name} {
foreach p $filter { foreach p $filter {
set l [string length $p] set l [string length $p]
if {[string compare -length $l $p $name] == 0 && if {[string index $p end] eq "/"} {
([string length $name] == $l || [string index $name $l] eq "/")} { if {[string compare -length $l $p $name] == 0} {
return 1 return 1
}
} else {
if {[string compare -length $l $p $name] == 0 &&
([string length $name] == $l ||
[string index $name $l] eq "/")} {
return 1
}
} }
} }
return 0 return 0
} }


proc addtocflist {ids} { proc addtocflist {ids} {
global treediffs cflist viewfiles curview limitdiffs global treediffs


if {$limitdiffs && $viewfiles($curview) ne {}} { add_flist $treediffs($ids)
set flist {}
foreach f $treediffs($ids) {
if {[path_filter $viewfiles($curview) $f]} {
lappend flist $f
}
}
} else {
set flist $treediffs($ids)
}
add_flist $flist
getblobdiffs $ids getblobdiffs $ids
} }


@ -5100,7 +5097,7 @@ proc gettreediffs {ids} {


proc gettreediffline {gdtf ids} { proc gettreediffline {gdtf ids} {
global treediff treediffs treepending diffids diffmergeid global treediff treediffs treepending diffids diffmergeid
global cmitmode global cmitmode viewfiles curview limitdiffs


set nr 0 set nr 0
while {[incr nr] <= 1000 && [gets $gdtf line] >= 0} { while {[incr nr] <= 1000 && [gets $gdtf line] >= 0} {
@ -5117,7 +5114,17 @@ proc gettreediffline {gdtf ids} {
return [expr {$nr >= 1000? 2: 1}] return [expr {$nr >= 1000? 2: 1}]
} }
close $gdtf close $gdtf
set treediffs($ids) $treediff if {$limitdiffs && $viewfiles($curview) ne {}} {
set flist {}
foreach f $treediff {
if {[path_filter $viewfiles($curview) $f]} {
lappend flist $f
}
}
set treediffs($ids) $flist
} else {
set treediffs($ids) $treediff
}
unset treepending unset treepending
if {$cmitmode eq "tree"} { if {$cmitmode eq "tree"} {
gettree $diffids gettree $diffids
@ -7565,7 +7572,7 @@ proc prefscan {} {
proc prefsok {} { proc prefsok {} {
global maxwidth maxgraphpct global maxwidth maxgraphpct
global oldprefs prefstop showneartags showlocalchanges global oldprefs prefstop showneartags showlocalchanges
global charspc ctext tabstop limitdiffs global charspc ctext tabstop limitdiffs treediffs


catch {destroy $prefstop} catch {destroy $prefstop}
unset prefstop unset prefstop
@ -7577,6 +7584,10 @@ proc prefsok {} {
dohidelocalchanges dohidelocalchanges
} }
} }
if {$limitdiffs != $oldprefs(limitdiffs)} {
# treediffs elements are limited by path
catch {unset treediffs}
}
if {$maxwidth != $oldprefs(maxwidth) if {$maxwidth != $oldprefs(maxwidth)
|| $maxgraphpct != $oldprefs(maxgraphpct)} { || $maxgraphpct != $oldprefs(maxgraphpct)} {
redisplay redisplay

Loading…
Cancel
Save