diff -r cc690bca6a45 -r e8053aff27b2 SourceCodeManagerUtilitiesForContainerBasedManagers.st --- 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 ] ].