Tools__ChangeSetDiffTool.st
branchjv
changeset 12179 47f98e7d6de1
parent 12128 a7ff7d66ee85
child 12192 15f47901fb64
--- a/Tools__ChangeSetDiffTool.st	Fri Mar 09 23:06:58 2012 +0000
+++ b/Tools__ChangeSetDiffTool.st	Fri Mar 16 17:08:17 2012 +0000
@@ -31,14 +31,16 @@
 	instanceVariableNames:'listHolder singleSelectionHolder diffsetHolder titleHolder
 		firstColSelectionHolder navigatorPanelSpecHolder diffMenuHolder
 		diffsetHolderPrivate selectionHolder versionATextHolder
-		versionBTextHolder'
+		versionBTextHolder versionBaseTextHolder textDiffToolHolder
+		textDiffToolWindowSpecHolder'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Interface-Diff'
 !
 
 SimpleDialog subclass:#OpenDialog
-	instanceVariableNames:'doAcceptEnabled changesetSpecAHolder changesetSpecBHolder'
+	instanceVariableNames:'doAcceptEnabled changesetSpecAHolder changesetSpecBHolder
+		changesetSpecBaseHolder'
 	classVariableNames:'LastDirectory'
 	poolDictionaries:''
 	privateIn:ChangeSetDiffTool
@@ -73,6 +75,65 @@
  OTHER DEALINGS IN THE SOFTWARE.
 
 "
+!
+
+documentation
+"
+    Tool for viewing/merging differences between two change sets
+
+    [author:]
+        Jan Vrany <jan.vrany@fit.cvut.cz>
+
+    [instance variables:]
+
+    [class variables:]
+
+    [see also:]
+
+"
+!
+
+examples
+"
+  Starting the application:
+                                                                [exBegin]
+    Tools::ChangeSetDiffTool open
+
+                                                                [exEnd]
+
+  Show differences between CVS HEAD and SVN jv-branch 
+  NewSystemBrowser:
+                                                                [exBegin]
+    | cvsCs svnCs |
+
+    cvsCs := ChangeSet fromFile:'/home/jv/Private/Projects/SmalltalkX/sources/branches/exept@HEAD/stx/libtool/Tools__NewSystemBrowser.st'.
+    svnCs := ChangeSet fromFile:'/home/jv/Private/Projects/SmalltalkX/sources/branches/jv2/build/stx/libtool/Tools__NewSystemBrowser.st'.
+
+    Tools::ChangeSetDiffTool new
+        open;
+        fileMenuOpenOnDiffBetween: cvsCs and: svnCs.
+
+                                                                [exEnd]
+
+  Show differences between CVS HEAD and SVN jv-branch and
+  base version of NewSystemBrowser:
+
+                                                                [exBegin]
+    | cvsBaseCs cvsCs svnCs |
+
+    cvsBaseCs := ChangeSet fromFile:'/home/jv/Private/Projects/SmalltalkX/sources/branches/exept@2012-01-01/stx/libtool/Tools__NewSystemBrowser.st'.
+    cvsCs := ChangeSet fromFile:'/home/jv/Private/Projects/SmalltalkX/sources/branches/exept@HEAD/stx/libtool/Tools__NewSystemBrowser.st'.
+    svnCs := ChangeSet fromFile:'/home/jv/Private/Projects/SmalltalkX/sources/branches/jv2/build/stx/libtool/Tools__NewSystemBrowser.st'.
+
+    Tools::ChangeSetDiffTool new
+        open;
+        fileMenuOpenOnDiffBetween: cvsCs and: svnCs base: cvsBaseCs
+
+                                                                [exEnd]
+
+
+
+"
 ! !
 
 !ChangeSetDiffTool class methodsFor:'accessing - defaults'!
@@ -351,7 +412,7 @@
           label: 'Diff Browser'
           name: 'Diff Browser'
           min: (Point 10 10)
-          bounds: (Rectangle 0 0 665 397)
+          bounds: (Rectangle 0 0 1024 768)
           menu: mainMenu
         )
         component: 
@@ -380,29 +441,9 @@
                     name: 'TextDiff'
                     majorKey: #'Tools::TextDiffTool'
                     minorKey: windowSpecForEmbedding
