jan@65: "{ Package: 'stx:goodies/builder/reports' }" jan@65: jan@65: "{ NameSpace: Builder }" jan@65: jan@65: Report subclass:#ChangeReport jan@65: instanceVariableNames:'gofer' jan@65: classVariableNames:'' jan@65: poolDictionaries:'' jan@65: category:'Builder-Reports-Unfinished' jan@65: ! jan@65: jan@65: jan@65: !ChangeReport methodsFor:'accessing'! jan@65: jan@65: changesFor: aResolvedVersion jan@65: | references patch | jan@65: references := gofer allResolved jan@65: select: [ :each | each packageName = aResolvedVersion packageName ]. jan@65: patch := MCPatch jan@65: fromBase: (references size > 1 jan@65: ifTrue: [ (references at: references size - 1) version snapshot ] jan@65: ifFalse: [ MCSnapshot empty ]) jan@65: target: aResolvedVersion version snapshot. jan@65: ^ patch operations asSortedCollection jan@65: ! jan@65: jan@65: resolved jan@65: ^ gofer resolved jan@65: ! ! jan@65: jan@65: !ChangeReport methodsFor:'generating'! jan@65: jan@65: generateChange: aPatch on: aStream jan@65: aPatch isAddition jan@65: ifTrue: [ ^ self generateChangeAddition: aPatch on: aStream ]. jan@65: aPatch isModification jan@65: ifTrue: [ ^ self generateChangeModification: aPatch on: aStream ]. jan@65: aPatch isRemoval jan@65: ifTrue: [ ^ self generateChangeRemoval: aPatch on: aStream ] jan@65: ! jan@65: jan@65: generateChangeAddition: aPatch on: aStream jan@65: aStream tab; tab; tab; nextPutAll: ''; nextPutAll: (self encode: (self convert: aPatch summary)); nextPutAll: ''; nextPut: Character lf jan@65: ! jan@65: jan@65: generateChangeModification: aPatch on: aStream jan@65: aStream tab; tab; tab; nextPutAll: ''; nextPutAll: (self encode: (self convert: aPatch summary)); nextPutAll: ''; nextPut: Character lf jan@65: ! jan@65: jan@65: generateChangeRemoval: aPatch on: aStream jan@65: aStream tab; tab; tab; nextPutAll: ''; nextPutAll: (self encode: (self convert: aPatch summary)); nextPutAll: ''; nextPut: Character lf jan@65: ! jan@65: jan@65: generateChangeSet: aResolvedVersion on: aStream jan@65: | info | jan@65: info := aResolvedVersion version info. jan@65: aStream tab; nextPutAll: ''; nextPut: Character lf. jan@65: aStream tab; tab; nextPutAll: ''; nextPutAll: (self encode: info date yyyymmdd); space; nextPutAll: (self encode: info time print24); nextPutAll: ''; nextPut: Character lf. jan@65: aStream tab; tab; nextPutAll: ''; nextPutAll: (self encode: info author); nextPutAll: ''; nextPut: Character lf. jan@65: aStream tab; tab; nextPutAll: ''; nextPutAll: (self encode: (self convert: info message)); nextPutAll: ''; nextPut: Character lf. jan@65: "aStream tab; tab; nextPutAll: ''; nextPut: Character lf. jan@65: (self changesFor: aResolvedVersion) jan@65: do: [ :each | self generateChange: each on: aStream ]. jan@65: aStream tab; tab; nextPutAll: ''; nextPut: Character lf." jan@65: aStream tab; nextPutAll: ''; nextPut: Character lf jan@65: ! jan@65: jan@65: generateOn: aStream jan@65: aStream nextPutAll: ''; nextPut: Character lf. jan@65: aStream nextPutAll: ''; nextPut: Character lf. jan@65: self resolved jan@65: do: [ :each | self generateChangeSet: each on: aStream ]. jan@65: aStream nextPutAll: '' jan@65: ! ! jan@65: jan@65: !ChangeReport methodsFor:'initialization'! jan@65: jan@65: initializeOn: aCollection jan@65: gofer := Gofer new. jan@65: aCollection do: [ :each | gofer package: each ] jan@65: ! ! jan@65: jan@65: !ChangeReport methodsFor:'running'! jan@65: jan@65: run sv@273: | stream | sv@273: stream := (Filename defaultDirectory directory / 'changelog.xml') writeStream. sv@273: [ self generateOn: stream ] sv@273: ensure: [ stream close ] jan@65: ! ! jan@65: jan@65: !ChangeReport class methodsFor:'documentation'! jan@65: jan@65: version jan@65: ^ '$Header$' jan@65: ! jan@65: jan@65: version_CVS jan@65: ^ '$Header$' jan@65: ! jan@65: jan@65: version_SVN sv@273: ^ '$Id$' jan@65: ! ! sv@273: