#FEATURE by cg
class: SourceCodeManagerUtilitiesForContainerBasedManagers
class definition
changed: #comparePackages:askForRevision:extensionsOnly:
feature:
remember last compared tag;
can now compare package and all subpackages
(eg. exept or stx)
--- 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
]
].