home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / contsystem.tcl < prev    next >
Text File  |  1997-06-06  |  7KB  |  247 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)contsystem.tcl    /main/hindenburg/8
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)contsystem.tcl    /main/hindenburg/8   6 Jun 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14. require_module_file "vssystem.tcl" vcm
  15.  
  16. # This class represents a Continuus aware system.
  17.  
  18. Class ContSystem : {VSSystem} {
  19.     constructor
  20.     method destructor
  21.     method vsFileUserPath
  22.     method vsFileVSPath
  23.     method vsUserPath
  24.     method vsVsPath
  25.     method fileList
  26.     method currentProjectVersion
  27.     method fileExists
  28.     method move
  29. }
  30.  
  31. constructor ContSystem {class this name} {
  32.     set this [VSSystem::constructor $class $this $name]
  33.     # Start constructor user section
  34.     # End constructor user section
  35.     return $this
  36. }
  37.  
  38. method ContSystem::destructor {this} {
  39.     # Start destructor user section
  40.     # End destructor user section
  41.     $this VSSystem::destructor
  42. }
  43.  
  44.  
  45. # Use vsObjectUserPath to get path name to file.
  46. #
  47. method ContSystem::vsFileUserPath {this name type} {
  48.     # path method is redefined in VSSystem to use vsObjectUserPath
  49.     set systemPath [$this path]
  50.     set filePath [path_name concat $systemPath [$this getFileName $name $type]]
  51.     return $filePath
  52. }
  53.  
  54.  
  55. # Use vsObjectVSPath to make a relative path name starting with project.
  56. #
  57. method ContSystem::vsFileVSPath {this name type} {
  58.     set systemPath [ContSystem::vsObjectVSPath $this]
  59.     set filePath [path_name concat $systemPath [$this getFileName $name $type]]
  60.     return $filePath
  61. }
  62.  
  63. proc ContSystem::createVSPath {path} {
  64.     VSSystem::createVSPath ContSystem $path
  65. }
  66.  
  67. proc ContSystem::createUserPath {path} {
  68.     VSSystem::createUserPath ContSystem $path
  69. }
  70.  
  71.  
  72. # Use default method, strip home directory and make a path to the work area.
  73. #
  74. proc ContSystem::vsObjectUserPath {object} {
  75.     set projectPath [ContSystem::vsObjectVSPath $object]
  76.     set project [lindex [file_split $projectPath] 0]
  77.  
  78.     set workingVersions [ContCommand::getWorkingProjectVersions $project]
  79.     set versionCount [llength $workingVersions]
  80.     if { $versionCount == 0 } {
  81.     vsCommandHandler error "No working versions of Project $project found"
  82.     return ${ContCommand::ccmWorkArea}
  83.     }
  84.  
  85.     # if M4_cont_projects is set use the indicated version if it is a 
  86.     # working one
  87.     set version ""
  88.     set selectedVersions [m4_var get M4_cont_projects] 
  89.     if { $selectedVersions != "" } {
  90.     foreach projectVersion $selectedVersions {
  91.         regexp {(.*)-([^-]*)$} $projectVersion \
  92.             dummy selectedProject selectedVersion
  93.         if { ($selectedProject == $project) && \
  94.             ([lsearch -exact $workingVersions $selectedVersion] != -1 ) } {
  95.         set version $selectedVersion
  96.         break
  97.         }
  98.     }
  99.     }
  100.  
  101.     # version selection: use last working version
  102.     if { $version == "" } {
  103.     set version [lindex $workingVersions [expr $versionCount -1]]
  104.     }
  105.  
  106.     set projectVersion "$project\-$version"
  107.     global ContCommand::ccmWorkArea
  108.     set projectVersionPath [path_name concat\
  109.     ${ContCommand::ccmWorkArea} $projectVersion] 
  110.     set fullPath [path_name concat $projectVersionPath $projectPath]
  111.  
  112.     # final sanity check 
  113.     if { ![file isdirectory $projectVersionPath] } {
  114.     vsCommandHandler error "Project version $projectVersion not found in Work Area"
  115.     }
  116.  
  117.     return $fullPath
  118. }
  119.  
  120.  
  121. # Returns path of object, first component is project.
  122. #
  123. proc ContSystem::vsObjectVSPath {object} {
  124.     # get default path
  125.     if [$object isA SystemVersion] {
  126.     set objectPath [$object SystemVersion::path]
  127.     } elseif [$object isA ConfigVersion] {
  128.     set objectPath [$object ConfigVersion::path]
  129.     } else {
  130.     set objectPath [$object path]
  131.     }
  132.  
  133.     # strip homedir
  134.     set homeDir [M4Login::getHomeDir]
  135.     set projectPathIndex [expr [string length $homeDir] +1]
  136.     set projectPath [string range $objectPath $projectPathIndex end]
  137.     return $projectPath
  138. }
  139.  
  140.  
  141. # Return user environment path of this system
  142. # using vsObjectUserPath.
  143. #
  144. method ContSystem::vsUserPath {this} {
  145.     return [ContSystem::vsObjectUserPath $this]
  146. }
  147.  
  148.  
  149. # Return vcm system path of this system using
  150. # vsObjectVSPath.
  151. #
  152. method ContSystem::vsVsPath {this} {
  153.     return [ContSystem::vsObjectVSPath $this]
  154. }
  155.  
  156.  
  157. # Returns a list of Continuus controlled files
  158. # int the directories specified by pathList.
  159. #
  160. method ContSystem::fileList {this pathList} {
  161.     return [ContCommand::shortListing $pathList]
  162. }
  163.  
  164.  
  165. # Extracts the currently selected project version
  166. # from the system user path and returns it.
  167. #
  168. method ContSystem::currentProjectVersion {this} {
  169.     set systemPath [$this path]
  170.     global ContCommand::ccmWorkArea 
  171.     set index [expr [string length ${ContCommand::ccmWorkArea}]+1]
  172.     set pathParts [file_split [string range $systemPath $index end]]
  173.     # now first path component after work area is project version
  174.     if { [llength $pathParts] > 0 } {
  175.     return [lindex $pathParts 0]
  176.     } else {
  177.     return "None"
  178.     }
  179. }
  180.  
  181. proc ContSystem::renameVSDirectory {oldPath newPath} {
  182.     set renameCommand [ContCommand::rename $oldPath $newPath]
  183.     return [vsCommandHandler execute $renameCommand]
  184. }
  185.  
  186.  
  187. # Do nothing: Continuus dirs are always
  188. # created through the work area.
  189. #
  190. proc ContSystem::createVSDirectory {path} {
  191. }
  192.  
  193.  
  194. # Create the specified path as Continuus directory element.
  195. # All pathname components except the last 
  196. # one must already exist.
  197. #
  198. proc ContSystem::createUserDirectory {path} {
  199.     set comment "Created by ObjectTeam"
  200.     set mkdirCommand [ContCommand::createObject $path dir $comment 0]
  201.     return [vsCommandHandler execute $mkdirCommand]
  202. }
  203.  
  204.  
  205. # Return whether the given user path is a directory in the Continuus
  206. # environment.
  207. #
  208. proc ContSystem::directoryExists {path} {
  209.     return [file isdirectory $path]
  210. }
  211.  
  212.  
  213. # Return whether file with given name and type exists in the VCM environment.
  214. #
  215. method ContSystem::fileExists {this name type} {
  216.     set filePath [$this vsFileUserPath $name $type]
  217.     return [file exists $filePath]
  218. }
  219.  
  220.  
  221. # Move file to this system and return
  222. # resulting object on success.
  223. #
  224. method ContSystem::move {this vsFile} {
  225.     if [[$vsFile systemVersion] isA ContSystem] {
  226.     set destDir [$this path]
  227.     # create directory if necessary
  228.     if { ![file isdirectory $destDir] } {
  229.         if { ![ContSystem::createUserPath $destDir] } {
  230.         return 0
  231.         }
  232.     }
  233.     set renameCommand [ContCommand::rename [$vsFile path] [$this path]]
  234.     return [vsCommandHandler execute $renameCommand]
  235.     }
  236.  
  237.     # source is not continuus: copy and delete
  238.     if { [$this VSSystem::copy $vsFile] != "" } {
  239.     return [$vsFile removeFromVS]
  240.     }
  241.  
  242.     return 0
  243. }
  244.  
  245. # Do not delete this line -- regeneration end marker
  246.  
  247.