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

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)ccsysvdbob.tcl    /main/hindenburg/10
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)ccsysvdbob.tcl    /main/hindenburg/10   6 Jun 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. require_module_file "newccfiled.tcl" clearcase
  13. require_module_file "ccsetconfi.tcl" clearcase
  14. require_module_file "cccreatebr.tcl" clearcase
  15. require_module_file "ccdestroyb.tcl" clearcase
  16. require_module_file "ccunchecko.tcl" clearcase
  17. require_module_file "cccheckout.tcl" clearcase
  18. require_module_file "cccheckind.tcl" clearcase
  19. require_module_file "ccnewbranch.tcl" clearcas
  20. require_module_file "ccremovebr.tcl" clearcase
  21. require_module_file "ccchangeco.tcl" clearcase
  22. require_module_file "vssysdialo.tcl" clearcase
  23. require_module_file "yesnodialo.tcl" vcm
  24. require platform.tcl
  25. # End user added include file section
  26.  
  27. require_module_file "ccsystem.tcl" clearcase
  28. require_module_file "vssysvdbob.tcl" vcm
  29.  
  30. # This class represents a system with ClearCase files in the browser.
  31.  
  32. Class CCSysVDbObj : {CCSystem VSSysVDbObj} {
  33.     constructor
  34.     method destructor
  35.     method promoter
  36.     method promoteFile
  37.     method path
  38.     method localFileVersions
  39.     method copy
  40.     method addCCFile
  41.     method vsFiles
  42.     method fileList
  43.     method checkOutFiles
  44.     method checkInFiles
  45.     method checkInDirectories
  46.     method unCheckOutFiles
  47.     method createBranch
  48.     method destroyBranch
  49.     method createBranchType
  50.     method destroyBranchType
  51.     method listCheckOuts
  52.     method unreserveFiles
  53.     method reserveFiles
  54.     method changeFileComment
  55.     method showView
  56.     method changeView
  57.     method showConfigSpec
  58.     method changeConfigSpec
  59.     method setConfigSpec
  60.     method configClearmake
  61.     method startClearCase
  62.     method initializeVCMVars
  63.  
  64.     # Used to hold information about files in this system:
  65.     # path to Status, Version and Rule. Used for performance reasons.
  66.     #
  67.     attribute ccFileInfoDict
  68. }
  69.  
  70. global CCSysVDbObj::triedViewStart
  71. set CCSysVDbObj::triedViewStart 0
  72.  
  73.  
  74. constructor CCSysVDbObj {class this name i_name} {
  75.     set this [CCSystem::constructor $class $this $name]
  76.     set this [VSSysVDbObj::constructor $class $this $i_name]
  77.     # Start constructor user section
  78.     # End constructor user section
  79.     return $this
  80. }
  81.  
  82. method CCSysVDbObj::destructor {this} {
  83.     # Start destructor user section
  84.     # End destructor user section
  85.     $this CCSystem::destructor
  86.     $this VSSysVDbObj::destructor
  87. }
  88.  
  89.  
  90. # Reuse associations of VSSysVDbObj.
  91. #
  92. proc CCSysVDbObj::associations {} {
  93.     return [VSSysVDbObj::associations]
  94. }
  95.  
  96.  
  97. # Reuse childTypes of VSSysVDbObj.
  98. #
  99. proc CCSysVDbObj::childTypes {assoc} {
  100.     return [VSSysVDbObj::childTypes $assoc]
  101. }
  102.  
  103.  
  104. # Reuse controlledLists of VSSysVDbObj.
  105. #
  106. proc CCSysVDbObj::controlledLists {} {
  107.     return [VSSysVDbObj::controlledLists]
  108. }
  109.  
  110.  
  111. # Reuse info properties of VSSysVDbObj.
  112. #
  113. proc CCSysVDbObj::infoProperties {} {
  114.     return [VSSysVDbObj::infoProperties]
  115. }
  116.  
  117. method CCSysVDbObj::promoter {this} {
  118.     $this ccFileInfoDict [Dictionary new]
  119.     # determine view
  120.     set view [m4_var get M4_ccase_view]
  121.     if { $view == "" } {
  122.     set view [CCCommand::getWorkingView]
  123.     if { $view != "" } {
  124.         m4_var set M4_ccase_view $view
  125.     }
  126.     } else {
  127.     # start view if necessary, make sure to try only once
  128.     if { ![CCCommand::viewIsActive $view] } {
  129.         global CCSysVDbObj::triedViewStart
  130.         if { !${CCSysVDbObj::triedViewStart} } {
  131.         set CCSysVDbObj::triedViewStart 1
  132.         wmtkmessage "Starting view $view..."
  133.         CCCommand::startView $view
  134.         wmtkmessage ""
  135.         }
  136.     }
  137.     }
  138.  
  139.     $this VSSysVDbObj::promoter
  140. }
  141.  
  142.  
  143. # Promotes file to a CCFileUiObj.
  144. #
  145. method CCSysVDbObj::promoteFile {this file} {
  146.     CCFileUiObj promote $file
  147. }
  148.  
  149.  
  150. # Redefine to call path of CCSystem.
  151. #
  152. method CCSysVDbObj::path {this} {
  153.     return [$this CCSystem::path]
  154. }
  155.  
  156.  
  157. # Resolve ambiguity: call localFileVersions of CCSystem.
  158. #
  159. method CCSysVDbObj::localFileVersions {this} {
  160.     return [$this CCSystem::localFileVersions]
  161. }
  162.  
  163.  
  164. # Call copy of VSSysVdbObj.
  165. #
  166. method CCSysVDbObj::copy {this args} {
  167.     eval $this VSSysVDbObj::copy $args
  168. }
  169.  
  170.  
  171. # Pop up dialog for specifying a new ClearCase file.
  172. #
  173. method CCSysVDbObj::addCCFile {this} {
  174.     set box .main.newCCFile
  175.     if { ![isCommand $box] } {
  176.     NewCCFileDialog new $box
  177.     }
  178.     $box popUp
  179. }
  180.  
  181.  
  182. # Redefinition to perform system initialization and cache updates.
  183. #
  184. method CCSysVDbObj::vsFiles {this} {
  185.     # read custom files for this system
  186.     if { ![$this initializedCustomization] } {
  187.     $this initializeCustomization
  188.     }
  189.     $this initializeVCMVars
  190.  
  191.     # sanity check for view
  192.     if { [m4_var get M4_ccase_view] == "" } {
  193.     wmtkwarning "No view set or specified in M4_ccase_view\nPlease use Change View in the ClearCase menu to select a view"
  194.     return
  195.     } 
  196.  
  197.     set files [$this CCSystem::vsFiles]
  198.     $this updateFileInfo $files
  199.     return $files
  200. }
  201.  
  202.  
  203. # Returns a list of ClearCase controlled files in the
  204. # directories specified by pathList and
  205. # fills ccFileInfoDict with additional info about the files.
  206. #
  207. method CCSysVDbObj::fileList {this pathList} {
  208.     # refresh ccFileInfoDict
  209.     foreach name [[$this ccFileInfoDict] names]  {
  210.     [$this ccFileInfoDict] unset $name
  211.     }
  212.  
  213.     CCCommand::longListing $pathList [$this ccFileInfoDict]
  214.     set fileList {}
  215.     foreach fileName [[$this ccFileInfoDict] names] {
  216.     lappend fileList [path_name file $fileName]
  217.     }
  218.  
  219.     return $fileList
  220. }
  221.  
  222.  
  223. # Pops up checkout dialog to specify comments and checks out the selected files.
  224. # Reserved indicates the type of checkout requested.
  225. #
  226. method CCSysVDbObj::checkOutFiles {this reserved} {
  227.     if { ![isCommand .main.checkout] } {
  228.     CCCheckOutDialog new .main.checkout
  229.     }
  230.  
  231.     .main.checkout reserved $reserved
  232.     .main.checkout popUp
  233. }
  234.  
  235.  
  236. # Pops up dialog to specify comments for selected files. A check button
  237. # allows reuse of the checkout comments.
  238. #
  239. method CCSysVDbObj::checkInFiles {this} {
  240.     if [isCommand .main.checkin] {
  241.     set newSelection [.main selectedObjSet]
  242.     set oldSelection [.main.checkin selectedFiles]
  243.     if { [llength $oldSelection] != [llength $newSelection] } {
  244.         .main.checkin.col delete
  245.         .main.checkin delete
  246.     }
  247.     }
  248.  
  249.     if { ![isCommand .main.checkin] } {
  250.     CCCheckInDialog new .main.checkin
  251.     }
  252.  
  253.     .main.checkin popUp
  254. }
  255.  
  256.  
  257. # Collects directories in system path that
  258. # are checked out, lists them for confirmation
  259. # and checks them in.
  260. #
  261. method CCSysVDbObj::checkInDirectories {this} {
  262.     # get paths
  263.     set pathList {}
  264.     foreach file [$this CCSystem::vsFiles] {
  265.     set filePath [path_name directory [$file path]]
  266.     set existsInList 0
  267.     foreach path $pathList {
  268.         if { [file_split $path] == [file_split $filePath] } {
  269.         set existsInList 1
  270.         }
  271.     }
  272.     if !$existsInList {
  273.         lappend pathList $filePath
  274.     }
  275.     }
  276.  
  277.     # get checked out directories
  278.     set checkedOutList {}
  279.     while { [llength $pathList] > 0 } {
  280.     set newPaths {}
  281.     foreach path $pathList {
  282.         if [CCCommand::isCheckedOut $path] {
  283.         lappend newPaths [path_name directory $path]
  284.         lappend checkedOutList $path
  285.         }
  286.     }
  287.     set pathList $newPaths
  288.     }
  289.  
  290.     if { ![llength $checkedOutList] } {
  291.     wmtkinfo "The directories of this system are checked in"
  292.     return
  293.     }
  294.     
  295.     if { ![isCommand .main.checkindirectories] } {
  296.     require_module_file "ccdircheck.tcl" clearcase
  297.     CCDirCheckInDialog new .main.checkindirectories
  298.     }
  299.  
  300.     .main.checkindirectories directories $checkedOutList
  301.     .main.checkindirectories popUp
  302. }
  303.  
  304.  
  305. # Pops up dialog to ask whether a private copies must be kept and 
  306. # removes the checkouts of the files.
  307. #
  308. method CCSysVDbObj::unCheckOutFiles {this} {
  309.     if { ![isCommand .main.uncheckout] } {
  310.     CCUncheckOutDialog new .main.uncheckout
  311.     }
  312.  
  313.     .main.uncheckout popUp
  314. }
  315.  
  316.  
  317. # Pops up a dialog that allows selection of a branch and specification of a comment.
  318. #
  319. method CCSysVDbObj::createBranch {this} {
  320.     set branches [CCCommand::getBranchTypes [$this path]]
  321.     if { $branches == "" } {
  322.     vsCommandHandler error "There are no branches to select from"
  323.     return
  324.     }
  325.  
  326.     if { ![isCommand .main.createbranch] } {
  327.     CCCreateBranchDialog new .main.createbranch
  328.     }
  329.  
  330.     .main.createbranch branches $branches
  331.     .main.createbranch popUp
  332. }
  333.  
  334.  
  335. # Pops up confirmation dialog and removes branch if requested.
  336. #
  337. method CCSysVDbObj::destroyBranch {this} {
  338.     set selectedFile [lindex [.main selectedObjSet] 0]
  339.     set extendedPath "[$selectedFile path]\@\@[$selectedFile getInfo Version]"
  340.     # strip version number to get branch name
  341.     regsub {[\\\/][0-9]+} $extendedPath "" branch
  342.  
  343.     if { ![isCommand .main.destroybranch] } {
  344.     CCDestroyBranchDialog new .main.destroybranch
  345.     }
  346.  
  347.     set warning [CCCommand::getRemoveBranchWarning $branch]
  348.     if { $warning == "" } {
  349.     return
  350.     }
  351.  
  352.     .main.destroybranch message $warning
  353.     .main.destroybranch branch $branch
  354.     .main.destroybranch popUp
  355. }
  356.  
  357.  
  358. # Pops up dialog to specify branch name and creation comments.
  359. # Branch is created in vob indicated by system path.
  360. #
  361. method CCSysVDbObj::createBranchType {this} {
  362.     if { ![isCommand .main.createbranchtype] } {
  363.     CCNewBranchDialog new .main.createbranchtype
  364.     }
  365.  
  366.     .main.createbranchtype vobPath [$this path]
  367.     .main.createbranchtype popUp
  368. }
  369.  
  370.  
  371. # Pops up list of branches and destroy selected branches.
  372. #
  373. method CCSysVDbObj::destroyBranchType {this} {
  374.     set branches [CCCommand::getBranchTypes [$this path]]
  375.     if { $branches == "" } {
  376.     vsCommandHandler error "There are no branches to select from"
  377.     return
  378.     }
  379.  
  380.     if { ![isCommand .main.destroybranchtype] } {
  381.     CCRemoveBranchTypeDialog new .main.destroybranchtype
  382.     }
  383.  
  384.     .main.destroybranchtype vobPath [$this path]
  385.     .main.destroybranchtype branches $branches
  386.     .main.destroybranchtype popUp
  387. }
  388.  
  389.  
  390. # Pops up an information dialog with the checkouts of all selected files.
  391. #
  392. method CCSysVDbObj::listCheckOuts {this} {
  393.     set selectedFilePath [[lindex [.main selectedObjSet] 0] path]
  394.     set checkOutCommand [CCCommand::listCheckout $selectedFilePath]
  395.     if { ![vsCommandHandler executeSilent $checkOutCommand] } {
  396.     return
  397.     }
  398.  
  399.     set checkOuts "[$checkOutCommand output]"
  400.     if { $checkOuts == "" } {
  401.     set checkOuts "None"
  402.     }
  403.  
  404.     set message "Checkouts of $selectedFilePath:\n\n$checkOuts"
  405.     wmtkinfo "$message"
  406. }
  407.  
  408.  
  409. # Changes the checkout status of the files from reserved to unreserved.
  410. #
  411. method CCSysVDbObj::unreserveFiles {this} {
  412.     if { ![isCommand .main.unreserve] } {
  413.     VSSysDialog new .main.unreserve
  414.     .main.unreserve vsMethod { $file unreserve }
  415.     }
  416.  
  417.     .main.unreserve selectedFiles [.main selectedObjSet]
  418.     .main.unreserve processFiles
  419. }
  420.  
  421.  
  422. # Changes the checkout status of the files from unreserved to reserved.
  423. #
  424. method CCSysVDbObj::reserveFiles {this} {
  425.     if { ![isCommand .main.reserve] } {
  426.     VSSysDialog new .main.reserve
  427.     .main.reserve vsMethod { $file reserve }
  428.     }
  429.  
  430.     .main.reserve selectedFiles [.main selectedObjSet]
  431.     .main.reserve processFiles
  432. }
  433.  
  434.  
  435. # Pops up a dialog with the old comment of the file and allows edit.
  436. #
  437. method CCSysVDbObj::changeFileComment {this} {
  438.     if { ![isCommand .main.changecomment] } {
  439.     CCChangeCommentDialog new .main.changecomment
  440.     }
  441.  
  442.     .main.changecomment popUp
  443. }
  444.  
  445.  
  446. # Show the current view in an information dialog.
  447. #
  448. method CCSysVDbObj::showView {this} {
  449.     set view [m4_var get M4_ccase_view]
  450.     if { $view == "" } {
  451.     set view "None"
  452.     }
  453.  
  454.     InfoDialog new .main.viewinfo \
  455.         -title "Current view" \
  456.         -message "$view" \
  457.         -okPressed { %this delete }
  458.  
  459.     .main.viewinfo delHelpButton
  460.     .main.viewinfo popUp
  461. }
  462.  
  463.  
  464. # Shows a list with active views and allows selection of a view or specification of a different one.
  465. # Sets the view if possible.
  466. #
  467. method CCSysVDbObj::changeView {this} {
  468.     set views [CCCommand::getActiveViews]
  469.     set currentView [m4_var get M4_ccase_view]
  470.     $this updatePath
  471.     interface TemplateDialog .main.activeviews {
  472.     title "Change View"
  473.     modal 1
  474.     DropDwnComboBox viewlist { 
  475.     }
  476.     }
  477.  
  478.     .main.activeviews.viewlist config \
  479.         -entrySet $views \
  480.         -text $currentView
  481.  
  482.     .main.activeviews okPressed {
  483.     set selectedView [string trim [%this.viewlist text]]
  484.     # check if specified view was one of the active views
  485.     set viewOk 0
  486.     if { [lsearch [%this.viewlist entrySet] $selectedView] != -1 } {
  487.         set viewOk 1
  488.     } else {
  489.         # specified view was not active, try to start it
  490.         if [CCCommand::startView $selectedView] {
  491.         set viewOk 1
  492.         }
  493.     }
  494.  
  495.     if { $viewOk } {
  496.         m4_var set M4_ccase_view $selectedView
  497.         .main updateView
  498.     }
  499.     %this delete
  500.     }
  501.  
  502.     .main.activeviews delHelpButton
  503.     .main.activeviews popUp
  504. }
  505.  
  506.  
  507. # Shows the config spec of the current view.
  508. #
  509. method CCSysVDbObj::showConfigSpec {this} {
  510.     set view [m4_var get M4_ccase_view]
  511.     if { $view == "" } {
  512.     vsCommandHandler error "No view specified"
  513.     return
  514.     }
  515.  
  516.     set configSpec [CCCommand::getConfigSpec $view]
  517.     # error handling is done by getConfigSpec so return if
  518.     # the config spec is empty
  519.     if { $configSpec == "" } {
  520.     return
  521.     }
  522.  
  523.     InfoDialog new .main.configspec \
  524.         -title "Config spec" \
  525.         -message $configSpec \
  526.         -okPressed { %this delete }
  527.  
  528.     .main.configspec delHelpButton
  529.     .main.configspec popUp
  530. }
  531.  
  532.  
  533. # Allows edit of the config spec of the current view and sets it after confirmation.
  534. #
  535. method CCSysVDbObj::changeConfigSpec {this} {
  536.     set view [m4_var get M4_ccase_view]
  537.     if { $view== "" } {
  538.     vsCommandHandler error "No view specified"
  539.     return
  540.     }
  541.  
  542.     # get config spec, copy to temporary file and start editor
  543.     set currentConfigSpec [CCCommand::getConfigSpec $view]
  544.     set tmpFile [args_file {}]
  545.     BasicFS::writeFile $tmpFile $currentConfigSpec
  546.     .main startM4Command editor "$tmpFile" \
  547.         "$this setConfigSpec [list $tmpFile]" "$tmpFile"
  548. }
  549.  
  550.  
  551. # Sets the config spec of the current view to the
  552. # the specified file.
  553. #
  554. method CCSysVDbObj::setConfigSpec {this configSpecFile} {
  555.     # callback from config spec editor
  556.     set view [m4_var get M4_ccase_view]
  557.  
  558.     # this dialog asks confirmation and sets config spec
  559.     CCSetConfigSpecDialog new .main.setconfigspec \
  560.         -view $view \
  561.         -file $configSpecFile
  562.  
  563.     .main.setconfigspec popUp
  564. }
  565.  
  566. method CCSysVDbObj::configClearmake {this} {
  567.     interface EntryDialog .main.configclearmake {
  568.     title "Configure Clearmake"
  569.     message "Default Clearmake options:"
  570.     modal 1
  571.     }
  572.  
  573.     .main.configclearmake entry [m4_var get M4_cmake_options]
  574.     .main.configclearmake okPressed {
  575.     set options [%this entry]
  576.     # set make command: clearmake for unix, omake for Windows
  577.     if $win95 {
  578.         set makeCommand "omake $options"
  579.     } else {
  580.         set makeCommand "clearmake $options"
  581.     }
  582.     [[ClientContext::global] currentConfig] \
  583.         setProperty makeCommand $makeCommand
  584.     m4_var set M4_cmake_options $options
  585.     }
  586.  
  587.     .main.configclearmake delHelpButton
  588.     .main.configclearmake popUp
  589.     
  590. }
  591.  
  592.  
  593. # Starts the graphical clearcase environment in the system path.
  594. #
  595. method CCSysVDbObj::startClearCase {this} {
  596.     if $win95 {
  597.     set command "wclearcase"
  598.     } else {
  599.     set command "xclearcase"
  600.     }
  601.  
  602.     set command "$command -file [quoteIf [$this path]]"
  603.     system "$command &"
  604. }
  605.  
  606.  
  607. # Not needed for ClearCase.
  608. #
  609. method CCSysVDbObj::initializeVCMVars {this} {
  610.     #empty
  611. }
  612.  
  613. # Do not delete this line -- regeneration end marker
  614.  
  615.