Skip to content

Commit

Permalink
gitk: Fix Update menu item
Browse files Browse the repository at this point in the history
This just does the simple thing of resetting everything, reading all
the commits, and redoing the whole layout from scratch.  Hopefully
things are now fast enough that this simple approach is acceptable.
Also, this fits in better with future plans for adding the ability
to restrict the tree to just a few files and then expand back to
the whole tree.

Signed-off-by: Paul Mackerras <paulus@samba.org>
  • Loading branch information
Paul Mackerras committed Feb 28, 2006
1 parent f634248 commit aa81d97
Showing 1 changed file with 23 additions and 115 deletions.
138 changes: 23 additions & 115 deletions gitk
Original file line number Diff line number Diff line change
Expand Up @@ -61,16 +61,8 @@ proc start_rev_list {rlargs} {
}

proc getcommits {rargs} {
global oldcommits commits phase canv mainfont env
global phase canv mainfont

# check that we can find a .git directory somewhere...
set gitdir [gitdir]
if {![file isdirectory $gitdir]} {
error_popup "Cannot find the git directory \"$gitdir\"."
exit 1
}
set oldcommits {}
set commits {}
set phase getcommits
start_rev_list [parse_args $rargs]
$canv delete all
Expand All @@ -79,8 +71,8 @@ proc getcommits {rargs} {
}

proc getcommitlines {commfd} {
global oldcommits commits parents cdate children nchildren
global commitlisted phase nextupdate
global parents cdate children nchildren
global commitlisted nextupdate
global stopped leftover
global canv

Expand Down Expand Up @@ -140,7 +132,6 @@ proc getcommitlines {commfd} {
set id [lindex $ids 0]
set olds [lrange $ids 1 end]
set cmit [string range $cmit [expr {$j + 1}] end]
lappend commits $id
set commitlisted($id) 1
parsecommit $id $cmit 1 [lrange $ids 1 end]
drawcommit $id 1
Expand Down Expand Up @@ -177,93 +168,18 @@ proc readcommit {id} {
}

proc updatecommits {rargs} {
global commitlisted commfd phase
global startmsecs nextupdate ncmupdate
global idtags idheads idotherrefs
global leftover
global parsed_args
global canv mainfont
global oldcommits commits
global parents nchildren children

set old_args $parsed_args
parse_args $rargs

if {$phase == "getcommits" || $phase == "incrdraw"} {
# havent read all the old commits, just start again from scratch
stopfindproc
set oldcommits {}
set commits {}
foreach v {children nchildren parents commitlisted commitinfo
selectedline matchinglines treediffs
mergefilelist currentid rowtextx} {
global $v
catch {unset $v}
}
readrefs
if {$phase == "incrdraw"} {
allcanvs delete all
$canv create text 3 3 -anchor nw -text "Reading commits..." \
-font $mainfont -tags textitems
set phase getcommits
}
start_rev_list $parsed_args
return
}

foreach id $old_args {
if {![regexp {^[0-9a-f]{40}$} $id]} continue
if {[info exists oldref($id)]} continue
set oldref($id) $id
lappend ignoreold "^$id"
}
foreach id $parsed_args {
if {![regexp {^[0-9a-f]{40}$} $id]} continue
if {[info exists ref($id)]} continue
set ref($id) $id
lappend ignorenew "^$id"
}

foreach a $old_args {
if {![info exists ref($a)]} {
lappend ignorenew $a
}
}

set phase updatecommits
set oldcommits $commits
set commits {}
set removed_commits [split [eval exec git-rev-list $ignorenew] "\n" ]
if {[llength $removed_commits] > 0} {
allcanvs delete all
foreach c $removed_commits {
set i [lsearch -exact $oldcommits $c]
if {$i >= 0} {
set oldcommits [lreplace $oldcommits $i $i]
unset commitlisted($c)
foreach p $parents($c) {
if {[info exists nchildren($p)]} {
set j [lsearch -exact $children($p) $c]
if {$j >= 0} {
set children($p) [lreplace $children($p) $j $j]
incr nchildren($p) -1
}
}
}
}
}
set phase removecommits
}

set args {}
foreach a $parsed_args {
if {![info exists oldref($a)]} {
lappend args $a
}
stopfindproc
foreach v {children nchildren parents nparents commitlisted
commitinfo colormap selectedline matchinglines treediffs
mergefilelist currentid rowtextx commitrow lineid
rowidlist rowoffsets idrowranges idrangedrawn iddrawn
linesegends crossings cornercrossings} {
global $v
catch {unset $v}
}

allcanvs delete all
readrefs
start_rev_list [concat $ignoreold $args]
getcommits $rargs
}

proc updatechildren {id olds} {
Expand Down Expand Up @@ -1456,7 +1372,7 @@ proc clear_display {} {
}

proc assigncolor {id} {
global colormap commcolors colors nextcolor
global colormap colors nextcolor
global parents nparents children nchildren
global cornercrossings crossings

Expand Down Expand Up @@ -1533,10 +1449,6 @@ proc initgraph {} {
allcanvs delete all
set nextcolor 0
set numcommits 0
foreach v {colormap cornercrossings crossings lineid} {
global $v
catch {unset $v}
}
}

proc bindline {t id} {
Expand Down Expand Up @@ -1696,22 +1608,11 @@ proc drawcommit {id reading} {
}

proc finishcommits {} {
global phase oldcommits commits
global phase
global canv mainfont ctext maincursor textcursor
global parents todo

if {$phase == "incrdraw" || $phase == "removecommits"} {
foreach id $oldcommits {
lappend commits $id
drawcommit $id 0
}
set oldcommits {}
if {$phase == "incrdraw"} {
drawrest
} elseif {$phase == "updatecommits"} {
# there were no new commits, in fact
set commits $oldcommits
set oldcommits {}
set phase {}
} else {
$canv delete all
$canv create text 3 3 -anchor nw -text "No commits selected" \
Expand Down Expand Up @@ -3773,6 +3674,13 @@ foreach arg $argv {
}
}

# check that we can find a .git directory somewhere...
set gitdir [gitdir]
if {![file isdirectory $gitdir]} {
error_popup "Cannot find the git directory \"$gitdir\"."
exit 1
}

set history {}
set historyindex 0

Expand Down

0 comments on commit aa81d97

Please sign in to comment.