# HG changeset patch # User Claus Gittinger # Date 1486342911 -3600 # Node ID 7902ad271c761ccfdecd8b66099d00c71413ce26 # Parent 715f12ddf58a02ac043d0f3c59dda5d78f50e1a9 #FEATURE by cg class: VersionDiffBrowser class definition added: #inspectFilterParameters #loadFilterNamed changed: #filterClassesMatching #filterMenu #forgetFilterNamed #rememberFilterAs #updateLists category of: #filterClassInA #filterClassInB #filterClassInM #filterClassesMatching #filterMethodInA #filterMethodInB #filterMethodInM #filterSelectorFromA #filterSelectorFromB #filterSelectorFromM #forgetFilterNamed #rememberFilterAs diff -r 715f12ddf58a -r 7902ad271c76 VersionDiffBrowser.st --- a/VersionDiffBrowser.st Mon Feb 06 01:19:31 2017 +0100 +++ b/VersionDiffBrowser.st Mon Feb 06 02:01:51 2017 +0100 @@ -27,7 +27,7 @@ isMultipleVersionBrowser versionInfoList versionList selectedVersionHolder symbolicVersionList selectedSymbolicVersionHolder symbolicToVersionMapping - filteredClasses filteredMethods filteredSelectors' + filteredClasses filteredMethods filteredSelectors patternFilters' classVariableNames:'RememberedFilters' poolDictionaries:'' category:'Interface-Browsers' @@ -568,15 +568,31 @@ itemValue: rememberFilterAs ) (MenuItem + label: 'Load Filter Named...' + itemValue: loadFilterNamed + ) + (MenuItem + label: '-' + ) + (MenuItem label: 'Forget Filter Named...' itemValue: forgetFilterNamed ) + (MenuItem + label: '-' + ) + (MenuItem + label: 'Inspect Current Filter Settings' + itemValue: inspectFilterParameters + ) + ) nil nil ) "Created: / 05-02-2017 / 11:11:30 / cg" + "Modified: / 06-02-2017 / 02:01:23 / cg" ! mainMenu @@ -2149,7 +2165,7 @@ printStringGenerator sortBlockForChangeLists filteredList numIgnoredExtensions numIgnoredVersionMethods info needFilter entryIsForCommentOrFormatOnly - isIgnoredChange isIgnored1 isIgnored2 isIgnored3| + isIgnoredChange isIgnored1 isIgnored2 isIgnored3 isIgnored4| printStringGenerator := [:aChange | self printStringForChange:aChange]. sortBlockForChangeLists := [:a :b | (printStringGenerator value:a) < (printStringGenerator value:b)]. @@ -2233,6 +2249,15 @@ ]. ]. + patternFilters notEmptyOrNil ifTrue:[ + isIgnored4 := isIgnoredChange. + isIgnoredChange := + [:change | + (isIgnored4 value:change) + or:[ patternFilters contains:[:pattern | pattern match:change nonMetaClassName]] + ]. + ]. + listOnlyInA := filteredList := self methodsOnlyInA. listOnlyInA removeAll. classChangeSet notNil ifTrue:[ @@ -2331,7 +2356,7 @@ ]. self information:info - "Modified: / 05-02-2017 / 11:47:10 / cg" + "Modified: / 06-02-2017 / 01:44:09 / cg" ! updateVersionList @@ -2553,6 +2578,105 @@ "Modified: / 27-10-2010 / 11:34:58 / cg" ! +hideDiffsWithCommentOrFormattingChangeOnlyHolder:newValue + "state of hide changes which have no semantic effect has changed" + + self updateLists. + + "Created: / 04-02-2017 / 19:50:51 / cg" + "Modified: / 04-02-2017 / 23:14:45 / cg" +! + +inspectSelectedChangeInA + "inspect the selected method change for the 'method only in version A'." + + self selectedChangeInA inspect. + + "Modified: / 25-07-2006 / 11:13:30 / cg" +! + +inspectSelectedChangeInB + "inspect the selected method change for the 'method only in version B'." + + self selectedChangeInB inspect. + + "Modified: / 25-07-2006 / 11:13:22 / cg" +! + +inspectSelectedChangeInM + "inspect the two method changes for the selected 'changed method'." + + |changes| + + changes := self selectedChangesInM. + changes do:[:change | + change inspect + ]. + + "Modified: / 25-07-2006 / 11:13:13 / cg" +! + +mainMenu + "if this application runs as an subapplication, + the menu bar should not be used." + + self masterApplication isNil ifTrue:[ + ^ self class mainMenu + ]. + ^ nil + + "Modified: / 25-07-2006 / 11:13:44 / cg" +! + +menuAHolder + ^ [ self class menuA ] + + "Created: / 05-02-2017 / 10:07:15 / cg" +! + +menuBHolder + ^ [ self class menuB ] + + "Created: / 05-02-2017 / 10:07:22 / cg" +! + +menuMHolder + ^ [ self class menuM ] + + "Created: / 05-02-2017 / 10:07:36 / cg" +! + +openDocumentation + HTMLDocumentView openFullOnDocumentationFile:'tools/misc/TOP.html#VERSIONDIFF' +! + +removeClassFromChangeSet + |cls ok changedClasses| + + classChangeSet notNil ifTrue:[ + "/ only do if we compare a single class + (cls := classChangeSet classBeingCompared) notNil ifTrue:[ + ok := classChangeSet diffSet isEmptyOrNil. + ok ifFalse:[ + changedClasses := classChangeSet diffSet changedClasses. + (changedClasses size == 1 + and:[ changedClasses anElement theNonMetaclass == cls theNonMetaclass]) ifTrue:[ + (methodsChangedFiltered isEmptyOrNil + and:[ methodsOnlyInAFiltered isEmptyOrNil + and:[ methodsOnlyInBFiltered isEmptyOrNil ]]) ifTrue:[ + ok := true. + ] + ] + ]. + ok ifTrue:[ + ChangeSet current condenseChangesForClass:cls + ]. + ]. + ]. +! ! + +!VersionDiffBrowser methodsFor:'menu action - filters'! + filterClassInA "filter this class (don't show it)." @@ -2592,9 +2716,18 @@ ! filterClassesMatching - self halt. + |pattern| + + pattern := Dialog request:'Pattern for Filter (will hide matching classes):'. + pattern isEmptyOrNil ifTrue:[^ self]. + patternFilters isNil ifTrue:[ + patternFilters := OrderedCollection new. + ]. + patternFilters add:pattern. + self filterChanged "Created: / 05-02-2017 / 11:11:42 / cg" + "Modified: / 06-02-2017 / 01:33:27 / cg" ! filterMethodInA @@ -2671,112 +2804,77 @@ ! forgetFilterNamed - self halt. + "forget a remembered named filter" + + |filterName| + + filterName := Dialog request:'Forget Filter Named:' list:(RememberedFilters keys copy sort). + filterName isEmptyOrNil ifTrue:[^ self]. + + (Dialog confirm:'Shure to Forget the Filter Named: ',filterName) ifFalse:[^ self]. + + RememberedFilters removeKey:filterName. "Created: / 05-02-2017 / 11:12:08 / cg" -! - -hideDiffsWithCommentOrFormattingChangeOnlyHolder:newValue - "state of hide changes which have no semantic effect has changed" - - self updateLists. - - "Created: / 04-02-2017 / 19:50:51 / cg" - "Modified: / 04-02-2017 / 23:14:45 / cg" + "Modified: / 06-02-2017 / 01:59:41 / cg" ! -inspectSelectedChangeInA - "inspect the selected method change for the 'method only in version A'." - - self selectedChangeInA inspect. - - "Modified: / 25-07-2006 / 11:13:30 / cg" -! - -inspectSelectedChangeInB - "inspect the selected method change for the 'method only in version B'." - - self selectedChangeInB inspect. - - "Modified: / 25-07-2006 / 11:13:22 / cg" +inspectFilterParameters + "inspect the current settings" + + |filterParameters| + + filterParameters := FilterParameters new. + filterParameters filteredClassNameMatchPattern:patternFilters. + filterParameters filteredClassNames:filteredClasses. + filterParameters filteredMethodNames:filteredMethods. + filterParameters filteredSelectors:filteredSelectors. + + filterParameters inspect. + + "Created: / 06-02-2017 / 02:00:55 / cg" ! -inspectSelectedChangeInM - "inspect the two method changes for the selected 'changed method'." - - |changes| - - changes := self selectedChangesInM. - changes do:[:change | - change inspect - ]. - - "Modified: / 25-07-2006 / 11:13:13 / cg" -! - -mainMenu - "if this application runs as an subapplication, - the menu bar should not be used." - - self masterApplication isNil ifTrue:[ - ^ self class mainMenu - ]. - ^ nil - - "Modified: / 25-07-2006 / 11:13:44 / cg" -! - -menuAHolder - ^ [ self class menuA ] - - "Created: / 05-02-2017 / 10:07:15 / cg" -! - -menuBHolder - ^ [ self class menuB ] - - "Created: / 05-02-2017 / 10:07:22 / cg" -! - -menuMHolder - ^ [ self class menuM ] - - "Created: / 05-02-2017 / 10:07:36 / cg" -! - -openDocumentation - HTMLDocumentView openFullOnDocumentationFile:'tools/misc/TOP.html#VERSIONDIFF' +loadFilterNamed + "load a remembered named filter" + + |filterName filterParameters| + + filterName := Dialog request:'Load Filter Named:' list:(RememberedFilters keys copy sort). + filterName isEmptyOrNil ifTrue:[^ self]. + + filterParameters := RememberedFilters at:filterName. + + patternFilters := filterParameters filteredClassNameMatchPattern. + filteredClasses := filterParameters filteredClassNames. + filteredMethods := filterParameters filteredMethodNames. + filteredSelectors := filterParameters filteredSelectors. + + self filterChanged. + + "Created: / 06-02-2017 / 01:57:48 / cg" ! rememberFilterAs - self halt. - - "Created: / 05-02-2017 / 11:12:03 / cg" -! - -removeClassFromChangeSet - |cls ok changedClasses| - - classChangeSet notNil ifTrue:[ - "/ only do if we compare a single class - (cls := classChangeSet classBeingCompared) notNil ifTrue:[ - ok := classChangeSet diffSet isEmptyOrNil. - ok ifFalse:[ - changedClasses := classChangeSet diffSet changedClasses. - (changedClasses size == 1 - and:[ changedClasses anElement theNonMetaclass == cls theNonMetaclass]) ifTrue:[ - (methodsChangedFiltered isEmptyOrNil - and:[ methodsOnlyInAFiltered isEmptyOrNil - and:[ methodsOnlyInBFiltered isEmptyOrNil ]]) ifTrue:[ - ok := true. - ] - ] - ]. - ok ifTrue:[ - ChangeSet current condenseChangesForClass:cls - ]. - ]. + "remember the current settings under a named filter" + + |filterName filterParameters| + + filterName := Dialog request:'Name of Filter:'. + filterName isEmptyOrNil ifTrue:[^ self]. + + filterParameters := FilterParameters new. + filterParameters filteredClassNameMatchPattern:patternFilters. + filterParameters filteredClassNames:filteredClasses. + filterParameters filteredMethodNames:filteredMethods. + filterParameters filteredSelectors:filteredSelectors. + + RememberedFilters isNil ifTrue:[ + RememberedFilters := Dictionary new. ]. + RememberedFilters at:filterName put:filterParameters. + + "Modified (comment): / 06-02-2017 / 01:54:58 / cg" ! ! !VersionDiffBrowser methodsFor:'private'!