{"thread":{"id":"1882","subject":"[PATCH] gitk: add Update menu item.","startedAt":"2005-09-20T12:24:23Z","lastAt":"2005-09-22T13:30:49Z","messageCount":4,"participants":["Sven Verdoolaege","Paul Mackerras"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"8986","messageId":"20050920122423.GA4228MdfPADPa@greensroom.kotnet.org","threadId":"1882","inReplyTo":null,"subject":"[PATCH] gitk: add Update menu item.","fromName":"Sven Verdoolaege","fromEmail":"skimo@kotnet.org","sentAt":"2005-09-20T12:24:23Z","receivedAt":"2005-09-20T12:24:23Z","isPatch":true,"sender":{"key":"skimo@kotnet.org","avatar":null},"body":"Update will redraw the commits if any commits have been added to any\nof the selected heads.  The new commits appear on the top.\n\nSigned-off-by: Sven Verdoolaege <skimo@kotnet.org>\n\n---\n\n gitk |   91 +++++++++++++++++++++++++++++++++++++++++++++++++++++-------------\n 1 files changed, 73 insertions(+), 18 deletions(-)\n\n7f319aaadb801da3bccd7b78d372f03e09575b47\ndiff --git a/gitk b/gitk\n--- a/gitk\n+++ b/gitk\n@@ -16,8 +16,22 @@ proc gitdir {} {\n     }\n }\n \n+proc parse_args {rargs} {\n+    if [catch {\n+\tset parse_args [concat --default HEAD $rargs]\n+\tset parsed_args [split [eval exec git-rev-parse $parse_args] \"\\n\"]\n+    }] {\n+\t# if git-rev-parse failed for some reason...\n+\tif {$rargs == {}} {\n+\t    set rargs HEAD\n+\t}\n+\tset parsed_args $rargs\n+    }\n+    return $parsed_args\n+}\n+\n proc getcommits {rargs} {\n-    global commits commfd phase canv mainfont env\n+    global oldcommits commits commfd phase canv mainfont env\n     global startmsecs nextupdate ncmupdate\n     global ctext maincursor textcursor leftover\n \n@@ -27,21 +41,13 @@ proc getcommits {rargs} {\n \terror_popup \"Cannot find the git directory \\\"$gitdir\\\".\"\n \texit 1\n     }\n+    set oldcommits {}\n     set commits {}\n     set phase getcommits\n     set startmsecs [clock clicks -milliseconds]\n     set nextupdate [expr $startmsecs + 100]\n     set ncmupdate 1\n-    if [catch {\n-\tset parse_args [concat --default HEAD $rargs]\n-\tset parsed_args [split [eval exec git-rev-parse $parse_args] \"\\n\"]\n-    }] {\n-\t# if git-rev-parse failed for some reason...\n-\tif {$rargs == {}} {\n-\t    set rargs HEAD\n-\t}\n-\tset parsed_args $rargs\n-    }\n+    set parsed_args [parse_args $rargs]\n     if [catch {\n \tset commfd [open \"|git-rev-list --header --topo-order --parents $parsed_args\" r]\n     } err] {\n@@ -59,7 +65,7 @@ proc getcommits {rargs} {\n }\n \n proc getcommitlines {commfd}  {\n-    global commits parents cdate children\n+    global oldcommits commits parents cdate children\n     global commitlisted phase commitinfo nextupdate\n     global stopped redisplaying leftover\n \n@@ -119,6 +125,11 @@ to allow selection of commits to be disp\n \tset id [lindex $ids 0]\n \tset olds [lrange $ids 1 end]\n \tset cmit [string range $cmit [expr {$j + 1}] end]\n+\tif {$phase == \"updatecommits\"} {\n+\t    set oldcommits $commits\n+\t    set commits {}\n+\t    set phase getcommits\n+\t}\n \tlappend commits $id\n \tset commitlisted($id) 1\n \tparsecommit $id $cmit 1 [lrange $ids 1 end]\n@@ -324,7 +335,7 @@ proc error_popup msg {\n     tkwait window $w\n }\n \n-proc makewindow {} {\n+proc makewindow {rargs} {\n     global canv canv2 canv3 linespc charspc ctext cflist textfont\n     global findtype findtypemenu findloc findstring fstring geometry\n     global entries sha1entry sha1string sha1but\n@@ -334,6 +345,7 @@ proc makewindow {} {\n     menu .bar\n     .bar add cascade -label \"File\" -menu .bar.file\n     menu .bar.file\n+    .bar.file add command -label \"Update\" -command \"updatecommits [list $rargs]\"\n     .bar.file add command -label \"Reread references\" -command rereadrefs\n     .bar.file add command -label \"Quit\" -command doquit\n     menu .bar.help\n@@ -1470,16 +1482,22 @@ proc drawcommit {id} {\n }\n \n proc finishcommits {} {\n-    global phase\n+    global phase oldcommits\n     global canv mainfont ctext maincursor textcursor\n \n-    if {$phase != \"incrdraw\"} {\n+    if {$phase == \"incrdraw\"} {\n+\tforeach id $oldcommits {\n+\t    drawcommit $id\n+\t}\n+\tset oldcommits {}\n+\tdrawrest\n+    } elseif {$phase == \"updatecommits\"} {\n+\tset phase {}\n+    } else {\n \t$canv delete all\n \t$canv create text 3 3 -anchor nw -text \"No commits selected\" \\\n \t    -font $mainfont -tags textitems\n \tset phase {}\n-    } else {\n-\tdrawrest\n     }\n     . config -cursor $maincursor\n     settextcursor $textcursor\n@@ -3617,6 +3635,43 @@ proc rereadrefs {} {\n     }\n }\n \n+proc updatecommits {rargs} {\n+    global phase\n+    global startmsecs nextupdate ncmupdate\n+    global idtags idheads idotherrefs\n+    global leftover\n+\n+    set refids [concat [array names idtags] \\\n+\t\t    [array names idheads] [array names idotherrefs]]\n+    foreach id $refids {\n+\tif {[info exists ref($id)]} continue\n+\tset ref($id) $id\n+\tlappend ignore \"^$id\"\n+    }\n+    set parsed_args {}\n+    foreach a [parse_args $rargs] {\n+\tif {![info exists ref($a)]} {\n+\t    lappend parsed_args $a\n+\t}\n+    }\n+    rereadrefs\n+    if [catch {\n+\tset commfd [open \"|git-rev-list --header --topo-order --parents $parsed_args $ignore\" r]\n+    } err] {\n+\tputs stderr \"Error executing git-rev-list: $err\"\n+\texit 1\n+    }\n+    set phase updatecommits\n+    set startmsecs [clock clicks -milliseconds]\n+    set nextupdate [expr $startmsecs + 100]\n+    set ncmupdate 1\n+    set leftover {}\n+    fconfigure $commfd -blocking 0 -translation lf\n+    fileevent $commfd readable [list getcommitlines $commfd]\n+    . config -cursor watch\n+    settextcursor watch\n+}\n+\n proc showtag {tag isnew} {\n     global ctext cflist tagcontents tagids linknum\n \n@@ -3684,6 +3739,6 @@ set redisplaying 0\n set stuffsaved 0\n set patchnum 0\n setcoords\n-makewindow\n+makewindow $revtreeargs\n readrefs\n getcommits $revtreeargs\n"},{"id":"8993","messageId":"20050920145658.GA13292MdfPADPa@greensroom.kotnet.org","threadId":"1882","inReplyTo":"20050920122423.GA4228MdfPADPa@greensroom.kotnet.org","subject":"Re: [PATCH] gitk: add Update menu item.","fromName":"Sven Verdoolaege","fromEmail":"skimo@kotnet.org","sentAt":"2005-09-20T14:56:58Z","receivedAt":"2005-09-20T14:56:58Z","isPatch":true,"sender":{"key":"skimo@kotnet.org","avatar":null},"body":"On Tue, Sep 20, 2005 at 02:24:23PM +0200, Sven Verdoolaege wrote:\n> Update will redraw the commits if any commits have been added to any\n> of the selected heads.  The new commits appear on the top.\n> \n\nIt appears I sent this patch to soon.\nWith the additional patch below, it seems to work,\nthat is, it survives a rebase.\n\nI can send a replacement patch combining the two patches if\nanyone is interested.\n\nskimo\n\ndiff --git a/gitk b/gitk\n--- a/gitk\n+++ b/gitk\n@@ -68,6 +68,7 @@ proc getcommitlines {commfd}  {\n     global oldcommits commits parents cdate children\n     global commitlisted phase commitinfo nextupdate\n     global stopped redisplaying leftover\n+    global canv\n \n     set stuff [read $commfd]\n     if {$stuff == {}} {\n@@ -126,6 +127,7 @@ to allow selection of commits to be disp\n \tset olds [lrange $ids 1 end]\n \tset cmit [string range $cmit [expr {$j + 1}] end]\n \tif {$phase == \"updatecommits\"} {\n+\t    $canv delete all\n \t    set oldcommits $commits\n \t    set commits {}\n \t    set phase getcommits\n@@ -133,7 +135,7 @@ to allow selection of commits to be disp\n \tlappend commits $id\n \tset commitlisted($id) 1\n \tparsecommit $id $cmit 1 [lrange $ids 1 end]\n-\tdrawcommit $id\n+\tdrawcommit $id 1\n \tif {[clock clicks -milliseconds] >= $nextupdate} {\n \t    doupdate 1\n \t}\n@@ -143,7 +145,7 @@ to allow selection of commits to be disp\n \t\tset stopped 0\n \t\tset phase \"getcommits\"\n \t\tforeach id $commits {\n-\t\t    drawcommit $id\n+\t\t    drawcommit $id 1\n \t\t    if {$stopped} break\n \t\t    if {[clock clicks -milliseconds] >= $nextupdate} {\n \t\t\tdoupdate 1\n@@ -1449,7 +1451,7 @@ proc decidenext {{noread 0}} {\n     return $level\n }\n \n-proc drawcommit {id} {\n+proc drawcommit {id reading} {\n     global phase todo nchildren datemode nextupdate\n     global numcommits ncmupdate displayorder todo onscreen\n \n@@ -1478,7 +1480,7 @@ proc drawcommit {id} {\n \t    break\n \t}\n     }\n-    drawmore 1\n+    drawmore $reading\n }\n \n proc finishcommits {} {\n@@ -1487,7 +1489,7 @@ proc finishcommits {} {\n \n     if {$phase == \"incrdraw\"} {\n \tforeach id $oldcommits {\n-\t    drawcommit $id\n+\t    drawcommit $id 0\n \t}\n \tset oldcommits {}\n \tdrawrest\n@@ -3636,7 +3638,7 @@ proc rereadrefs {} {\n }\n \n proc updatecommits {rargs} {\n-    global phase\n+    global commfd phase\n     global startmsecs nextupdate ncmupdate\n     global idtags idheads idotherrefs\n     global leftover\n"},{"id":"9080","messageId":"17201.61667.465005.53654@cargo.ozlabs.ibm.com","threadId":"1882","inReplyTo":"20050920122423.GA4228MdfPADPa@greensroom.kotnet.org","subject":"Re: [PATCH] gitk: add Update menu item.","fromName":"Paul Mackerras","fromEmail":"paulus@samba.org","sentAt":"2005-09-21T23:46:43Z","receivedAt":"2005-09-21T23:46:43Z","isPatch":true,"sender":{"key":"paulus@samba.org","avatar":"https://avatars.githubusercontent.com/u/1606439?v=4"},"body":"Sven Verdoolaege writes:\n\n> Update will redraw the commits if any commits have been added to any\n> of the selected heads.  The new commits appear on the top.\n\nI like the idea but I am not sure if you have implemented it the best\nway.\n\nAre we sure that all the commits we had before doing the update will\nstill be there after the update?  What if I had checked in some\nchanges and run gitk, and then decided that the commit I just created\nwas wrong, and so I set HEAD to HEAD^1 and did a git prune, then told\ngitk to update - shouldn't I see the top commit disappear?\n\nMaybe it would be better to just clean out everything and re-read all\nthe commits from scratch.\n\nAlso, I'm not convinced that doing ^$id for all tags, heads and other\nrefs is correct.  Although we have read the reference and know the ID,\nthat doesn't mean we have seen that commit and displayed it.\n\nThe more general problem is to provide a way for the user to change\nthe set of commits displayed using a dialog box.  That would require\ngitk to understand its command-line arguments so that the elements of\nthe dialog box could be initialized properly, though.\n\nSome other comments:\n\n> +    .bar.file add command -label \"Update\" -command \"updatecommits [list $rargs]\"\n\nThis would be better as:\n\n    .bar.file add command -label \"Update\" -command [list updatecommits $rargs]\n\n> +    rereadrefs\n\nWe don't need the redrawing part of rereadrefs, just the bit that\nunsets tagids etc. and calls readrefs.\n\nRegards,\nPaul.\n"},{"id":"9110","messageId":"20050922133049.GV15165MdfPADPa@greensroom.kotnet.org","threadId":"1882","inReplyTo":"17201.61667.465005.53654@cargo.ozlabs.ibm.com","subject":"Re: [PATCH] gitk: add Update menu item.","fromName":"Sven Verdoolaege","fromEmail":"skimo@kotnet.org","sentAt":"2005-09-22T13:30:49Z","receivedAt":"2005-09-22T13:30:49Z","isPatch":true,"sender":{"key":"skimo@kotnet.org","avatar":null},"body":"On Thu, Sep 22, 2005 at 09:46:43AM +1000, Paul Mackerras wrote:\n> Also, I'm not convinced that doing ^$id for all tags, heads and other\n> refs is correct.  Although we have read the reference and know the ID,\n> that doesn't mean we have seen that commit and displayed it.\n\nYou're right.  I typically use \"--all\", but obviously you don't have to.\n\n> The more general problem is to provide a way for the user to change\n> the set of commits displayed using a dialog box.  That would require\n> gitk to understand its command-line arguments so that the elements of\n> the dialog box could be initialized properly, though.\n\nI'll leave that to you.\n\nThe patch below should address your other concerns.\n\nBtw, are you still maintaining dirdiff ?\nI really like it, but apparently I'm the only one on this list.\n\nskimo\n--\ngitk: add Update menu item.\n\nUpdate will redraw the commits if any commits have been added to any\nof the selected heads.  The new commits appear on the top.\n\nSigned-off-by: Sven Verdoolaege <skimo@kotnet.org>\n\n---\ncommit c9b43cd506daf3884cf3ea8ef4fb75f4d010ddc7\ntree c838aa39f51a05c1de8da7a0fd648a78b425b38b\nparent acfadcfb48e34fdc441e9cffbb385fce9693b363\nauthor Sven Verdoolaege <skimo@kotnet.org> Thu, 22 Sep 2005 15:27:19 +0200\ncommitter Sven Verdoolaege <skimo@kotnet.org> Thu, 22 Sep 2005 15:27:19 +0200\n\n gitk |  175 +++++++++++++++++++++++++++++++++++++++++++++++++++++-------------\n 1 files changed, 141 insertions(+), 34 deletions(-)\n\ndiff --git a/gitk b/gitk\n--- a/gitk\n+++ b/gitk\n@@ -16,8 +16,24 @@ proc gitdir {} {\n     }\n }\n \n+proc parse_args {rargs} {\n+    global parsed_args\n+\n+    if [catch {\n+\tset parse_args [concat --default HEAD $rargs]\n+\tset parsed_args [split [eval exec git-rev-parse $parse_args] \"\\n\"]\n+    }] {\n+\t# if git-rev-parse failed for some reason...\n+\tif {$rargs == {}} {\n+\t    set rargs HEAD\n+\t}\n+\tset parsed_args $rargs\n+    }\n+    return $parsed_args\n+}\n+\n proc getcommits {rargs} {\n-    global commits commfd phase canv mainfont env\n+    global oldcommits commits commfd phase canv mainfont env\n     global startmsecs nextupdate ncmupdate\n     global ctext maincursor textcursor leftover\n \n@@ -27,21 +43,13 @@ proc getcommits {rargs} {\n \terror_popup \"Cannot find the git directory \\\"$gitdir\\\".\"\n \texit 1\n     }\n+    set oldcommits {}\n     set commits {}\n     set phase getcommits\n     set startmsecs [clock clicks -milliseconds]\n     set nextupdate [expr $startmsecs + 100]\n     set ncmupdate 1\n-    if [catch {\n-\tset parse_args [concat --default HEAD $rargs]\n-\tset parsed_args [split [eval exec git-rev-parse $parse_args] \"\\n\"]\n-    }] {\n-\t# if git-rev-parse failed for some reason...\n-\tif {$rargs == {}} {\n-\t    set rargs HEAD\n-\t}\n-\tset parsed_args $rargs\n-    }\n+    set parsed_args [parse_args $rargs]\n     if [catch {\n \tset commfd [open \"|git-rev-list --header --topo-order --parents $parsed_args\" r]\n     } err] {\n@@ -59,9 +67,10 @@ proc getcommits {rargs} {\n }\n \n proc getcommitlines {commfd}  {\n-    global commits parents cdate children\n+    global oldcommits commits parents cdate children nchildren\n     global commitlisted phase commitinfo nextupdate\n     global stopped redisplaying leftover\n+    global canv\n \n     set stuff [read $commfd]\n     if {$stuff == {}} {\n@@ -119,10 +128,18 @@ to allow selection of commits to be disp\n \tset id [lindex $ids 0]\n \tset olds [lrange $ids 1 end]\n \tset cmit [string range $cmit [expr {$j + 1}] end]\n+\tif {$phase == \"updatecommits\"} {\n+\t    $canv delete all\n+\t    set oldcommits $commits\n+\t    set commits {}\n+\t    unset children\n+\t    unset nchildren\n+\t    set phase getcommits\n+\t}\n \tlappend commits $id\n \tset commitlisted($id) 1\n \tparsecommit $id $cmit 1 [lrange $ids 1 end]\n-\tdrawcommit $id\n+\tdrawcommit $id 1\n \tif {[clock clicks -milliseconds] >= $nextupdate} {\n \t    doupdate 1\n \t}\n@@ -132,7 +149,7 @@ to allow selection of commits to be disp\n \t\tset stopped 0\n \t\tset phase \"getcommits\"\n \t\tforeach id $commits {\n-\t\t    drawcommit $id\n+\t\t    drawcommit $id 1\n \t\t    if {$stopped} break\n \t\t    if {[clock clicks -milliseconds] >= $nextupdate} {\n \t\t\tdoupdate 1\n@@ -168,16 +185,9 @@ proc readcommit {id} {\n     parsecommit $id $contents 0 {}\n }\n \n-proc parsecommit {id contents listed olds} {\n-    global commitinfo children nchildren parents nparents cdate ncleft\n+proc updatechildren {id olds} {\n+    global children nchildren parents nparents ncleft\n \n-    set inhdr 1\n-    set comment {}\n-    set headline {}\n-    set auname {}\n-    set audate {}\n-    set comname {}\n-    set comdate {}\n     if {![info exists nchildren($id)]} {\n \tset children($id) {}\n \tset nchildren($id) 0\n@@ -196,6 +206,19 @@ proc parsecommit {id contents listed old\n \t    incr ncleft($p)\n \t}\n     }\n+}\n+\n+proc parsecommit {id contents listed olds} {\n+    global commitinfo cdate\n+\n+    set inhdr 1\n+    set comment {}\n+    set headline {}\n+    set auname {}\n+    set audate {}\n+    set comname {}\n+    set comdate {}\n+    updatechildren $id $olds\n     foreach line [split $contents \"\\n\"] {\n \tif {$inhdr} {\n \t    if {$line == {}} {\n@@ -240,6 +263,9 @@ proc parsecommit {id contents listed old\n proc readrefs {} {\n     global tagids idtags headids idheads tagcontents\n \n+    foreach v {tagids idtags headids idheads otherrefids idotherrefs} {\n+\tcatch {unset $v}\n+    }\n     set tags [glob -nocomplain -types f [gitdir]/refs/tags/*]\n     foreach f $tags {\n \tcatch {\n@@ -324,7 +350,7 @@ proc error_popup msg {\n     tkwait window $w\n }\n \n-proc makewindow {} {\n+proc makewindow {rargs} {\n     global canv canv2 canv3 linespc charspc ctext cflist textfont\n     global findtype findtypemenu findloc findstring fstring geometry\n     global entries sha1entry sha1string sha1but\n@@ -334,6 +360,7 @@ proc makewindow {} {\n     menu .bar\n     .bar add cascade -label \"File\" -menu .bar.file\n     menu .bar.file\n+    .bar.file add command -label \"Update\" -command [list updatecommits $rargs]\n     .bar.file add command -label \"Reread references\" -command rereadrefs\n     .bar.file add command -label \"Quit\" -command doquit\n     menu .bar.help\n@@ -1437,7 +1464,7 @@ proc decidenext {{noread 0}} {\n     return $level\n }\n \n-proc drawcommit {id} {\n+proc drawcommit {id reading} {\n     global phase todo nchildren datemode nextupdate\n     global numcommits ncmupdate displayorder todo onscreen\n \n@@ -1466,20 +1493,29 @@ proc drawcommit {id} {\n \t    break\n \t}\n     }\n-    drawmore 1\n+    drawmore $reading\n }\n \n proc finishcommits {} {\n-    global phase\n+    global phase oldcommits commits\n     global canv mainfont ctext maincursor textcursor\n+    global parents\n \n-    if {$phase != \"incrdraw\"} {\n+    if {$phase == \"incrdraw\" || $phase == \"removecommits\"} {\n+\tforeach id $oldcommits {\n+\t    lappend commits $id\n+\t    updatechildren $id $parents($id)\n+\t    drawcommit $id 0\n+\t}\n+\tset oldcommits {}\n+\tdrawrest\n+    } elseif {$phase == \"updatecommits\"} {\n+\tset phase {}\n+    } else {\n \t$canv delete all\n \t$canv create text 3 3 -anchor nw -text \"No commits selected\" \\\n \t    -font $mainfont -tags textitems\n \tset phase {}\n-    } else {\n-\tdrawrest\n     }\n     . config -cursor $maincursor\n     settextcursor $textcursor\n@@ -3603,9 +3639,6 @@ proc rereadrefs {} {\n \t    set ref($id) [listrefs $id]\n \t}\n     }\n-    foreach v {tagids idtags headids idheads otherrefids idotherrefs} {\n-\tcatch {unset $v}\n-    }\n     readrefs\n     set refids [lsort -unique [concat $refids [array names idtags] \\\n \t\t\t[array names idheads] [array names idotherrefs]]]\n@@ -3617,6 +3650,80 @@ proc rereadrefs {} {\n     }\n }\n \n+proc updatecommits {rargs} {\n+    global commitlisted commfd phase\n+    global startmsecs nextupdate ncmupdate\n+    global idtags idheads idotherrefs\n+    global leftover\n+    global parsed_args\n+    global canv\n+    global oldcommits commits\n+    global parents nchildren children ncleft\n+\n+    set old_args $parsed_args\n+    parse_args $rargs\n+\n+    foreach id $old_args {\n+\tif {![regexp {^[0-9a-f]{40}$} $id]} continue\n+\tif {[info exists oldref($id)]} continue\n+\tset oldref($id) $id\n+\tlappend ignoreold \"^$id\"\n+    }\n+    foreach id $parsed_args {\n+\tif {![regexp {^[0-9a-f]{40}$} $id]} continue\n+\tif {[info exists ref($id)]} continue\n+\tset ref($id) $id\n+\tlappend ignorenew \"^$id\"\n+    }\n+\n+    foreach a $old_args {\n+\tif {![info exists ref($a)]} {\n+\t    lappend ignorenew $a\n+\t}\n+    }\n+\n+    set phase updatecommits\n+    set removed_commits [split [eval exec git-rev-list $ignorenew] \"\\n\" ]\n+    if {[llength $removed_commits] > 0} {\n+\t$canv delete all\n+\tset oldcommits {}\n+\tforeach c $commits {\n+\t    if {[lsearch $c $removed_commits] < 0} {\n+\t\tlappend oldcommits $c\n+\t    } else {\n+\t\tunset commitlisted($c)\n+\t    }\n+\t}\n+\tset commits {}\n+\tunset children\n+\tunset nchildren\n+\tset phase removecommits\n+    }\n+\n+    set args {}\n+    foreach a $parsed_args {\n+\tif {![info exists oldref($a)]} {\n+\t    lappend args $a\n+\t}\n+    }\n+\n+    readrefs\n+    if [catch {\n+\tset commfd [open \"|git-rev-list --header --topo-order --parents $args $ignoreold\" r]\n+    } err] {\n+\tputs stderr \"Error executing git-rev-list: $err\"\n+\texit 1\n+    }\n+    set startmsecs [clock clicks -milliseconds]\n+    set nextupdate [expr $startmsecs + 100]\n+    set ncmupdate 1\n+    set leftover {}\n+    fconfigure $commfd -blocking 0 -translation lf\n+    fileevent $commfd readable [list getcommitlines $commfd]\n+    . config -cursor watch\n+    settextcursor watch\n+}\n+\n proc showtag {tag isnew} {\n     global ctext cflist tagcontents tagids linknum\n \n@@ -3684,6 +3791,6 @@ set redisplaying 0\n set stuffsaved 0\n set patchnum 0\n setcoords\n-makewindow\n+makewindow $revtreeargs\n readrefs\n getcommits $revtreeargs\n"}]}