SourceCodeManagerUtilitiesForContainerBasedManagers.st
changeset 4191 e8053aff27b2
parent 4004 ec719e16ce4a
child 4199 89ebbba27db6
child 4202 0caab4226ccf
--- a/SourceCodeManagerUtilitiesForContainerBasedManagers.st	Tue Jan 24 10:10:27 2017 +0100
+++ b/SourceCodeManagerUtilitiesForContainerBasedManagers.st	Tue Jan 24 14:03:06 2017 +0100
@@ -15,7 +15,7 @@
 
 SourceCodeManagerUtilities subclass:#SourceCodeManagerUtilitiesForContainerBasedManagers
 	instanceVariableNames:''
-	classVariableNames:''
+	classVariableNames:'LastComparedTag'
 	poolDictionaries:''
 	category:'System-SourceCodeManagement'
 !
@@ -590,28 +590,69 @@
      false, this method may result in user interaction, asking user to select which of the
      newest she wants."
 
-    |dateFormat string dateOrNil symbolicName|
+    |dateFormat string dateOrNil symbolicNameOrNil 
+     someDfnClass knownTags includeSubProjectsHolder
+     packagesIn packagesCompared|
 
+    packagesIn := packages value.
+    
+    "/ being lazy, assume tags are persistent across packages (which they are not required to be...)
+    someDfnClass := ProjectDefinition definitionClassForPackage:packagesIn first.
+    someDfnClass isNil ifTrue:[ someDfnClass := Object projectDefinitionClass ].
+    
+    knownTags := (manager knownTagsFor:someDfnClass) asOrderedCollection sort.
+    
     dateFormat := UserPreferences current dateInputFormat.
-    string := Dialog
-                request:(resources
-                        string:'Compare with version from date (%2) or tag (any other format) (empty for newest):'
-                        with:dateFormat)
-                initialAnswer:(Date today printStringFormat:dateFormat).
+
+    includeSubProjectsHolder := true asValue.
+    
+    Dialog 
+        modifyingBoxWith:[:box |
+            box verticalPanel 
+                add:(CheckBox label:(resources string:'Include Subprojects')
+                              model:includeSubProjectsHolder).
+        ]
+        do:[
+            |suggestion|
 
+            suggestion := LastComparedTag.
+            suggestion isNil ifTrue:[ suggestion := Date today printStringFormat:dateFormat ].
+            
+            string := Dialog
+                        request:(resources
+                                string:'Compare with version from date (%2) or tag (any other format) (empty for newest):'
+                                with:dateFormat)
+                        initialAnswer:suggestion
+                        list:knownTags.
+        ].
+        
     string isNil ifTrue:[^ self].
     string notEmpty ifTrue:[
         dateOrNil := Date readFrom:string printFormat:dateFormat onError:nil.
         dateOrNil isNil ifTrue:[
-            symbolicName := string
+            symbolicNameOrNil := string
         ].
     ].
+
+    LastComparedTag := symbolicNameOrNil.
     
-    packages value do:[:eachProject |
+    packagesCompared := packagesIn.
+    includeSubProjectsHolder value ifTrue:[
+        packagesCompared := Smalltalk allPackageIDs
+                        select:[:eachPackage |
+                            packagesIn contains:[:p | 
+                                eachPackage = p 
+                                or:[ (eachPackage startsWith:(p,'-'))
+                                or:[ (eachPackage startsWith:(p,':')) ]]
+                            ]
+                        ]    
+    ].
+    
+    packagesCompared value do:[:eachProject |
         dateOrNil notNil ifTrue:[
             self compareProject:eachProject withRepositoryVersionFrom:dateOrNil extensionsOnly:extensionsOnly
         ] ifFalse:[
-            self compareProject:eachProject withRepositoryVersionTaggedAs:symbolicName extensionsOnly:extensionsOnly
+            self compareProject:eachProject withRepositoryVersionTaggedAs:symbolicNameOrNil extensionsOnly:extensionsOnly
         ]
     ].