-                    subAspectHolders: 
-                   (Array
-                      
-                     (SubChannelInfoSpec
-                        subAspect: labelAHolder
-                        aspect: versionALabelHolder
-                      ) 
-                     (SubChannelInfoSpec
-                        subAspect: labelBHolder
-                        aspect: versionBLabelHolder
-                      )
-                      
-                     (SubChannelInfoSpec
-                        subAspect: textAHolder
-                        aspect: versionATextHolder
-                      ) 
-                     (SubChannelInfoSpec
-                        subAspect: textBHolder
-                        aspect: versionBTextHolder
-                      )
-                    )
-                    createNewApplication: true
-                    createNewBuilder: true
+                    specHolder: textDiffToolWindowSpecHolder
+                    clientHolder: textDiffToolHolder
+                    createNewBuilder: false
                   )
                  )
                
@@ -788,6 +829,42 @@
     "Modified: / 20-11-2009 / 19:54:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!ChangeSetDiffTool methodsFor:'accessing - subapps'!
+
+textDiff2Tool
+
+    ^TextDiff2Tool new
+        labelAHolder: self versionALabelHolder;
+         textAHolder: self versionATextHolder;
+
+        labelBHolder: self versionBLabelHolder;
+         textBHolder: self versionBTextHolder;
+
+        yourself
+
+    "Created: / 16-03-2012 / 13:58:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+textDiff3Tool
+
+    ^TextDiff3Tool new
+        labelCHolder: self versionBaseLabelHolder;
+         textCHolder: self versionBaseTextHolder;
+
+        labelBHolder: self versionBLabelHolder;
+         textBHolder: self versionBTextHolder;
+
+
+        labelAHolder: self versionALabelHolder;
+         textAHolder: self versionATextHolder;
+
+
+
+        yourself
+
+    "Created: / 16-03-2012 / 15:16:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !ChangeSetDiffTool methodsFor:'aspects'!
 
 diffListEntryLabelGeneratorAspect
@@ -926,6 +1003,40 @@
     "Modified: / 10-11-2009 / 11:09:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+textDiffToolHolder
+    "return/create the 'textDiffToolHolder' value holder (automatically generated)"
+
+    textDiffToolHolder isNil ifTrue:[
+        textDiffToolHolder := ValueHolder with: self textDiff2Tool.
+    ].
+    ^ textDiffToolHolder
+
+    "Modified: / 16-03-2012 / 13:57:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+textDiffToolHolder:something
+    "set the 'textDiffToolHolder' value holder (automatically generated)"
+
+    textDiffToolHolder := something.
+!
+
+textDiffToolWindowSpecHolder
+    "return/create the 'textDiffToolWindowSpecHolder' value holder (automatically generated)"
+
+    textDiffToolWindowSpecHolder isNil ifTrue:[
+        textDiffToolWindowSpecHolder := #windowSpecForEmbedding asValue.
+    ].
+    ^ textDiffToolWindowSpecHolder
+
+    "Modified: / 16-03-2012 / 13:57:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+textDiffToolWindowSpecHolder:something
+    "set the 'textDiffToolWindowSpecHolder' value holder (automatically generated)"
+
+    textDiffToolWindowSpecHolder := something.
+!
+
 titleHolder
     "return/create the 'titleHolder' value holder (automatically generated)"
 
@@ -973,6 +1084,25 @@
 
     "Created: / 06-07-2011 / 12:05:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 18-11-2011 / 14:57:59 / cg"
