File Annotation
Not logged in
52f2254007 2007-10-04       aku: ## -*- tcl -*-
52f2254007 2007-10-04       aku: # # ## ### ##### ######## ############# #####################
52f2254007 2007-10-04       aku: ## Copyright (c) 2007 Andreas Kupries.
52f2254007 2007-10-04       aku: #
52f2254007 2007-10-04       aku: # This software is licensed as described in the file LICENSE, which
52f2254007 2007-10-04       aku: # you should have received as part of this distribution.
52f2254007 2007-10-04       aku: #
52f2254007 2007-10-04       aku: # This software consists of voluntary contributions made by many
52f2254007 2007-10-04       aku: # individuals.  For exact contribution history, see the revision
52f2254007 2007-10-04       aku: # history and logs, available at http://fossil-scm.hwaci.com/fossil
52f2254007 2007-10-04       aku: # # ## ### ##### ######## ############# #####################
52f2254007 2007-10-04       aku: 
52f2254007 2007-10-04       aku: ## Project, part of a CVS repository. Multiple instances are possible.
52f2254007 2007-10-04       aku: 
52f2254007 2007-10-04       aku: # # ## ### ##### ######## ############# #####################
52f2254007 2007-10-04       aku: ## Requirements
52f2254007 2007-10-04       aku: 
da9295c6f6 2007-10-12       aku: package require Tcl 8.4                               ; # Required runtime.
da9295c6f6 2007-10-12       aku: package require snit                                  ; # OO system.
da9295c6f6 2007-10-12       aku: package require vc::fossil::import::cvs::file         ; # CVS archive file.
27470a9304 2007-10-13       aku: package require vc::fossil::import::cvs::state        ; # State storage.
27470a9304 2007-10-13       aku: package require vc::fossil::import::cvs::project::sym ; # Per project symbols.
27470a9304 2007-10-13       aku: package require struct::list                          ; # Advanced list operations..
52f2254007 2007-10-04       aku: 
52f2254007 2007-10-04       aku: # # ## ### ##### ######## ############# #####################
52f2254007 2007-10-04       aku: ##
52f2254007 2007-10-04       aku: 
52f2254007 2007-10-04       aku: snit::type ::vc::fossil::import::cvs::project {
52f2254007 2007-10-04       aku:     # # ## ### ##### ######## #############
52f2254007 2007-10-04       aku:     ## Public API
52f2254007 2007-10-04       aku: 
8487172254 2007-10-06       aku:     constructor {path r} {
8487172254 2007-10-06       aku: 	set mybase       $path
8487172254 2007-10-06       aku: 	set myrepository $r
52f2254007 2007-10-04       aku: 	return
52f2254007 2007-10-04       aku:     }
52f2254007 2007-10-04       aku: 
52f2254007 2007-10-04       aku:     method base {} { return $mybase }
52f2254007 2007-10-04       aku: 
52f2254007 2007-10-04       aku:     method printbase {} {
52f2254007 2007-10-04       aku: 	if {$mybase eq ""} {return <Repository>}
52f2254007 2007-10-04       aku: 	return $mybase
52f2254007 2007-10-04       aku:     }
52f2254007 2007-10-04       aku: 
27470a9304 2007-10-13       aku:     method addfile {rcs usr executable} {
27470a9304 2007-10-13       aku: 	set myfiles($rcs) [list $usr $executable]
52f2254007 2007-10-04       aku: 	return
042d54bae5 2007-10-05       aku:     }
042d54bae5 2007-10-05       aku: 
8a93ffa9c1 2007-10-06       aku:     method filenames {} {
ec053168a8 2007-10-06       aku: 	return [lsort -dict [array names myfiles]]
52f2254007 2007-10-04       aku:     }
52f2254007 2007-10-04       aku: 
52f2254007 2007-10-04       aku:     method files {} {
8a93ffa9c1 2007-10-06       aku: 	# TODO: Loading from state
6d1811d61e 2007-10-06       aku: 	return [TheFiles]
8487172254 2007-10-06       aku:     }
8487172254 2007-10-06       aku: 
8487172254 2007-10-06       aku:     delegate method author   to myrepository
8487172254 2007-10-06       aku:     delegate method cmessage to myrepository
da9295c6f6 2007-10-12       aku: 
da9295c6f6 2007-10-12       aku:     method getsymbol {name} {
da9295c6f6 2007-10-12       aku: 	if {![info exists mysymbols($name)]} {
da9295c6f6 2007-10-12       aku: 	    set mysymbols($name) [sym %AUTO% $name]
8a93ffa9c1 2007-10-06       aku: 	}
da9295c6f6 2007-10-12       aku: 	return $mysymbols($name)
042d54bae5 2007-10-05       aku:     }
042d54bae5 2007-10-05       aku: 
6d1811d61e 2007-10-06       aku:     # pass I persistence
042d54bae5 2007-10-05       aku:     method persist {} {
042d54bae5 2007-10-05       aku: 	state transaction {
042d54bae5 2007-10-05       aku: 	    # Project data first. Required so that we have its id
042d54bae5 2007-10-05       aku: 	    # ready for the files.
042d54bae5 2007-10-05       aku: 
042d54bae5 2007-10-05       aku: 	    state run {
042d54bae5 2007-10-05       aku: 		INSERT INTO project (pid,  name)
042d54bae5 2007-10-05       aku: 		VALUES              (NULL, $mybase);
042d54bae5 2007-10-05       aku: 	    }
042d54bae5 2007-10-05       aku: 	    set pid [state id]
042d54bae5 2007-10-05       aku: 
042d54bae5 2007-10-05       aku: 	    # Then all files, with proper backreference to their
042d54bae5 2007-10-05       aku: 	    # project.
042d54bae5 2007-10-05       aku: 
27470a9304 2007-10-13       aku: 	    foreach {rcs item} [array get myfiles] {
27470a9304 2007-10-13       aku: 		struct::list assign $item usr executable
042d54bae5 2007-10-05       aku: 		state run {
27470a9304 2007-10-13       aku: 		    INSERT INTO file (fid,  pid,  name, visible, exec)
27470a9304 2007-10-13       aku: 		    VALUES           (NULL, $pid, $rcs, $usr,    $executable);
042d54bae5 2007-10-05       aku: 		}
6d1811d61e 2007-10-06       aku: 	    }
6d1811d61e 2007-10-06       aku: 	}
6d1811d61e 2007-10-06       aku: 	return
6d1811d61e 2007-10-06       aku:     }
6d1811d61e 2007-10-06       aku: 
6d1811d61e 2007-10-06       aku:     # pass II persistence
6d1811d61e 2007-10-06       aku:     method persistrev {} {
6d1811d61e 2007-10-06       aku: 	state transaction {
6d1811d61e 2007-10-06       aku: 	    # TODO: per project persistence (symbols, meta data)
6d1811d61e 2007-10-06       aku: 	    foreach f [TheFiles] {
6d1811d61e 2007-10-06       aku: 		$f persist
042d54bae5 2007-10-05       aku: 	    }
042d54bae5 2007-10-05       aku: 	}
042d54bae5 2007-10-05       aku: 	return
52f2254007 2007-10-04       aku:     }
52f2254007 2007-10-04       aku: 
52f2254007 2007-10-04       aku:     # # ## ### ##### ######## #############
52f2254007 2007-10-04       aku:     ## State
52f2254007 2007-10-04       aku: 
da9295c6f6 2007-10-12       aku:     variable mybase           {} ; # Project directory
da9295c6f6 2007-10-12       aku:     variable myfiles   -array {} ; # Maps rcs archive to their user files.
da9295c6f6 2007-10-12       aku:     variable myfobj           {} ; # File objects for the rcs archives
da9295c6f6 2007-10-12       aku:     variable myrepository     {} ; # Repository the prject belongs to.
da9295c6f6 2007-10-12       aku:     variable mysymbols -array {} ; # Map symbol names to project-level symbol objects.
52f2254007 2007-10-04       aku: 
52f2254007 2007-10-04       aku:     # # ## ### ##### ######## #############
52f2254007 2007-10-04       aku:     ## Internal methods
52f2254007 2007-10-04       aku: 
6d1811d61e 2007-10-06       aku:     proc TheFiles {} {
6d1811d61e 2007-10-06       aku: 	upvar 1 myfiles myfiles myfobj myfobj self self
6d1811d61e 2007-10-06       aku: 	if {![llength $myfobj]} {
6d1811d61e 2007-10-06       aku: 	    set myfobj [EmptyFiles myfiles]
6d1811d61e 2007-10-06       aku: 	}
6d1811d61e 2007-10-06       aku: 	return $myfobj
6d1811d61e 2007-10-06       aku:     }
6d1811d61e 2007-10-06       aku: 
6d1811d61e 2007-10-06       aku:     proc EmptyFiles {fv} {
6d1811d61e 2007-10-06       aku: 	upvar 1 $fv myfiles self self
6d1811d61e 2007-10-06       aku: 	set res {}
27470a9304 2007-10-13       aku: 	foreach item [lsort -dict [array names myfiles]] {
27470a9304 2007-10-13       aku: 	    struct::list assign $item f executable
27470a9304 2007-10-13       aku: 	    lappend res [file %AUTO% $f $executable $self]
6d1811d61e 2007-10-06       aku: 	}
6d1811d61e 2007-10-06       aku: 	return $res
6d1811d61e 2007-10-06       aku:     }
6d1811d61e 2007-10-06       aku: 
6d1811d61e 2007-10-06       aku:     # # ## ### ##### ######## #############
6d1811d61e 2007-10-06       aku:     ## Configuration
6d1811d61e 2007-10-06       aku: 
52f2254007 2007-10-04       aku:     pragma -hastypeinfo    no  ; # no type introspection
52f2254007 2007-10-04       aku:     pragma -hasinfo        no  ; # no object introspection
52f2254007 2007-10-04       aku:     pragma -hastypemethods no  ; # type is not relevant.
52f2254007 2007-10-04       aku: 
52f2254007 2007-10-04       aku:     # # ## ### ##### ######## #############
52f2254007 2007-10-04       aku: }
52f2254007 2007-10-04       aku: 
52f2254007 2007-10-04       aku: namespace eval ::vc::fossil::import::cvs {
52f2254007 2007-10-04       aku:     namespace export project
042d54bae5 2007-10-05       aku:     namespace eval project {
8a93ffa9c1 2007-10-06       aku: 	namespace import ::vc::fossil::import::cvs::file
042d54bae5 2007-10-05       aku: 	namespace import ::vc::fossil::import::cvs::state
da9295c6f6 2007-10-12       aku: 	# Import not required, already a child namespace.
da9295c6f6 2007-10-12       aku: 	# namespace import ::vc::fossil::import::cvs::project::sym
042d54bae5 2007-10-05       aku:     }
52f2254007 2007-10-04       aku: }
52f2254007 2007-10-04       aku: 
52f2254007 2007-10-04       aku: # # ## ### ##### ######## ############# #####################
52f2254007 2007-10-04       aku: ## Ready
52f2254007 2007-10-04       aku: 
52f2254007 2007-10-04       aku: package provide vc::fossil::import::cvs::project 1.0
52f2254007 2007-10-04       aku: return