From: Paul Mackerras Date: Wed, 17 Aug 2005 11:27:55 +0000 (+1000) Subject: Add graft support. X-Git-Tag: v0.99.5~13^2^2~2 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=244edd1241cc6168fba0b580c41a6adeb63f1216;p=git.git Add graft support. We read .git/info/grafts and use the information in there to override the list of parents we get from git-rev-list or git-cat-file. --- diff --git a/gitk b/gitk index 6dc4b24f..c443d951 100755 --- a/gitk +++ b/gitk @@ -156,6 +156,7 @@ proc readcommit {id} { proc parsecommit {id contents listed} { global commitinfo children nchildren parents nparents cdate ncleft + global grafts set inhdr 1 set comment {} @@ -171,13 +172,32 @@ proc parsecommit {id contents listed} { } set parents($id) {} set nparents($id) 0 + set grafted 0 + if {[info exists grafts($id)]} { + set grafted 1 + set parents($id) $grafts($id) + set nparents($id) [llength $grafts($id)] + if {$listed} { + foreach p $grafts($id) { + if {![info exists nchildren($p)]} { + set children($p) [list $id] + set nchildren($p) 1 + set ncleft($p) 1 + } elseif {[lsearch -exact $children($p) $id] < 0} { + lappend children($p) $id + incr nchildren($p) + incr ncleft($p) + } + } + } + } foreach line [split $contents "\n"] { if {$inhdr} { if {$line == {}} { set inhdr 0 } else { set tag [lindex $line 0] - if {$tag == "parent"} { + if {$tag == "parent" && !$grafted} { set p [lindex $line 1] if {![info exists nchildren($p)]} { set children($p) {} @@ -273,6 +293,32 @@ proc readrefs {} { } } +proc readgrafts {} { + global grafts env + catch { + set graftfile info/grafts + if {[info exists env(GIT_GRAFT_FILE)]} { + set graftfile $env(GIT_GRAFT_FILE) + } + set fd [open [gitdir]/$graftfile r] + while {[gets $fd line] >= 0} { + if {[string match "#*" $line]} continue + set ok 1 + foreach x $line { + if {![regexp {^[0-9a-f]{40}$} $x]} { + set ok 0 + break + } + } + if {$ok} { + set id [lindex $line 0] + set grafts($id) [lrange $line 1 end] + } + } + close $fd + } +} + proc error_popup msg { set w .error toplevel $w @@ -3202,4 +3248,5 @@ set patchnum 0 setcoords makewindow readrefs +readgrafts getcommits $revtreeargs