@matheusbsbs / matheus-bagliano / commits / 2d48085661
Fork 0

[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>

Yann Dirson committed Feb 21, 2008 at 21:23 UTC 2d48085661e3f522904a10603e303dbec046a56f
1 file changed +40 -10
gitk
+40 -10
@@ -82,7 +82,7 @@ proc dorunq {} {
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,13 +90,23 @@ proc start_rev_list {view} {
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
@@ -1168,7 +1178,7 @@ proc savestuff {w} {
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
@@ -1207,7 +1217,7 @@ proc savestuff {w} {
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 "}"
@@ -1858,7 +1868,7 @@ proc shellsplit {str} {
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
@@ -1869,13 +1879,14 @@ proc newview {ishighlight} {
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]} {
@@ -1885,6 +1896,7 @@ proc editview {} {
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
@@ -1905,6 +1917,14 @@ proc vieweditor {top n title} {
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
@@ -1948,7 +1968,7 @@ proc allviewmenus {n op args} {
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)]
@@ -1972,6 +1992,7 @@ proc newviewok {top 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
@@ -1988,9 +2009,11 @@ proc newviewok {top 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 }
@@ -8530,8 +8553,9 @@ set mergeonly 0
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" {
@@ -8542,6 +8566,9 @@ foreach arg $argv {
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 }
@@ -8643,6 +8670,7 @@ set highlight_files {}
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
@@ -8658,7 +8686,7 @@ tkwait visibility .
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
@@ -8666,6 +8694,7 @@ if {$cmdline_files ne {} || $revtreeargs ne {}} {
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
@@ -8679,6 +8708,7 @@ if {[info exists permviews]} {
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 }