File Annotation
Not logged in
ae54e928c2 2007-09-17       aku: # -----------------------------------------------------------------------------
ae54e928c2 2007-09-17       aku: # Repository management (CVS), Changeset grouping and storage.
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku: # -----------------------------------------------------------------------------
ae54e928c2 2007-09-17       aku: # Requirements
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku: package require Tcl 8.4
72dac950c3 2007-09-26       aku: package require vc::cvs::ws::sig      ; # Changeset file/rev signatures
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku: namespace eval ::vc::cvs::ws::csets::Current {}
72dac950c3 2007-09-26       aku: namespace eval ::vc::cvs::ws::csets::sig {
72dac950c3 2007-09-26       aku:     namespace import ::vc::cvs::ws::sig::*
72dac950c3 2007-09-26       aku: }
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku: # -----------------------------------------------------------------------------
ae54e928c2 2007-09-17       aku: # API
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku: # vc::cvs::ws::csets::init   - Initialize accumulator
ae54e928c2 2007-09-17       aku: # vc::cvs::ws::csets::add    - Add timeline entry to accumulor, may generate new cset
ae54e928c2 2007-09-17       aku: # vc::cvs::ws::csets::done   - Complete cset generation.
ae54e928c2 2007-09-17       aku: #
ae54e928c2 2007-09-17       aku: # vc::cvs::ws::csets::get id - Get data of a cset.
ae54e928c2 2007-09-17       aku: # vc::cvs::ws::csets::num    - Get number of csets.
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku: # -----------------------------------------------------------------------------
ae54e928c2 2007-09-17       aku: # API Implementation
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku: proc ::vc::cvs::ws::csets::init {} {
cbbf9a7575 2007-09-20       aku:     variable ncs 0
ae54e928c2 2007-09-17       aku:     Current::Clear
ae54e928c2 2007-09-17       aku:     return
ae54e928c2 2007-09-17       aku: }
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku: proc ::vc::cvs::ws::csets::add {date file revision operation author cmsg} {
ae54e928c2 2007-09-17       aku:     if {![Current::Empty] && [Current::New $file $revision $author $cmsg]} {
ae54e928c2 2007-09-17       aku: 	Save [Current::Complete]
ae54e928c2 2007-09-17       aku:     }
ae54e928c2 2007-09-17       aku:     Current::Add $date $file $revision $operation $author $cmsg
ae54e928c2 2007-09-17       aku:     return
ae54e928c2 2007-09-17       aku: }
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku: proc ::vc::cvs::ws::csets::done {} {
ae54e928c2 2007-09-17       aku:     if {![Current::Empty]} {
ae54e928c2 2007-09-17       aku: 	Save [Current::Complete]
ae54e928c2 2007-09-17       aku:     }
ae54e928c2 2007-09-17       aku:     return
ae54e928c2 2007-09-17       aku: }
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku: proc ::vc::cvs::ws::csets::get {id} {
ae54e928c2 2007-09-17       aku:     variable csets
ae54e928c2 2007-09-17       aku:     return  $csets($id)
ae54e928c2 2007-09-17       aku: }
ae54e928c2 2007-09-17       aku: 
72dac950c3 2007-09-26       aku: 
72dac950c3 2007-09-26       aku: proc ::vc::cvs::ws::csets::DUMP {id} {
72dac950c3 2007-09-26       aku:     puts /${id}/_________________
72dac950c3 2007-09-26       aku:     array set cs [get $id]
72dac950c3 2007-09-26       aku:     parray cs
72dac950c3 2007-09-26       aku:     return
72dac950c3 2007-09-26       aku: }
72dac950c3 2007-09-26       aku: 
ae54e928c2 2007-09-17       aku: proc ::vc::cvs::ws::csets::num {} {
ae54e928c2 2007-09-17       aku:     variable csets
ae54e928c2 2007-09-17       aku:     return [array size csets]
cbbf9a7575 2007-09-20       aku: }
cbbf9a7575 2007-09-20       aku: 
cbbf9a7575 2007-09-20       aku: proc ::vc::cvs::ws::csets::isTrunk {id} {
cbbf9a7575 2007-09-20       aku:     variable csets
cbbf9a7575 2007-09-20       aku:     array set cs $csets($id)
cbbf9a7575 2007-09-20       aku:     return [expr {$cs(lastd) == 2}]
cbbf9a7575 2007-09-20       aku: }
cbbf9a7575 2007-09-20       aku: 
cbbf9a7575 2007-09-20       aku: proc ::vc::cvs::ws::csets::setParentOf {id parent} {
cbbf9a7575 2007-09-20       aku:     variable csets
cbbf9a7575 2007-09-20       aku:     lappend  csets($id) parent $parent
72dac950c3 2007-09-26       aku: 
72dac950c3 2007-09-26       aku:     array set cs $csets($id)
72dac950c3 2007-09-26       aku:     sig::def            $id $parent $cs(added) $cs(changed) $cs(removed)
cbbf9a7575 2007-09-20       aku:     return
cbbf9a7575 2007-09-20       aku: }
cbbf9a7575 2007-09-20       aku: 
cbbf9a7575 2007-09-20       aku: proc ::vc::cvs::ws::csets::parentOf {id} {
cbbf9a7575 2007-09-20       aku:     variable      csets
cbbf9a7575 2007-09-20       aku:     array set cs $csets($id)
cbbf9a7575 2007-09-20       aku:     return   $cs(parent)
72dac950c3 2007-09-26       aku: }
72dac950c3 2007-09-26       aku: 
72dac950c3 2007-09-26       aku: proc ::vc::cvs::ws::csets::sameBranch {id parent tag} {
72dac950c3 2007-09-26       aku:     variable      csets
72dac950c3 2007-09-26       aku:     array set cs $csets($id)
72dac950c3 2007-09-26       aku:     return [sig::next $parent $cs(added) $cs(changed) $cs(removed) $tag $cs(date)]
ae54e928c2 2007-09-17       aku: }
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku: # -----------------------------------------------------------------------------
ae54e928c2 2007-09-17       aku: # Internal helper commands: Changeset inspection and construction.
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku: proc ::vc::cvs::ws::csets::Save {data} {
ae54e928c2 2007-09-17       aku:     variable csets
ae54e928c2 2007-09-17       aku:     variable ncs
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku:     set csets($ncs) $data
ae54e928c2 2007-09-17       aku:     incr ncs
ae54e928c2 2007-09-17       aku:     return
ae54e928c2 2007-09-17       aku: }
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku: proc ::vc::cvs::ws::csets::Current::Clear {} {
ae54e928c2 2007-09-17       aku:     variable    start   {} ; # date the changeset begins
ae54e928c2 2007-09-17       aku:     variable    cmsg    {} ; # commit message of the changeset
ae54e928c2 2007-09-17       aku:     variable    author  {} ; # user creating the changeset
ae54e928c2 2007-09-17       aku:     variable    lastd   {} ; # version depth of last added file.
ae54e928c2 2007-09-17       aku:     variable    removed {} ; # file -> revision of removed files.
ae54e928c2 2007-09-17       aku:     variable    added   {} ; # file -> revision of added files.
ae54e928c2 2007-09-17       aku:     variable    changed {} ; # file -> revision of modified files.
ae54e928c2 2007-09-17       aku:     variable    files
ae54e928c2 2007-09-17       aku:     array unset files *
ae54e928c2 2007-09-17       aku:     array set   files {}   ; # file -> revision
ae54e928c2 2007-09-17       aku:     return
ae54e928c2 2007-09-17       aku: }
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku: proc ::vc::cvs::ws::csets::Current::Empty {} {
ae54e928c2 2007-09-17       aku:     variable start
ae54e928c2 2007-09-17       aku:     return [expr {$start eq ""}]
ae54e928c2 2007-09-17       aku: }
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku: proc ::vc::cvs::ws::csets::Current::New {nfile nrevision nauthor ncmsg} {
ae54e928c2 2007-09-17       aku:     upvar 1 reason reason
ae54e928c2 2007-09-17       aku:     variable cmsg
ae54e928c2 2007-09-17       aku:     variable author
ae54e928c2 2007-09-17       aku:     variable lastd
ae54e928c2 2007-09-17       aku:     variable files
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku:     # User change
ae54e928c2 2007-09-17       aku:     if {$nauthor ne $author} {
ae54e928c2 2007-09-17       aku: 	set reason user
ae54e928c2 2007-09-17       aku: 	return 1
ae54e928c2 2007-09-17       aku:     }
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku:     # File already in current cset
ae54e928c2 2007-09-17       aku:     if {[info exists files($nfile)]} {
ae54e928c2 2007-09-17       aku: 	set reason file
ae54e928c2 2007-09-17       aku: 	return 1
ae54e928c2 2007-09-17       aku:     }
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku:     # Current cset trunk/branch different from entry.
ae54e928c2 2007-09-17       aku:     set ndepth [llength [split $nrevision .]]
ae54e928c2 2007-09-17       aku:     if {($lastd == 2) != ($ndepth == 2)} {
ae54e928c2 2007-09-17       aku: 	set reason depth/$lastd/$ndepth/($nrevision)/$nfile
ae54e928c2 2007-09-17       aku: 	return 1
ae54e928c2 2007-09-17       aku:     }
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku:     # Commit message changed
ae54e928c2 2007-09-17       aku:     if {$ncmsg ne $cmsg} {
ae54e928c2 2007-09-17       aku: 	set reason cmsg/<<$ncmsg>>
ae54e928c2 2007-09-17       aku: 	return 1
ae54e928c2 2007-09-17       aku:     }
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku:     # The new entry still belongs to the current changeset
ae54e928c2 2007-09-17       aku:     return 0
ae54e928c2 2007-09-17       aku: }
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku: proc ::vc::cvs::ws::csets::Current::Add {ndate nfile nrevision noperation nauthor ncmsg} {
ae54e928c2 2007-09-17       aku:     variable start
ae54e928c2 2007-09-17       aku:     variable cmsg
ae54e928c2 2007-09-17       aku:     variable author
ae54e928c2 2007-09-17       aku:     variable lastd
ae54e928c2 2007-09-17       aku:     variable removed
ae54e928c2 2007-09-17       aku:     variable added
ae54e928c2 2007-09-17       aku:     variable changed
ae54e928c2 2007-09-17       aku:     variable files
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku:     if {$start eq ""} {set start $ndate}
ae54e928c2 2007-09-17       aku:     set cmsg          $ncmsg
ae54e928c2 2007-09-17       aku:     set author        $nauthor
ae54e928c2 2007-09-17       aku:     set lastd         [llength [split $nrevision .]]
ae54e928c2 2007-09-17       aku:     set files($nfile) $nrevision
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku:     if {$noperation eq "R"} {
ae54e928c2 2007-09-17       aku: 	lappend removed $nfile $nrevision
ae54e928c2 2007-09-17       aku:     } elseif {$noperation eq "A"} {
ae54e928c2 2007-09-17       aku: 	lappend added   $nfile $nrevision
ae54e928c2 2007-09-17       aku:     } else {
ae54e928c2 2007-09-17       aku: 	lappend changed $nfile $nrevision
ae54e928c2 2007-09-17       aku:     }
ae54e928c2 2007-09-17       aku:     return
ae54e928c2 2007-09-17       aku: }
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku: proc ::vc::cvs::ws::csets::Current::Complete {} {
ae54e928c2 2007-09-17       aku:     variable start
ae54e928c2 2007-09-17       aku:     variable cmsg
ae54e928c2 2007-09-17       aku:     variable author
ae54e928c2 2007-09-17       aku:     variable lastd
ae54e928c2 2007-09-17       aku:     variable removed
ae54e928c2 2007-09-17       aku:     variable added
ae54e928c2 2007-09-17       aku:     variable changed
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku:     set res [list \
ae54e928c2 2007-09-17       aku: 		date    $start \
ae54e928c2 2007-09-17       aku: 		author  $author \
a9dcf09124 2007-09-20       aku: 		cmsg    [string trim $cmsg] \
ae54e928c2 2007-09-17       aku: 		removed $removed \
ae54e928c2 2007-09-17       aku: 		added   $added \
ae54e928c2 2007-09-17       aku: 		changed $changed \
ae54e928c2 2007-09-17       aku: 		lastd   $lastd]
ae54e928c2 2007-09-17       aku:     Clear
ae54e928c2 2007-09-17       aku:     return $res
ae54e928c2 2007-09-17       aku: }
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku: # -----------------------------------------------------------------------------
ae54e928c2 2007-09-17       aku: # Internals
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku: namespace eval ::vc::cvs::ws::csets {
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku:     # Cset storage
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku:     # csets: id -> dict
ae54e928c2 2007-09-17       aku:     # dict: date
ae54e928c2 2007-09-17       aku:     #       author
ae54e928c2 2007-09-17       aku:     #       csmg
ae54e928c2 2007-09-17       aku:     #       removed
ae54e928c2 2007-09-17       aku:     #       added
ae54e928c2 2007-09-17       aku:     #       changed
ae54e928c2 2007-09-17       aku:     #       lastd
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku:     variable  ncs   0  ; # Counter for changesets
ae54e928c2 2007-09-17       aku:     variable  csets
ae54e928c2 2007-09-17       aku:     array set csets {} ; # Changeset data
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku:     # Data of the current changeset built from timeline entries.
ae54e928c2 2007-09-17       aku:     namespace eval Current {
ae54e928c2 2007-09-17       aku: 	variable  start   {} ; # date the changeset begins
ae54e928c2 2007-09-17       aku: 	variable  cmsg    {} ; # commit message of the changeset
ae54e928c2 2007-09-17       aku: 	variable  author  {} ; # user creating the changeset
ae54e928c2 2007-09-17       aku: 	variable  lastd   {} ; # version depth of last added file.
ae54e928c2 2007-09-17       aku: 	variable  removed {} ; # file -> revision of removed files.
ae54e928c2 2007-09-17       aku: 	variable  added   {} ; # file -> revision of added files.
ae54e928c2 2007-09-17       aku: 	variable  changed {} ; # file -> revision of modified files.
ae54e928c2 2007-09-17       aku: 	variable  files
ae54e928c2 2007-09-17       aku: 	array set files {}   ; # file -> revision
ae54e928c2 2007-09-17       aku:     }
ae54e928c2 2007-09-17       aku: 
72dac950c3 2007-09-26       aku:     namespace export init add done get num isTrunk setParentOf parentOf sameBranch
ae54e928c2 2007-09-17       aku: }
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku: # -----------------------------------------------------------------------------
ae54e928c2 2007-09-17       aku: # Ready
ae54e928c2 2007-09-17       aku: 
ae54e928c2 2007-09-17       aku: package provide vc::cvs::ws::csets 1.0
ae54e928c2 2007-09-17       aku: return