[PATCH] Add an --argscmd flag to get the list of refs to show
This allows gitk to be used to display a different set of refs each the display is refreshed. This is useful when gitk is called from other porcelain suites, for doing such things as displaying the set of patches in a patch stack. The user specifies a command as the argument to the --argscmd option. The command is run initially and each time the display is refreshed, and is expected to generate a list of commit IDs, one per line. Those commits are appended to the commits passed on the command-line when constructing the git log command to be executed. The command is considered to be an attribute of a view, and has its own field in the saved view, and an edit field in the view editor. Signed-off-by: Yann Dirson <ydirson@altern.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:

committed by
Paul Mackerras

parent
b9bee11526
commit
2d48085661
50
gitk
50
gitk
@ -82,7 +82,7 @@ proc dorunq {} {
|
|||||||
proc start_rev_list {view} {
|
proc start_rev_list {view} {
|
||||||
global startmsecs
|
global startmsecs
|
||||||
global commfd leftover tclencoding datemode
|
global commfd leftover tclencoding datemode
|
||||||
global viewargs viewfiles commitidx viewcomplete vnextroot
|
global viewargs viewargscmd viewfiles commitidx viewcomplete vnextroot
|
||||||
global showlocalchanges commitinterest mainheadid
|
global showlocalchanges commitinterest mainheadid
|
||||||
global progressdirn progresscoords proglastnc curview
|
global progressdirn progresscoords proglastnc curview
|
||||||
|
|
||||||
@ -90,13 +90,23 @@ proc start_rev_list {view} {
|
|||||||
set commitidx($view) 0
|
set commitidx($view) 0
|
||||||
set viewcomplete($view) 0
|
set viewcomplete($view) 0
|
||||||
set vnextroot($view) 0
|
set vnextroot($view) 0
|
||||||
|
set args $viewargs($view)
|
||||||
|
if {$viewargscmd($view) ne {}} {
|
||||||
|
if {[catch {
|
||||||
|
set str [exec sh -c $viewargscmd($view)]
|
||||||
|
} err]} {
|
||||||
|
error_popup "Error executing --argscmd command: $err"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
set args [concat $args [split $str "\n"]]
|
||||||
|
}
|
||||||
set order "--topo-order"
|
set order "--topo-order"
|
||||||
if {$datemode} {
|
if {$datemode} {
|
||||||
set order "--date-order"
|
set order "--date-order"
|
||||||
}
|
}
|
||||||
if {[catch {
|
if {[catch {
|
||||||
set fd [open [concat | git log --no-color -z --pretty=raw $order --parents \
|
set fd [open [concat | git log --no-color -z --pretty=raw $order --parents \
|
||||||
--boundary $viewargs($view) "--" $viewfiles($view)] r]
|
--boundary $args "--" $viewfiles($view)] r]
|
||||||
} err]} {
|
} err]} {
|
||||||
error_popup "[mc "Error executing git rev-list:"] $err"
|
error_popup "[mc "Error executing git rev-list:"] $err"
|
||||||
exit 1
|
exit 1
|
||||||
@ -1168,7 +1178,7 @@ proc savestuff {w} {
|
|||||||
global canv canv2 canv3 mainfont textfont uifont tabstop
|
global canv canv2 canv3 mainfont textfont uifont tabstop
|
||||||
global stuffsaved findmergefiles maxgraphpct
|
global stuffsaved findmergefiles maxgraphpct
|
||||||
global maxwidth showneartags showlocalchanges
|
global maxwidth showneartags showlocalchanges
|
||||||
global viewname viewfiles viewargs viewperm nextviewnum
|
global viewname viewfiles viewargs viewargscmd viewperm nextviewnum
|
||||||
global cmitmode wrapcomment datetimeformat limitdiffs
|
global cmitmode wrapcomment datetimeformat limitdiffs
|
||||||
global colors bgcolor fgcolor diffcolors diffcontext selectbgcolor
|
global colors bgcolor fgcolor diffcolors diffcontext selectbgcolor
|
||||||
|
|
||||||
@ -1207,7 +1217,7 @@ proc savestuff {w} {
|
|||||||
puts -nonewline $f "set permviews {"
|
puts -nonewline $f "set permviews {"
|
||||||
for {set v 0} {$v < $nextviewnum} {incr v} {
|
for {set v 0} {$v < $nextviewnum} {incr v} {
|
||||||
if {$viewperm($v)} {
|
if {$viewperm($v)} {
|
||||||
puts $f "{[list $viewname($v) $viewfiles($v) $viewargs($v)]}"
|
puts $f "{[list $viewname($v) $viewfiles($v) $viewargs($v) $viewargscmd($v)]}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
puts $f "}"
|
puts $f "}"
|
||||||
@ -1858,7 +1868,7 @@ proc shellsplit {str} {
|
|||||||
|
|
||||||
proc newview {ishighlight} {
|
proc newview {ishighlight} {
|
||||||
global nextviewnum newviewname newviewperm newishighlight
|
global nextviewnum newviewname newviewperm newishighlight
|
||||||
global newviewargs revtreeargs
|
global newviewargs revtreeargs viewargscmd newviewargscmd curview
|
||||||
|
|
||||||
set newishighlight $ishighlight
|
set newishighlight $ishighlight
|
||||||
set top .gitkview
|
set top .gitkview
|
||||||
@ -1869,13 +1879,14 @@ proc newview {ishighlight} {
|
|||||||
set newviewname($nextviewnum) "View $nextviewnum"
|
set newviewname($nextviewnum) "View $nextviewnum"
|
||||||
set newviewperm($nextviewnum) 0
|
set newviewperm($nextviewnum) 0
|
||||||
set newviewargs($nextviewnum) [shellarglist $revtreeargs]
|
set newviewargs($nextviewnum) [shellarglist $revtreeargs]
|
||||||
|
set newviewargscmd($nextviewnum) $viewargscmd($curview)
|
||||||
vieweditor $top $nextviewnum [mc "Gitk view definition"]
|
vieweditor $top $nextviewnum [mc "Gitk view definition"]
|
||||||
}
|
}
|
||||||
|
|
||||||
proc editview {} {
|
proc editview {} {
|
||||||
global curview
|
global curview
|
||||||
global viewname viewperm newviewname newviewperm
|
global viewname viewperm newviewname newviewperm
|
||||||
global viewargs newviewargs
|
global viewargs newviewargs viewargscmd newviewargscmd
|
||||||
|
|
||||||
set top .gitkvedit-$curview
|
set top .gitkvedit-$curview
|
||||||
if {[winfo exists $top]} {
|
if {[winfo exists $top]} {
|
||||||
@ -1885,6 +1896,7 @@ proc editview {} {
|
|||||||
set newviewname($curview) $viewname($curview)
|
set newviewname($curview) $viewname($curview)
|
||||||
set newviewperm($curview) $viewperm($curview)
|
set newviewperm($curview) $viewperm($curview)
|
||||||
set newviewargs($curview) [shellarglist $viewargs($curview)]
|
set newviewargs($curview) [shellarglist $viewargs($curview)]
|
||||||
|
set newviewargscmd($curview) $viewargscmd($curview)
|
||||||
vieweditor $top $curview "Gitk: edit view $viewname($curview)"
|
vieweditor $top $curview "Gitk: edit view $viewname($curview)"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1905,6 +1917,14 @@ proc vieweditor {top n title} {
|
|||||||
entry $top.args -width 50 -textvariable newviewargs($n) \
|
entry $top.args -width 50 -textvariable newviewargs($n) \
|
||||||
-background $bgcolor
|
-background $bgcolor
|
||||||
grid $top.args - -sticky ew -padx 5
|
grid $top.args - -sticky ew -padx 5
|
||||||
|
|
||||||
|
message $top.ac -aspect 1000 \
|
||||||
|
-text [mc "Command to generate more commits to include:"]
|
||||||
|
grid $top.ac - -sticky w -pady 5
|
||||||
|
entry $top.argscmd -width 50 -textvariable newviewargscmd($n) \
|
||||||
|
-background white
|
||||||
|
grid $top.argscmd - -sticky ew -padx 5
|
||||||
|
|
||||||
message $top.l -aspect 1000 \
|
message $top.l -aspect 1000 \
|
||||||
-text [mc "Enter files and directories to include, one per line:"]
|
-text [mc "Enter files and directories to include, one per line:"]
|
||||||
grid $top.l - -sticky w
|
grid $top.l - -sticky w
|
||||||
@ -1948,7 +1968,7 @@ proc allviewmenus {n op args} {
|
|||||||
proc newviewok {top n} {
|
proc newviewok {top n} {
|
||||||
global nextviewnum newviewperm newviewname newishighlight
|
global nextviewnum newviewperm newviewname newishighlight
|
||||||
global viewname viewfiles viewperm selectedview curview
|
global viewname viewfiles viewperm selectedview curview
|
||||||
global viewargs newviewargs viewhlmenu
|
global viewargs newviewargs viewargscmd newviewargscmd viewhlmenu
|
||||||
|
|
||||||
if {[catch {
|
if {[catch {
|
||||||
set newargs [shellsplit $newviewargs($n)]
|
set newargs [shellsplit $newviewargs($n)]
|
||||||
@ -1972,6 +1992,7 @@ proc newviewok {top n} {
|
|||||||
set viewperm($n) $newviewperm($n)
|
set viewperm($n) $newviewperm($n)
|
||||||
set viewfiles($n) $files
|
set viewfiles($n) $files
|
||||||
set viewargs($n) $newargs
|
set viewargs($n) $newargs
|
||||||
|
set viewargscmd($n) $newviewargscmd($n)
|
||||||
addviewmenu $n
|
addviewmenu $n
|
||||||
if {!$newishighlight} {
|
if {!$newishighlight} {
|
||||||
run showview $n
|
run showview $n
|
||||||
@ -1988,9 +2009,11 @@ proc newviewok {top n} {
|
|||||||
# doviewmenu $viewhlmenu 1 [list addvhighlight $n] \
|
# doviewmenu $viewhlmenu 1 [list addvhighlight $n] \
|
||||||
# entryconf [list -label $viewname($n) -value $viewname($n)]
|
# entryconf [list -label $viewname($n) -value $viewname($n)]
|
||||||
}
|
}
|
||||||
if {$files ne $viewfiles($n) || $newargs ne $viewargs($n)} {
|
if {$files ne $viewfiles($n) || $newargs ne $viewargs($n) || \
|
||||||
|
$newviewargscmd($n) ne $viewargscmd($n)} {
|
||||||
set viewfiles($n) $files
|
set viewfiles($n) $files
|
||||||
set viewargs($n) $newargs
|
set viewargs($n) $newargs
|
||||||
|
set viewargscmd($n) $newviewargscmd($n)
|
||||||
if {$curview == $n} {
|
if {$curview == $n} {
|
||||||
run updatecommits
|
run updatecommits
|
||||||
}
|
}
|
||||||
@ -8530,8 +8553,9 @@ set mergeonly 0
|
|||||||
set revtreeargs {}
|
set revtreeargs {}
|
||||||
set cmdline_files {}
|
set cmdline_files {}
|
||||||
set i 0
|
set i 0
|
||||||
|
set revtreeargscmd {}
|
||||||
foreach arg $argv {
|
foreach arg $argv {
|
||||||
switch -- $arg {
|
switch -glob -- $arg {
|
||||||
"" { }
|
"" { }
|
||||||
"-d" { set datemode 1 }
|
"-d" { set datemode 1 }
|
||||||
"--merge" {
|
"--merge" {
|
||||||
@ -8542,6 +8566,9 @@ foreach arg $argv {
|
|||||||
set cmdline_files [lrange $argv [expr {$i + 1}] end]
|
set cmdline_files [lrange $argv [expr {$i + 1}] end]
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
"--argscmd=*" {
|
||||||
|
set revtreeargscmd [string range $arg 10 end]
|
||||||
|
}
|
||||||
default {
|
default {
|
||||||
lappend revtreeargs $arg
|
lappend revtreeargs $arg
|
||||||
}
|
}
|
||||||
@ -8643,6 +8670,7 @@ set highlight_files {}
|
|||||||
set viewfiles(0) {}
|
set viewfiles(0) {}
|
||||||
set viewperm(0) 0
|
set viewperm(0) 0
|
||||||
set viewargs(0) {}
|
set viewargs(0) {}
|
||||||
|
set viewargscmd(0) {}
|
||||||
|
|
||||||
set cmdlineok 0
|
set cmdlineok 0
|
||||||
set stopped 0
|
set stopped 0
|
||||||
@ -8658,7 +8686,7 @@ tkwait visibility .
|
|||||||
wm title . "[file tail $argv0]: [file tail [pwd]]"
|
wm title . "[file tail $argv0]: [file tail [pwd]]"
|
||||||
readrefs
|
readrefs
|
||||||
|
|
||||||
if {$cmdline_files ne {} || $revtreeargs ne {}} {
|
if {$cmdline_files ne {} || $revtreeargs ne {} || $revtreeargscmd ne {}} {
|
||||||
# create a view for the files/dirs specified on the command line
|
# create a view for the files/dirs specified on the command line
|
||||||
set curview 1
|
set curview 1
|
||||||
set selectedview 1
|
set selectedview 1
|
||||||
@ -8666,6 +8694,7 @@ if {$cmdline_files ne {} || $revtreeargs ne {}} {
|
|||||||
set viewname(1) [mc "Command line"]
|
set viewname(1) [mc "Command line"]
|
||||||
set viewfiles(1) $cmdline_files
|
set viewfiles(1) $cmdline_files
|
||||||
set viewargs(1) $revtreeargs
|
set viewargs(1) $revtreeargs
|
||||||
|
set viewargscmd(1) $revtreeargscmd
|
||||||
set viewperm(1) 0
|
set viewperm(1) 0
|
||||||
addviewmenu 1
|
addviewmenu 1
|
||||||
.bar.view entryconf [mc "Edit view..."] -state normal
|
.bar.view entryconf [mc "Edit view..."] -state normal
|
||||||
@ -8679,6 +8708,7 @@ if {[info exists permviews]} {
|
|||||||
set viewname($n) [lindex $v 0]
|
set viewname($n) [lindex $v 0]
|
||||||
set viewfiles($n) [lindex $v 1]
|
set viewfiles($n) [lindex $v 1]
|
||||||
set viewargs($n) [lindex $v 2]
|
set viewargs($n) [lindex $v 2]
|
||||||
|
set viewargscmd($n) [lindex $v 3]
|
||||||
set viewperm($n) 1
|
set viewperm($n) 1
|
||||||
addviewmenu $n
|
addviewmenu $n
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user