82
proc start_rev_list {view} {
83
global startmsecs
84
global commfd leftover tclencoding datemode
85
- global viewargs viewfiles commitidx viewcomplete vnextroot
85
+ global viewargs viewargscmd viewfiles commitidx viewcomplete vnextroot
86
global showlocalchanges commitinterest mainheadid
87
global progressdirn progresscoords proglastnc curview
88
90
set commitidx($view) 0
91
set viewcomplete($view) 0
92
set vnextroot($view) 0
93
+ set args $viewargs($view)
94
+ if {$viewargscmd($view) ne {}} {
95
+ if {[catch {
96
+ set str [exec sh -c $viewargscmd($view)]
97
+ } err]} {
98
+ error_popup "Error executing --argscmd command: $err"
99
+ exit 1
100
+ }
101
+ set args [concat $args [split $str "\n"]]
102
+ }
103
set order "--topo-order"
104
if {$datemode} {
105
set order "--date-order"
106
}
107
if {[catch {
108
set fd [open [concat | git log --no-color -z --pretty=raw $order --parents \
99
- --boundary $viewargs($view) "--" $viewfiles($view)] r]
109
+ --boundary $args "--" $viewfiles($view)] r]
110
} err]} {
111
error_popup "[mc "Error executing git rev-list:"] $err"
112
exit 1
1178
global canv canv2 canv3 mainfont textfont uifont tabstop
1179
global stuffsaved findmergefiles maxgraphpct
1180
global maxwidth showneartags showlocalchanges
1171
- global viewname viewfiles viewargs viewperm nextviewnum
1181
+ global viewname viewfiles viewargs viewargscmd viewperm nextviewnum
1182
global cmitmode wrapcomment datetimeformat limitdiffs
1183
global colors bgcolor fgcolor diffcolors diffcontext selectbgcolor
1184
1217
puts -nonewline $f "set permviews {"
1218
for {set v 0} {$v < $nextviewnum} {incr v} {
1219
if {$viewperm($v)} {
1210
- puts $f "{[list $viewname($v) $viewfiles($v) $viewargs($v)]}"
1220
+ puts $f "{[list $viewname($v) $viewfiles($v) $viewargs($v) $viewargscmd($v)]}"
1221
}
1222
}
1223
puts $f "}"
1868
1869
proc newview {ishighlight} {
1870
global nextviewnum newviewname newviewperm newishighlight
1861
- global newviewargs revtreeargs
1871
+ global newviewargs revtreeargs viewargscmd newviewargscmd curview
1872
1873
set newishighlight $ishighlight
1874
set top .gitkview
1879
set newviewname($nextviewnum) "View $nextviewnum"
1880
set newviewperm($nextviewnum) 0
1881
set newviewargs($nextviewnum) [shellarglist $revtreeargs]
1882
+ set newviewargscmd($nextviewnum) $viewargscmd($curview)
1883
vieweditor $top $nextviewnum [mc "Gitk view definition"]
1884
}
1885
1886
proc editview {} {
1887
global curview
1888
global viewname viewperm newviewname newviewperm
1878
- global viewargs newviewargs
1889
+ global viewargs newviewargs viewargscmd newviewargscmd
1890
1891
set top .gitkvedit-$curview
1892
if {[winfo exists $top]} {
1896
set newviewname($curview) $viewname($curview)
1897
set newviewperm($curview) $viewperm($curview)
1898
set newviewargs($curview) [shellarglist $viewargs($curview)]
1899
+ set newviewargscmd($curview) $viewargscmd($curview)
1900
vieweditor $top $curview "Gitk: edit view $viewname($curview)"
1901
}
1902
1917
entry $top.args -width 50 -textvariable newviewargs($n) \
1918
-background $bgcolor
1919
grid $top.args - -sticky ew -padx 5
1920
+
1921
+ message $top.ac -aspect 1000 \
1922
+ -text [mc "Command to generate more commits to include:"]
1923
+ grid $top.ac - -sticky w -pady 5
1924
+ entry $top.argscmd -width 50 -textvariable newviewargscmd($n) \
1925
+ -background white
1926
+ grid $top.argscmd - -sticky ew -padx 5
1927
+
1928
message $top.l -aspect 1000 \
1929
-text [mc "Enter files and directories to include, one per line:"]
1930
grid $top.l - -sticky w
1968
proc newviewok {top n} {
1969
global nextviewnum newviewperm newviewname newishighlight
1970
global viewname viewfiles viewperm selectedview curview
1951
- global viewargs newviewargs viewhlmenu
1971
+ global viewargs newviewargs viewargscmd newviewargscmd viewhlmenu
1972
1973
if {[catch {
1974
set newargs [shellsplit $newviewargs($n)]
1992
set viewperm($n) $newviewperm($n)
1993
set viewfiles($n) $files
1994
set viewargs($n) $newargs
1995
+ set viewargscmd($n) $newviewargscmd($n)
1996
addviewmenu $n
1997
if {!$newishighlight} {
1998
run showview $n
2009
# doviewmenu $viewhlmenu 1 [list addvhighlight $n] \
2010
# entryconf [list -label $viewname($n) -value $viewname($n)]
2011
}
1991
- if {$files ne $viewfiles($n) || $newargs ne $viewargs($n)} {
2012
+ if {$files ne $viewfiles($n) || $newargs ne $viewargs($n) || \
2013
+ $newviewargscmd($n) ne $viewargscmd($n)} {
2014
set viewfiles($n) $files
2015
set viewargs($n) $newargs
2016
+ set viewargscmd($n) $newviewargscmd($n)
2017
if {$curview == $n} {
2018
run updatecommits
2019
}
8553
set revtreeargs {}
8554
set cmdline_files {}
8555
set i 0
8556
+set revtreeargscmd {}
8557
foreach arg $argv {
8534
- switch -- $arg {
8558
+ switch -glob -- $arg {
8559
"" { }
8560
"-d" { set datemode 1 }
8561
"--merge" {
8566
set cmdline_files [lrange $argv [expr {$i + 1}] end]
8567
break
8568
}
8569
+ "--argscmd=*" {
8570
+ set revtreeargscmd [string range $arg 10 end]
8571
+ }
8572
default {
8573
lappend revtreeargs $arg
8574
}
8670
set viewfiles(0) {}
8671
set viewperm(0) 0
8672
set viewargs(0) {}
8673
+set viewargscmd(0) {}
8674
8675
set cmdlineok 0
8676
set stopped 0
8686
wm title . "[file tail $argv0]: [file tail [pwd]]"
8687
readrefs
8688
8661
-if {$cmdline_files ne {} || $revtreeargs ne {}} {
8689
+if {$cmdline_files ne {} || $revtreeargs ne {} || $revtreeargscmd ne {}} {
8690
# create a view for the files/dirs specified on the command line
8691
set curview 1
8692
set selectedview 1
8694
set viewname(1) [mc "Command line"]
8695
set viewfiles(1) $cmdline_files
8696
set viewargs(1) $revtreeargs
8697
+ set viewargscmd(1) $revtreeargscmd
8698
set viewperm(1) 0
8699
addviewmenu 1
8700
.bar.view entryconf [mc "Edit view..."] -state normal
8708
set viewname($n) [lindex $v 0]
8709
set viewfiles($n) [lindex $v 1]
8710
set viewargs($n) [lindex $v 2]
8711
+ set viewargscmd($n) [lindex $v 3]
8712
set viewperm($n) 1
8713
addviewmenu $n
8714
}