{"thread":{"id":"12247","subject":"[PATCH v5] Add to gitk an --argscmd flag to get the list of refs to draw at refresh time.","startedAt":"2008-02-21T20:23:31Z","lastAt":"2008-02-21T20:23:31Z","messageCount":1,"participants":["Yann Dirson"],"isPatch":true,"patchVersion":5,"patchTotal":null},"messages":[{"id":"69507","messageId":"20080221202121.22796.57651.stgit@gandelf.nowhere.earth","threadId":"12247","inReplyTo":null,"subject":"[PATCH v5] Add to gitk an --argscmd flag to get the list of refs to draw at refresh time.","fromName":"Yann Dirson","fromEmail":"ydirson@altern.org","sentAt":"2008-02-21T20:23:31Z","receivedAt":"2008-02-21T20:23:31Z","isPatch":true,"sender":{"key":"ydirson@altern.org","avatar":"https://avatars.githubusercontent.com/u/1190950?v=4"},"body":"This allows to display a set of refs, when the refs in the set may\nthemselves change between two refresh operations (eg. the set of\npatches in a patch stack), and is expected to be called from other\nporcelain suites.\n\nThe command is expected to generate a list of commits, which will be\nappended to the commits litterally passed on the command-line.  That\ncommand is handled similarly to the litteral refs, and has its own\nfield in the saved view, and an edit field in the view editor.\n\nSigned-off-by: Yann Dirson <ydirson@altern.org>\n---\n\nI assume you did not have time to review v4 of this patch at that time\n- here is an update, simply ported to master.  It works for me, let me\nknow if you have any remainging issues with it.\n\n\n Documentation/gitk.txt |    7 +++++++\n gitk-git/gitk          |   50 ++++++++++++++++++++++++++++++++++++++----------\n 2 files changed, 47 insertions(+), 10 deletions(-)\n mode change 100644 => 100755 gitk-git/gitk\n\n\ndiff --git a/Documentation/gitk.txt b/Documentation/gitk.txt\nindex 29edafc..2ac51bd 100644\n--- a/Documentation/gitk.txt\n+++ b/Documentation/gitk.txt\n@@ -41,6 +41,13 @@ frequently used options.\n \n \tShow all branches.\n \n+--argscmd=<command>::\n+\tCommand to be run each time gitk has to determine the list of\n+\t<revs> to show.  The command is expected to print on its standard\n+\toutput a list of additional revs to be shown, one per line.\n+\tUse this instead of explicitly specifying <revs> if the set of\n+\tcommits to show may vary between refreshes.\n+\n <revs>::\n \n \tLimit the revisions to show. This can be either a single revision\ndiff --git a/gitk-git/gitk b/gitk-git/gitk\nold mode 100644\nnew mode 100755\nindex f1f21e9..8ea89d2\n--- a/gitk-git/gitk\n+++ b/gitk-git/gitk\n@@ -82,7 +82,7 @@ proc dorunq {} {\n proc start_rev_list {view} {\n     global startmsecs\n     global commfd leftover tclencoding datemode\n-    global viewargs viewfiles commitidx viewcomplete vnextroot\n+    global viewargs viewargscmd viewfiles commitidx viewcomplete vnextroot\n     global showlocalchanges commitinterest mainheadid\n     global progressdirn progresscoords proglastnc curview\n \n@@ -90,13 +90,23 @@ proc start_rev_list {view} {\n     set commitidx($view) 0\n     set viewcomplete($view) 0\n     set vnextroot($view) 0\n+    set args $viewargs($view)\n+    if {$viewargscmd($view) ne {}} {\n+\tif {[catch {\n+\t    set str [exec sh -c $viewargscmd($view)]\n+\t} err]} {\n+\t    error_popup \"Error executing --argscmd command: $err\"\n+\t    exit 1\n+\t}\n+\tset args [concat $args [split $str \"\\n\"]]\n+    }\n     set order \"--topo-order\"\n     if {$datemode} {\n \tset order \"--date-order\"\n     }\n     if {[catch {\n \tset fd [open [concat | git log --no-color -z --pretty=raw $order --parents \\\n-\t\t\t --boundary $viewargs($view) \"--\" $viewfiles($view)] r]\n+\t\t\t --boundary $args \"--\" $viewfiles($view)] r]\n     } err]} {\n \terror_popup \"[mc \"Error executing git rev-list:\"] $err\"\n \texit 1\n@@ -1160,7 +1170,7 @@ proc savestuff {w} {\n     global canv canv2 canv3 mainfont textfont uifont tabstop\n     global stuffsaved findmergefiles maxgraphpct\n     global maxwidth showneartags showlocalchanges\n-    global viewname viewfiles viewargs viewperm nextviewnum\n+    global viewname viewfiles viewargs viewargscmd viewperm nextviewnum\n     global cmitmode wrapcomment datetimeformat limitdiffs\n     global colors bgcolor fgcolor diffcolors diffcontext selectbgcolor\n \n@@ -1199,7 +1209,7 @@ proc savestuff {w} {\n \tputs -nonewline $f \"set permviews {\"\n \tfor {set v 0} {$v < $nextviewnum} {incr v} {\n \t    if {$viewperm($v)} {\n-\t\tputs $f \"{[list $viewname($v) $viewfiles($v) $viewargs($v)]}\"\n+\t\tputs $f \"{[list $viewname($v) $viewfiles($v) $viewargs($v) $viewargscmd($v)]}\"\n \t    }\n \t}\n \tputs $f \"}\"\n@@ -1850,7 +1860,7 @@ proc shellsplit {str} {\n \n proc newview {ishighlight} {\n     global nextviewnum newviewname newviewperm newishighlight\n-    global newviewargs revtreeargs\n+    global newviewargs revtreeargs viewargscmd newviewargscmd curview\n \n     set newishighlight $ishighlight\n     set top .gitkview\n@@ -1861,13 +1871,14 @@ proc newview {ishighlight} {\n     set newviewname($nextviewnum) \"View $nextviewnum\"\n     set newviewperm($nextviewnum) 0\n     set newviewargs($nextviewnum) [shellarglist $revtreeargs]\n+    set newviewargscmd($nextviewnum) $viewargscmd($curview)\n     vieweditor $top $nextviewnum [mc \"Gitk view definition\"]\n }\n \n proc editview {} {\n     global curview\n     global viewname viewperm newviewname newviewperm\n-    global viewargs newviewargs\n+    global viewargs newviewargs viewargscmd newviewargscmd\n \n     set top .gitkvedit-$curview\n     if {[winfo exists $top]} {\n@@ -1877,6 +1888,7 @@ proc editview {} {\n     set newviewname($curview) $viewname($curview)\n     set newviewperm($curview) $viewperm($curview)\n     set newviewargs($curview) [shellarglist $viewargs($curview)]\n+    set newviewargscmd($curview) $viewargscmd($curview)\n     vieweditor $top $curview \"Gitk: edit view $viewname($curview)\"\n }\n \n@@ -1896,7 +1908,15 @@ proc vieweditor {top n title} {\n     grid $top.al - -sticky w -pady 5\n     entry $top.args -width 50 -textvariable newviewargs($n) \\\n \t-background $bgcolor\n+\n     grid $top.args - -sticky ew -padx 5\n+    message $top.ac -aspect 1000 \\\n+\t-text [mc \"Command to generate more commits to include:\"]\n+    grid $top.ac - -sticky w -pady 5\n+    entry $top.argscmd -width 50 -textvariable newviewargscmd($n) \\\n+\t-background white\n+\n+    grid $top.argscmd - -sticky ew -padx 5\n     message $top.l -aspect 1000 \\\n \t-text [mc \"Enter files and directories to include, one per line:\"]\n     grid $top.l - -sticky w\n@@ -1940,7 +1960,7 @@ proc allviewmenus {n op args} {\n proc newviewok {top n} {\n     global nextviewnum newviewperm newviewname newishighlight\n     global viewname viewfiles viewperm selectedview curview\n-    global viewargs newviewargs viewhlmenu\n+    global viewargs newviewargs viewargscmd newviewargscmd viewhlmenu\n \n     if {[catch {\n \tset newargs [shellsplit $newviewargs($n)]\n@@ -1964,6 +1984,7 @@ proc newviewok {top n} {\n \tset viewperm($n) $newviewperm($n)\n \tset viewfiles($n) $files\n \tset viewargs($n) $newargs\n+\tset viewargscmd($n) $newviewargscmd($n)\n \taddviewmenu $n\n \tif {!$newishighlight} {\n \t    run showview $n\n@@ -1980,9 +2001,11 @@ proc newviewok {top n} {\n \t    # doviewmenu $viewhlmenu 1 [list addvhighlight $n] \\\n \t\t# entryconf [list -label $viewname($n) -value $viewname($n)]\n \t}\n-\tif {$files ne $viewfiles($n) || $newargs ne $viewargs($n)} {\n+\tif {$files ne $viewfiles($n) || $newargs ne $viewargs($n) || \\\n+\t\t$newviewargscmd($n) ne $viewargscmd($n)} {\n \t    set viewfiles($n) $files\n \t    set viewargs($n) $newargs\n+\t    set viewargscmd($n) $newviewargscmd($n)\n \t    if {$curview == $n} {\n \t\trun updatecommits\n \t    }\n@@ -8522,8 +8545,9 @@ set mergeonly 0\n set revtreeargs {}\n set cmdline_files {}\n set i 0\n+set revtreeargscmd {}\n foreach arg $argv {\n-    switch -- $arg {\n+    switch -glob -- $arg {\n \t\"\" { }\n \t\"-d\" { set datemode 1 }\n \t\"--merge\" {\n@@ -8534,6 +8558,9 @@ foreach arg $argv {\n \t    set cmdline_files [lrange $argv [expr {$i + 1}] end]\n \t    break\n \t}\n+\t\"--argscmd=*\" {\n+\t    set revtreeargscmd [string range $arg 10 end]\n+\t}\n \tdefault {\n \t    lappend revtreeargs $arg\n \t}\n@@ -8635,6 +8662,7 @@ set highlight_files {}\n set viewfiles(0) {}\n set viewperm(0) 0\n set viewargs(0) {}\n+set viewargscmd(0) {}\n \n set cmdlineok 0\n set stopped 0\n@@ -8650,7 +8678,7 @@ tkwait visibility .\n wm title . \"[file tail $argv0]: [file tail [pwd]]\"\n readrefs\n \n-if {$cmdline_files ne {} || $revtreeargs ne {}} {\n+if {$cmdline_files ne {} || $revtreeargs ne {} || $revtreeargscmd ne {}} {\n     # create a view for the files/dirs specified on the command line\n     set curview 1\n     set selectedview 1\n@@ -8658,6 +8686,7 @@ if {$cmdline_files ne {} || $revtreeargs ne {}} {\n     set viewname(1) [mc \"Command line\"]\n     set viewfiles(1) $cmdline_files\n     set viewargs(1) $revtreeargs\n+    set viewargscmd(1) $revtreeargscmd\n     set viewperm(1) 0\n     addviewmenu 1\n     .bar.view entryconf [mc \"Edit view...\"] -state normal\n@@ -8671,6 +8700,7 @@ if {[info exists permviews]} {\n \tset viewname($n) [lindex $v 0]\n \tset viewfiles($n) [lindex $v 1]\n \tset viewargs($n) [lindex $v 2]\n+\tset viewargscmd($n) [lindex $v 3]\n \tset viewperm($n) 1\n \taddviewmenu $n\n     }\n"}]}