+!
+
+versionBaseLabelHolder
+
+    ^(AspectAdaptor forAspect: #versionBaseLabel)
+        subjectChannel: self diffsetHolder
+
+    "Created: / 16-03-2012 / 15:18:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+versionBaseTextHolder
+
+    versionBaseTextHolder isNil ifTrue:[
+        versionBaseTextHolder := ValueHolder new
+    ].
+    ^versionBaseTextHolder
+
+    "Modified: / 18-11-2011 / 14:57:59 / cg"
+    "Created: / 16-03-2012 / 15:19:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ChangeSetDiffTool methodsFor:'change & update'!
@@ -990,9 +1120,11 @@
 
     self versionALabelHolder value: ds versionALabel.
     self versionBLabelHolder value: ds versionBLabel.
+    self versionBaseLabelHolder value: ds versionBaseLabel.
 
     "Created: / 05-12-2009 / 11:03:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 29-06-2011 / 08:24:18 / Jan Vrany <enter your email here>"
+    "Modified: / 16-03-2012 / 15:42:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 selectionChanged
@@ -1005,12 +1137,14 @@
 
     self versionATextHolder setValue: diffItem versionAText.
     self versionBTextHolder setValue: diffItem versionBText.
+    self versionBaseTextHolder setValue: diffItem versionBaseText.
 
     self versionATextHolder changed: #value.
     self versionBTextHolder changed: #value.
+    self versionBaseTextHolder changed: #value
 
     "Created: / 22-10-2008 / 11:29:24 / Jan Vrany <vranyj1@fel.cvut.cz>"
-    "Modified: / 06-07-2011 / 12:47:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 16-03-2012 / 15:19:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 update: aspect with: param from: sender
@@ -1089,23 +1223,41 @@
 
 fileMenuOpen
 
-    | dlg a b |
+    | dlg a b base|
     dlg := OpenDialog new.
     dlg open ifFalse:[^self].
     a := dlg changeSetA.
     b := dlg changeSetB.
-    ^self fileMenuOpenOnDiffBetween: a and: b
+    base := dlg changeSetBase.
+    ^self fileMenuOpenOnDiffBetween: a and: b base: base.
 
-    "Modified: / 06-07-2011 / 11:36:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 16-03-2012 / 13:51:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 fileMenuOpenOnDiffBetween: a and: b
 
-    self diffset: (ChangeSetDiff versionA: a versionB: b).
+    ^self fileMenuOpenOnDiffBetween: a and: b base: nil.
 
-    "Created: / 21-03-2011 / 23:23:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 29-06-2011 / 08:10:17 / Jan Vrany <enter your email here>"
     "Modified: / 06-07-2011 / 12:56:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 16-03-2012 / 14:07:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+fileMenuOpenOnDiffBetween: a and: b base: base
+
+    self diffset: (ChangeSetDiff versionA: a versionB: b versionBase: base).
+    base notNil ifTrue:[
+        textDiffToolHolder value isDiff3 ifFalse:[
+            textDiffToolHolder value: self textDiff3Tool.
+        ].
+    ] ifFalse:[
+        textDiffToolHolder value isDiff2 ifFalse:[
+            textDiffToolHolder value: self textDiff2Tool.
+        ].
+    ]
+
+    "Modified: / 29-06-2011 / 08:10:17 / Jan Vrany <enter your email here>"
+    "Created: / 16-03-2012 / 13:49:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 fileMenuSaveAsPatch
@@ -1484,6 +1636,16 @@
     ^specB ifNil:[nil] ifNotNil:[specB changeSet]
 
     "Created: / 06-07-2011 / 11:36:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+changeSetBase
+
+    | specBase |
+
+    specBase := self changesetSpecBaseHolder value.
+    ^specBase ifNil:[nil] ifNotNil:[specBase changeSet]
+
+    "Created: / 16-03-2012 / 13:48:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ChangeSetDiffTool::OpenDialog methodsFor:'aspects'!
@@ -1518,6 +1680,25 @@
     changesetSpecBHolder := something.
 !
 
+changesetSpecBaseHolder
+    "return/create the 'changesetSpecBHolder' value holder (automatically generated)"
+
+    changesetSpecBaseHolder isNil ifTrue:[
+        changesetSpecBaseHolder := ValueHolder new.
+    ].
+    ^ changesetSpecBaseHolder
+
+    "Created: / 16-03-2012 / 13:48:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+changesetSpecBaseHolder:something
+    "set the 'changesetSpecBHolder' value holder (automatically generated)"
+
+    changesetSpecBaseHolder := something.
+
+    "Created: / 16-03-2012 / 13:49:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 doAcceptEnabled
     <resource: #uiAspect>
 
@@ -1545,5 +1726,5 @@
 !
 
 version_SVN
-    ^ '$Id: Tools__ChangeSetDiffTool.st 7854 2012-01-30 17:49:41Z vranyj1 $'
+    ^ '$Id: Tools__ChangeSetDiffTool.st 7925 2012-03-16 17:08:17Z vranyj1 $'
 ! !