home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / mtprocs.tcl < prev    next >
Text File  |  1997-11-20  |  6KB  |  206 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Cayenne Software Inc.    1997
  4. #
  5. #      File:           @(#)mtprocs.tcl    /main/titanic/11
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)mtprocs.tcl    /main/titanic/11   20 Nov 1997 Copyright 1997 Cayenne Software Inc.
  10.  
  11. # Start user added include file section
  12. # End user added include file section
  13.  
  14.  
  15. Class MTProcs : {Object} {
  16.     constructor
  17.     method destructor
  18. }
  19.  
  20. constructor MTProcs {class this name} {
  21.     set this [Object::constructor $class $this $name]
  22.     # Start constructor user section
  23.     # End constructor user section
  24.     return $this
  25. }
  26.  
  27. method MTProcs::destructor {this} {
  28.     # Start destructor user section
  29.     # End destructor user section
  30. }
  31.  
  32. proc MTProcs::isDerived {fromVersion toVersion} {
  33.     if {! [isCommand $toVersion]} {
  34.         # no possible merge
  35.         return 0
  36.     }
  37.  
  38.     if [$toVersion isA Version] {
  39.         if {$toVersion == $fromVersion ||
  40.         [$toVersion commonBaseVersion $fromVersion] == $fromVersion} {
  41.         return 1
  42.         }
  43.         return 0
  44.     }
  45.  
  46.     if {[$toVersion versionNumber] >= [$fromVersion versionNumber]} {
  47.         return 1
  48.     }
  49.     return 0
  50. }
  51.  
  52. proc MTProcs::needMerge {fromVersion toVersions} {
  53.  
  54.     set toVersion [MTProcs::findToObject $fromVersion $toVersions]
  55.     if [MTProcs::isDerived $fromVersion $toVersion] {
  56.         return ok
  57.     }
  58.  
  59.     return $toVersion
  60. }
  61.  
  62. proc MTProcs::needImport {fromVersion parent} {
  63.  
  64.     if [$fromVersion isA PhaseVersion] {
  65.     set toVersion [.main toPhase]
  66.     } else {
  67.     set toParVer [$parent toRepObj]
  68.     if {$toParVer == ""} {
  69.         return ""
  70.     }
  71.     if [$fromVersion isA SystemVersion] {
  72.         set sysName [[$fromVersion system] name]
  73.         set sysType [[$fromVersion system] type]
  74.         set toVersion [$toParVer findSystemVersion $sysName $sysType]
  75.     } elseif [$fromVersion isA FileVersion] {
  76.         set fileName [[$fromVersion file] qualifiedName]
  77.         set fileType [[$fromVersion file] type]
  78.         set toVersion [$toParVer findFileVersion $fileName $fileType]
  79.     } elseif [$fromVersion isA CustomFileVersion] {
  80.         set fileName [[$fromVersion customFile] name]
  81.         set fileType [[$fromVersion customFile] type]
  82.         set toVersion [$toParVer findCustomFileVersion $fileName $fileType]
  83.     } elseif [$fromVersion isA GroupVersion] {
  84.         set groupName [[$fromVersion group] name]
  85.         set toVersion [$toParVer findGroupVersion $groupName]
  86.     } elseif [$fromVersion isA CorporateGroupVersion] {
  87.         set corpgName [[$fromVersion corporateGroup] name]
  88.         set links [$toParVer corporateGroupVersionLinkList]
  89.         set link [$links find -byName $corpgName]
  90.         if [$link isNil] {
  91.         return ""
  92.         }
  93.         set toVersion [$link corporateGroupVersion]
  94.     } else  {
  95.         return ""
  96.     }
  97.     }
  98.  
  99.     if [$toVersion isNil] {
  100.     return ""
  101.     }
  102.  
  103.     # Only ok if to-version is derived from from-version
  104.     if [MTProcs::isDerived $fromVersion $toVersion] {
  105.     return ok
  106.     }
  107.  
  108.     return $toVersion
  109. }
  110.  
  111. proc MTProcs::findToObject {fromVersion toVersions} {
  112.  
  113.     if [$fromVersion isA CorporateGroupVersion] {
  114.         set from [$fromVersion corporateGroup]
  115.         set toVersion [query "corporateGroup == $from" $toVersions]
  116.     } else {
  117.         set from [$fromVersion object]
  118.         set toVersion [query "object == $from" $toVersions]
  119.     }
  120.     return $toVersion
  121. }
  122.  
  123. proc MTProcs::createMergeLink {mergeObjects comment} {
  124.     foreach mergeObject $mergeObjects {
  125.         set fromVersion [$mergeObject fromRepObj]
  126.         set toVersion [$mergeObject toRepObj]
  127.  
  128.         MTProcs::freeze $fromVersion "Frozen to create mergelink"
  129.         set toVersion [MTProcs::makeToWorking $mergeObject]
  130.         if {$toVersion != ""} {
  131.             $toVersion createMergeLink $fromVersion $comment
  132.         }
  133.     }
  134. }
  135.  
  136. proc MTProcs::makeToWorking {mergeObject} {
  137.  
  138.     set version [$mergeObject toRepObj]
  139.  
  140.     if {[$version status] == "working"} {
  141.         return $version
  142.     }
  143.  
  144.     set parent [$mergeObject parent]
  145.  
  146.     set name [$version getInfo Name].[$version getInfo Type]
  147.     set warning "Creation of new version of '$name' failed"
  148.  
  149.     if {$parent == ""} {
  150.         wmtkwarning "$warning: no parent found."
  151.         return ""
  152.     }
  153.  
  154.     set parentVersion [$parent toRepObj]
  155.     if {[$parentVersion isA Version] &&
  156.          $parentVersion != "" && [$parentVersion status] != "working"} {
  157.         set parentVersion [MTProcs::makeToWorking $parent]
  158.         if {$parentVersion == ""} {
  159.             wmtkwarning $warning
  160.             return ""
  161.         }
  162.     }
  163.  
  164.     set config [.main toConfig]
  165.  
  166.     if [$version isA FileVersion] {
  167.         set new [$parentVersion derive -fileVersion $version $config]
  168.     } elseif [$version isA SystemVersion] {
  169.         set new [$parentVersion derive -systemVersion $version $config]
  170.         .main toSystem $new
  171.     } elseif [$version isA PhaseVersion] {
  172.         set new [$parentVersion derive -phaseVersion $version]
  173.         .main toPhase $new
  174.     } elseif [$version isA ConfigVersion] {
  175.         set new [$version derive -self]
  176.         .main toConfig $new
  177.     } elseif [$version isA GroupVersion] {
  178.         set new [$parentVersion derive -groupVersion $version $config]
  179.     } elseif [$version isA CustomFileVersion] {
  180.         set new [$parentVersion derive -customFileVersion $version]
  181.     } else {
  182.         wmtkerror "$warning: unkown class name."
  183.  
  184.         return ""
  185.     }
  186.  
  187.     # update rep information
  188.     $mergeObject toRepObj $new
  189.     return $new
  190. }
  191.  
  192. proc MTProcs::freeze {version comment} {
  193.  
  194.     # check if the element is frozen, if not freeze it
  195.     if {[$version status] == "working"} {
  196.         $version freeze $comment
  197.     }
  198. }
  199.  
  200. proc MTProcs::showHelpOnContext {} {
  201.     .main helpOnName mergeTool
  202. }
  203.  
  204. # Do not delete this line -- regeneration end marker
  205.  
  206.