HistoryManager.st
author claus
Fri, 08 Sep 1995 21:06:02 +0200
changeset 47 db2d5d021237
parent 46 c53838e4783c
child 48 115a12443621
permissions -rw-r--r--
.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
46
claus
parents: 43
diff changeset
     1
"
claus
parents: 43
diff changeset
     2
 COPYRIGHT (c) 1995 by AEG Industry Automation
claus
parents: 43
diff changeset
     3
 COPYRIGHT (c) 1995 by Claus Gittinger
claus
parents: 43
diff changeset
     4
	      All Rights Reserved
claus
parents: 43
diff changeset
     5
claus
parents: 43
diff changeset
     6
 This software is furnished under a license and may be used
claus
parents: 43
diff changeset
     7
 only in accordance with the terms of that license and with the
claus
parents: 43
diff changeset
     8
 inclusion of the above copyright notice.   This software may not
claus
parents: 43
diff changeset
     9
 be provided or otherwise made available to, or used by, any
claus
parents: 43
diff changeset
    10
 other person.  No title to or ownership of the software is
claus
parents: 43
diff changeset
    11
 hereby transferred.
claus
parents: 43
diff changeset
    12
"
claus
parents: 43
diff changeset
    13
41
claus
parents:
diff changeset
    14
'From Smalltalk/X, Version:2.10.7 on 23-aug-1995 at 10:30:30 pm'                !
claus
parents:
diff changeset
    15
claus
parents:
diff changeset
    16
Object subclass:#HistoryManager
claus
parents:
diff changeset
    17
	 instanceVariableNames:'historyMode'
claus
parents:
diff changeset
    18
	 classVariableNames:'TheOneAndOnlyInstance'
claus
parents:
diff changeset
    19
	 poolDictionaries:''
claus
parents:
diff changeset
    20
	 category:'System-Changes-History'
claus
parents:
diff changeset
    21
!
claus
parents:
diff changeset
    22
claus
parents:
diff changeset
    23
HistoryManager comment:'''Historymanagement for Smalltalk MultiUser Environment''
claus
parents:
diff changeset
    24
'!
claus
parents:
diff changeset
    25
claus
parents:
diff changeset
    26
!HistoryManager class methodsFor:'documentation'!
claus
parents:
diff changeset
    27
46
claus
parents: 43
diff changeset
    28
copyright 
claus
parents: 43
diff changeset
    29
"
claus
parents: 43
diff changeset
    30
 COPYRIGHT (c) 1995 by AEG Industry Automation
claus
parents: 43
diff changeset
    31
 COPYRIGHT (c) 1995 by Claus Gittinger
claus
parents: 43
diff changeset
    32
	      All Rights Reserved
claus
parents: 43
diff changeset
    33
claus
parents: 43
diff changeset
    34
 This software is furnished under a license and may be used
claus
parents: 43
diff changeset
    35
 only in accordance with the terms of that license and with the
claus
parents: 43
diff changeset
    36
 inclusion of the above copyright notice.   This software may not
claus
parents: 43
diff changeset
    37
 be provided or otherwise made available to, or used by, any
claus
parents: 43
diff changeset
    38
 other person.  No title to or ownership of the software is
claus
parents: 43
diff changeset
    39
 hereby transferred.
claus
parents: 43
diff changeset
    40
"
claus
parents: 43
diff changeset
    41
!
claus
parents: 43
diff changeset
    42
41
claus
parents:
diff changeset
    43
version
claus
parents:
diff changeset
    44
"
47
claus
parents: 46
diff changeset
    45
$Header: /cvs/stx/stx/libbasic3/HistoryManager.st,v 1.5 1995-09-08 19:06:02 claus Exp $
41
claus
parents:
diff changeset
    46
"
claus
parents:
diff changeset
    47
!
claus
parents:
diff changeset
    48
claus
parents:
diff changeset
    49
documentation
claus
parents:
diff changeset
    50
"
claus
parents:
diff changeset
    51
    This class is part of the 
claus
parents:
diff changeset
    52
	       -----------------------
claus
parents:
diff changeset
    53
		HistoryManagerProject.
claus
parents:
diff changeset
    54
	       -----------------------
claus
parents:
diff changeset
    55
    It is used to create a multi user Smalltalk developers Environemt.
claus
parents:
diff changeset
    56
claus
parents:
diff changeset
    57
    All Methods and Classes in the system get a HistroyLine which contains a timestamp
claus
parents:
diff changeset
    58
    and the name of the Editor. This is acually the UniX loginname.
claus
parents:
diff changeset
    59
    The Manager registers all Classes in the System to get notifications on change.
claus
parents:
diff changeset
    60
46
claus
parents: 43
diff changeset
    61
    Author: Robert Sailer - AEG
41
claus
parents:
diff changeset
    62
"
claus
parents:
diff changeset
    63
!
claus
parents:
diff changeset
    64
claus
parents:
diff changeset
    65
examples
claus
parents:
diff changeset
    66
"
claus
parents:
diff changeset
    67
    HistoryManager new
claus
parents:
diff changeset
    68
"
claus
parents:
diff changeset
    69
    "Modified: 11.08.1995 / 16:50:47 / robert"
claus
parents:
diff changeset
    70
! !
claus
parents:
diff changeset
    71
claus
parents:
diff changeset
    72
!HistoryManager class methodsFor:'initialization'!
claus
parents:
diff changeset
    73
claus
parents:
diff changeset
    74
initialize
claus
parents:
diff changeset
    75
    ""
claus
parents:
diff changeset
    76
    ObjectMemory addDependent: self.
claus
parents:
diff changeset
    77
claus
parents:
diff changeset
    78
    "Modified: 14.08.1995 / 9:49:56 / robert"
claus
parents:
diff changeset
    79
!
claus
parents:
diff changeset
    80
claus
parents:
diff changeset
    81
initMe
claus
parents:
diff changeset
    82
    "setup TheOneAndOnlyInstance (if not already present"
claus
parents:
diff changeset
    83
    ^self new.
claus
parents:
diff changeset
    84
claus
parents:
diff changeset
    85
    "Modified: 14.08.1995 / 9:52:40 / robert"
claus
parents:
diff changeset
    86
! !
claus
parents:
diff changeset
    87
claus
parents:
diff changeset
    88
!HistoryManager class methodsFor:'instance creation'!
claus
parents:
diff changeset
    89
claus
parents:
diff changeset
    90
new
46
claus
parents: 43
diff changeset
    91
    "because there can be only ONE HistoryManager, new must me redefiend"
41
claus
parents:
diff changeset
    92
claus
parents:
diff changeset
    93
    TheOneAndOnlyInstance isNil ifTrue:[
claus
parents:
diff changeset
    94
	TheOneAndOnlyInstance := super new initialize.
claus
parents:
diff changeset
    95
	HistoryLine initialize.
claus
parents:
diff changeset
    96
    ].
claus
parents:
diff changeset
    97
claus
parents:
diff changeset
    98
   ^ TheOneAndOnlyInstance
claus
parents:
diff changeset
    99
claus
parents:
diff changeset
   100
"
claus
parents:
diff changeset
   101
claus
parents:
diff changeset
   102
    HistoryManager new.
claus
parents:
diff changeset
   103
"
claus
parents:
diff changeset
   104
claus
parents:
diff changeset
   105
    "Modified: 11.08.1995 / 17:01:29 / robert"
claus
parents:
diff changeset
   106
! !
claus
parents:
diff changeset
   107
claus
parents:
diff changeset
   108
!HistoryManager class methodsFor:'accessing'!
claus
parents:
diff changeset
   109
claus
parents:
diff changeset
   110
instance
claus
parents:
diff changeset
   111
    "return the class variable"
claus
parents:
diff changeset
   112
claus
parents:
diff changeset
   113
    ^TheOneAndOnlyInstance
claus
parents:
diff changeset
   114
!
claus
parents:
diff changeset
   115
claus
parents:
diff changeset
   116
isActive 
claus
parents:
diff changeset
   117
    ^TheOneAndOnlyInstance notNil
claus
parents:
diff changeset
   118
claus
parents:
diff changeset
   119
    "Modified: 27.8.1995 / 00:32:12 / claus"
claus
parents:
diff changeset
   120
! !
claus
parents:
diff changeset
   121
claus
parents:
diff changeset
   122
!HistoryManager class methodsFor:'change and update'!
claus
parents:
diff changeset
   123
claus
parents:
diff changeset
   124
update: what
claus
parents:
diff changeset
   125
    (what == #restarted) ifTrue:[
43
claus
parents: 42
diff changeset
   126
	TheOneAndOnlyInstance notNil ifTrue:[
claus
parents: 42
diff changeset
   127
	    "
claus
parents: 42
diff changeset
   128
	     smalltalk is about to restart from an Image -
claus
parents: 42
diff changeset
   129
	    "
claus
parents: 42
diff changeset
   130
	    'HistoryManager initialize (via update)' printNL.
claus
parents: 42
diff changeset
   131
	    self initMe.
claus
parents: 42
diff changeset
   132
	]
41
claus
parents:
diff changeset
   133
    ].
claus
parents:
diff changeset
   134
43
claus
parents: 42
diff changeset
   135
    "Modified: 27.8.1995 / 16:33:02 / claus"
41
claus
parents:
diff changeset
   136
! !
claus
parents:
diff changeset
   137
claus
parents:
diff changeset
   138
!HistoryManager class methodsFor:'activation / deactivation'!
claus
parents:
diff changeset
   139
claus
parents:
diff changeset
   140
activate
claus
parents:
diff changeset
   141
    self new   "/ creating an instance activates me
claus
parents:
diff changeset
   142
!
claus
parents:
diff changeset
   143
claus
parents:
diff changeset
   144
deactivate
claus
parents:
diff changeset
   145
    Smalltalk allClassesDo:[:aClass |
claus
parents:
diff changeset
   146
	aClass removeDependent:TheOneAndOnlyInstance.
claus
parents:
diff changeset
   147
	aClass class removeDependent:TheOneAndOnlyInstance.
claus
parents:
diff changeset
   148
    ].
claus
parents:
diff changeset
   149
    TheOneAndOnlyInstance := nil.
claus
parents:
diff changeset
   150
claus
parents:
diff changeset
   151
"
claus
parents:
diff changeset
   152
    HistoryManager release
claus
parents:
diff changeset
   153
"
claus
parents:
diff changeset
   154
! !
claus
parents:
diff changeset
   155
47
claus
parents: 46
diff changeset
   156
!HistoryManager class methodsFor:'helpers'!
claus
parents: 46
diff changeset
   157
claus
parents: 46
diff changeset
   158
getAllHistoriesFrom:someString
claus
parents: 46
diff changeset
   159
    "returns anArray of HistoryLines"
claus
parents: 46
diff changeset
   160
claus
parents: 46
diff changeset
   161
    |position aReadWriteStream firstFound nextFound  aHistoryString rcOC h|
claus
parents: 46
diff changeset
   162
claus
parents: 46
diff changeset
   163
    "read begining from the end and look there for the first comment character. If there's none return"
claus
parents: 46
diff changeset
   164
claus
parents: 46
diff changeset
   165
    rcOC := OrderedCollection new.
claus
parents: 46
diff changeset
   166
    position := someString size.
claus
parents: 46
diff changeset
   167
    firstFound := false.
claus
parents: 46
diff changeset
   168
    nextFound := false.
claus
parents: 46
diff changeset
   169
claus
parents: 46
diff changeset
   170
    someString reverseDo:[ :aChar|
claus
parents: 46
diff changeset
   171
	position := position - 1.
claus
parents: 46
diff changeset
   172
	aChar = $" ifTrue:[
claus
parents: 46
diff changeset
   173
	    firstFound ifTrue:[
claus
parents: 46
diff changeset
   174
		firstFound := false.
claus
parents: 46
diff changeset
   175
		nextFound := true.
claus
parents: 46
diff changeset
   176
	    ] ifFalse:[
claus
parents: 46
diff changeset
   177
		aReadWriteStream := ReadWriteStream on: String new.
claus
parents: 46
diff changeset
   178
		firstFound := true.
claus
parents: 46
diff changeset
   179
		nextFound := false.
claus
parents: 46
diff changeset
   180
	    ].
claus
parents: 46
diff changeset
   181
	].
claus
parents: 46
diff changeset
   182
	(firstFound and: [nextFound not]) ifTrue:[
claus
parents: 46
diff changeset
   183
	    "now collect all up to the next comment character"
claus
parents: 46
diff changeset
   184
	    aChar = $" ifFalse:[     
claus
parents: 46
diff changeset
   185
		aReadWriteStream nextPut: aChar.
claus
parents: 46
diff changeset
   186
	    ].
claus
parents: 46
diff changeset
   187
	].
claus
parents: 46
diff changeset
   188
	nextFound ifTrue:[
claus
parents: 46
diff changeset
   189
	    "End reached - now try to make a HistoryLine"
claus
parents: 46
diff changeset
   190
	    aHistoryString := (aReadWriteStream contents) reverse.
claus
parents: 46
diff changeset
   191
	    "
claus
parents: 46
diff changeset
   192
		Transcript showCr: aHistoryString.
claus
parents: 46
diff changeset
   193
	    "
claus
parents: 46
diff changeset
   194
	    h := HistoryLine fromString: aHistoryString at: position.
claus
parents: 46
diff changeset
   195
	    h notNil ifTrue:[
claus
parents: 46
diff changeset
   196
		rcOC add:h.
claus
parents: 46
diff changeset
   197
	    ].
claus
parents: 46
diff changeset
   198
"/            (aHistoryString startsWith: 'Modified:') ifTrue:[
claus
parents: 46
diff changeset
   199
"/                "a history line was found - now make a NewInstance of HistoryLine"
claus
parents: 46
diff changeset
   200
"/                rcOC add: ( HistoryLine fromString: aHistoryString at: position).
claus
parents: 46
diff changeset
   201
"/            ].
claus
parents: 46
diff changeset
   202
	    nextFound := false.
claus
parents: 46
diff changeset
   203
	].
claus
parents: 46
diff changeset
   204
    ].
claus
parents: 46
diff changeset
   205
claus
parents: 46
diff changeset
   206
    ^rcOC reverse  "the OrderedCollection with HistoryLines in the right order"
claus
parents: 46
diff changeset
   207
claus
parents: 46
diff changeset
   208
    "Modified: 21.12.1993 / 18:32:30 / M.Noell"
claus
parents: 46
diff changeset
   209
    "Modified: 9.8.1995 / 22:45:30 / R.Sailer"
claus
parents: 46
diff changeset
   210
    "Modified: 8.9.1995 / 17:54:33 / claus"
claus
parents: 46
diff changeset
   211
! !
claus
parents: 46
diff changeset
   212
41
claus
parents:
diff changeset
   213
!HistoryManager methodsFor:'accessing'!
claus
parents:
diff changeset
   214
claus
parents:
diff changeset
   215
historyMode
claus
parents:
diff changeset
   216
    "return historyMode"
claus
parents:
diff changeset
   217
claus
parents:
diff changeset
   218
    ^ historyMode
claus
parents:
diff changeset
   219
claus
parents:
diff changeset
   220
    "Modified: 11.08.1995 / 16:51:56 / robert"
claus
parents:
diff changeset
   221
!
claus
parents:
diff changeset
   222
claus
parents:
diff changeset
   223
historyMode:something
claus
parents:
diff changeset
   224
    "set historyMode"
claus
parents:
diff changeset
   225
claus
parents:
diff changeset
   226
    historyMode := something.
claus
parents:
diff changeset
   227
claus
parents:
diff changeset
   228
    "Modified: 11.08.1995 / 16:52:12 / robert"
claus
parents:
diff changeset
   229
! !
claus
parents:
diff changeset
   230
claus
parents:
diff changeset
   231
!HistoryManager methodsFor:'initialization'!
claus
parents:
diff changeset
   232
claus
parents:
diff changeset
   233
exclude
46
claus
parents: 43
diff changeset
   234
    "public - return an exclusionlist for some smalltalk classes which should not be notified or historisized"
41
claus
parents:
diff changeset
   235
claus
parents:
diff changeset
   236
    | oc |
claus
parents:
diff changeset
   237
        
claus
parents:
diff changeset
   238
    oc := OrderedCollection new.
claus
parents:
diff changeset
   239
    oc add: self.
claus
parents:
diff changeset
   240
claus
parents:
diff changeset
   241
    ^oc
claus
parents:
diff changeset
   242
claus
parents:
diff changeset
   243
    "Modified: 11.08.1995 / 17:02:18 / robert"
claus
parents:
diff changeset
   244
!
claus
parents:
diff changeset
   245
claus
parents:
diff changeset
   246
initialize
46
claus
parents: 43
diff changeset
   247
    "public - make me depend on all smalltalk classes (except the exclusionList)
claus
parents: 43
diff changeset
   248
     to be notified later about changes. This intercepts source installation and allows
claus
parents: 43
diff changeset
   249
     be to patch the source-string with a historyLine."
41
claus
parents:
diff changeset
   250
claus
parents:
diff changeset
   251
    | box  exclusionlist|
claus
parents:
diff changeset
   252
claus
parents:
diff changeset
   253
    super initialize.
claus
parents:
diff changeset
   254
    historyMode := true.
claus
parents:
diff changeset
   255
    exclusionlist := self exclude.
claus
parents:
diff changeset
   256
claus
parents:
diff changeset
   257
    Smalltalk allClasses do:[:aClass|
claus
parents:
diff changeset
   258
	"all classes should send a notification if changed"
claus
parents:
diff changeset
   259
	"aClass = self " false ifFalse: [
claus
parents:
diff changeset
   260
	    (exclusionlist includes: aClass) ifFalse:[
claus
parents:
diff changeset
   261
		aClass addDependent: self.
claus
parents:
diff changeset
   262
		aClass class addDependent: self.   "for class methods"
claus
parents:
diff changeset
   263
	    ].
claus
parents:
diff changeset
   264
	].
claus
parents:
diff changeset
   265
    ].
claus
parents:
diff changeset
   266
claus
parents:
diff changeset
   267
    ^self
claus
parents:
diff changeset
   268
claus
parents:
diff changeset
   269
    "Modified: 11.08.1995 / 17:12:51 / robert"
claus
parents:
diff changeset
   270
! !
claus
parents:
diff changeset
   271
claus
parents:
diff changeset
   272
!HistoryManager methodsFor:'updateHistory'!
claus
parents:
diff changeset
   273
claus
parents:
diff changeset
   274
addHistoryTo:someString
claus
parents:
diff changeset
   275
    "private - add a historyLine at end to the sourceCode;
claus
parents:
diff changeset
   276
     check for multiple lines of the same user and merge into one."
claus
parents:
diff changeset
   277
47
claus
parents: 46
diff changeset
   278
    | histLines pos hm wStream sourceCode historyMode previousHistories
claus
parents: 46
diff changeset
   279
      newLine |
41
claus
parents:
diff changeset
   280
47
claus
parents: 46
diff changeset
   281
    previousHistories := self class getAllHistoriesFrom:someString.
41
claus
parents:
diff changeset
   282
    "Check whether there is a Manager"    
claus
parents:
diff changeset
   283
"/    hm := Smalltalk at: #HistoryManager ifAbsent: [ Transcript show: 'no HistoryManager present'.^someString].
claus
parents:
diff changeset
   284
claus
parents:
diff changeset
   285
"/    historyMode := hm instance historyMode.     "this method (addHistroy is called only by the historyManager)"
claus
parents:
diff changeset
   286
"/
claus
parents:
diff changeset
   287
"/    historyMode = false ifTrue: [
claus
parents:
diff changeset
   288
"/        "do nothing with the Code i.e. for filein"
claus
parents:
diff changeset
   289
"/        ^someString
claus
parents:
diff changeset
   290
"/    ].    
claus
parents:
diff changeset
   291
claus
parents:
diff changeset
   292
claus
parents:
diff changeset
   293
    "extract source body."
claus
parents:
diff changeset
   294
    previousHistories isEmpty ifTrue: [
claus
parents:
diff changeset
   295
	sourceCode := someString withoutSeparators.
47
claus
parents: 46
diff changeset
   296
	newLine := (HistoryLine newCreated).
41
claus
parents:
diff changeset
   297
    ] ifFalse: [
claus
parents:
diff changeset
   298
	pos := (previousHistories first) firstPositionInSourceCode.
claus
parents:
diff changeset
   299
	sourceCode := (someString copyFrom: 1 to: pos - 1) withoutSeparators.
47
claus
parents: 46
diff changeset
   300
	newLine := (HistoryLine new).
41
claus
parents:
diff changeset
   301
    ].
claus
parents:
diff changeset
   302
claus
parents:
diff changeset
   303
    "add the actual user's historyLine."
47
claus
parents: 46
diff changeset
   304
    previousHistories add:newLine.
41
claus
parents:
diff changeset
   305
claus
parents:
diff changeset
   306
    "Filtering historyLines each user with one entry)."
claus
parents:
diff changeset
   307
    histLines := HistoryLine filterHistoryLines: previousHistories.
claus
parents:
diff changeset
   308
claus
parents:
diff changeset
   309
    "create new body with added historyLine"
claus
parents:
diff changeset
   310
    wStream := WriteStream on: String new.
claus
parents:
diff changeset
   311
    wStream nextPutAll: sourceCode; cr.
claus
parents:
diff changeset
   312
claus
parents:
diff changeset
   313
    "append the historyLines to the source"
claus
parents:
diff changeset
   314
    wStream cr.
claus
parents:
diff changeset
   315
    histLines do: [:hl |
claus
parents:
diff changeset
   316
       wStream nextPutAll:  hl printString; cr.
claus
parents:
diff changeset
   317
    ].
claus
parents:
diff changeset
   318
claus
parents:
diff changeset
   319
    ^wStream contents.
claus
parents:
diff changeset
   320
47
claus
parents: 46
diff changeset
   321
    "Modified: 11.8.1995 / 16:51:50 / robert"
claus
parents: 46
diff changeset
   322
    "Modified: 8.9.1995 / 17:55:38 / claus"
41
claus
parents:
diff changeset
   323
!
claus
parents:
diff changeset
   324
claus
parents:
diff changeset
   325
update: something with: someArgument from: changedObject
46
claus
parents: 43
diff changeset
   326
    "public - sent whenever any class changed somehow.
claus
parents: 43
diff changeset
   327
     (something contains aSymbol or nil)"
41
claus
parents:
diff changeset
   328
claus
parents:
diff changeset
   329
    | sourceCode aMethod fileInOrRecompiling |
claus
parents:
diff changeset
   330
claus
parents:
diff changeset
   331
"/    changedObject == self ifTrue:[  "for development only"
claus
parents:
diff changeset
   332
"/        self halt.
claus
parents:
diff changeset
   333
"/        ^self.
claus
parents:
diff changeset
   334
"/    ].
46
claus
parents: 43
diff changeset
   335
claus
parents: 43
diff changeset
   336
    fileInOrRecompiling := Class updateChangeFileQuerySignal raise. "Class updatingChanges."
41
claus
parents:
diff changeset
   337
claus
parents:
diff changeset
   338
    changedObject isMeta ifTrue:[
43
claus
parents: 42
diff changeset
   339
"/        Transcript showCr: 'metaClass = ',  changedObject printString.
41
claus
parents:
diff changeset
   340
    ].
claus
parents:
diff changeset
   341
claus
parents:
diff changeset
   342
    (changedObject == Smalltalk) & (something == #newClass) ifTrue:[
claus
parents:
diff changeset
   343
	someArgument addDependent: self.
claus
parents:
diff changeset
   344
	someArgument class  addDependent: self.   "for class methods"
claus
parents:
diff changeset
   345
    ].
claus
parents:
diff changeset
   346
claus
parents:
diff changeset
   347
    fileInOrRecompiling ifFalse:[ 
42
claus
parents: 41
diff changeset
   348
"/        Transcript showCr: '* noChange in history'. 
41
claus
parents:
diff changeset
   349
	^self 
claus
parents:
diff changeset
   350
    ].
claus
parents:
diff changeset
   351
claus
parents:
diff changeset
   352
    "
claus
parents:
diff changeset
   353
    Class Variables
claus
parents:
diff changeset
   354
    "
claus
parents:
diff changeset
   355
    (something == #definition) ifTrue:[
claus
parents:
diff changeset
   356
	"hier die gesamt behandlung fuer Klassen"        
claus
parents:
diff changeset
   357
    ].
claus
parents:
diff changeset
   358
claus
parents:
diff changeset
   359
    "this is a sub item of #definition"    
claus
parents:
diff changeset
   360
    (something == #classVariables) ifTrue:[
claus
parents:
diff changeset
   361
	"
claus
parents:
diff changeset
   362
	Transcript showCr: 'classVariables changed'.
claus
parents:
diff changeset
   363
	"
46
claus
parents: 43
diff changeset
   364
" das geht noch nicht, weil in someArgument nicht die Klasse steht die das betrifft"
41
claus
parents:
diff changeset
   365
	sourceCode := changedObject sourceCodeAt: #history.
claus
parents:
diff changeset
   366
	sourceCode isNil ifTrue:[
claus
parents:
diff changeset
   367
	    "method has not been created"
claus
parents:
diff changeset
   368
"/            Transcript showCr: 'method class-history has not been created'.
claus
parents:
diff changeset
   369
	] ifFalse:[
claus
parents:
diff changeset
   370
	    aMethod := changedObject compiledMethodAt: #history.
claus
parents:
diff changeset
   371
	    sourceCode := self addHistoryTo:sourceCode.
claus
parents:
diff changeset
   372
	    aMethod source: sourceCode.
43
claus
parents: 42
diff changeset
   373
"/            Transcript showCr: 'history updated / added'.
41
claus
parents:
diff changeset
   374
	    ^self
claus
parents:
diff changeset
   375
	].
claus
parents:
diff changeset
   376
    ].    
claus
parents:
diff changeset
   377
claus
parents:
diff changeset
   378
    "
claus
parents:
diff changeset
   379
    New Class creation
claus
parents:
diff changeset
   380
    "
claus
parents:
diff changeset
   381
    ((changedObject == Smalltalk)and:[ (something == #newClass)]) ifTrue:[
claus
parents:
diff changeset
   382
	" self in die Dependents eintragen damit die notification bei den Methoden kommt."
claus
parents:
diff changeset
   383
	someArgument addDependent: self.
claus
parents:
diff changeset
   384
	someArgument history: (self addHistoryTo:String new).  "append historyString for new class"
claus
parents:
diff changeset
   385
    ].
claus
parents:
diff changeset
   386
claus
parents:
diff changeset
   387
    "
claus
parents:
diff changeset
   388
    Instance Handling
claus
parents:
diff changeset
   389
    "
claus
parents:
diff changeset
   390
    changedObject isBehavior ifTrue:[
claus
parents:
diff changeset
   391
	something = #methodDictionary ifTrue:[
claus
parents:
diff changeset
   392
	    "SourceString der Methode holen"
claus
parents:
diff changeset
   393
	    sourceCode := changedObject sourceCodeAt: someArgument.
claus
parents:
diff changeset
   394
	    sourceCode isNil ifTrue:[
claus
parents:
diff changeset
   395
		"method has been deleted"
43
claus
parents: 42
diff changeset
   396
"/                Transcript showCr: 'method has been deleted'.
41
claus
parents:
diff changeset
   397
	    ] ifFalse:[
claus
parents:
diff changeset
   398
		aMethod := changedObject compiledMethodAt: someArgument.
claus
parents:
diff changeset
   399
		sourceCode := self addHistoryTo:sourceCode.
claus
parents:
diff changeset
   400
		aMethod source: sourceCode.
43
claus
parents: 42
diff changeset
   401
"/                Transcript showCr: 'history updated / added'.
41
claus
parents:
diff changeset
   402
	    ].
claus
parents:
diff changeset
   403
	    ^self
claus
parents:
diff changeset
   404
	]. 
claus
parents:
diff changeset
   405
claus
parents:
diff changeset
   406
	something == #comment ifTrue:[
claus
parents:
diff changeset
   407
	    "in someArgument steht jetzt der alte kommentar"
claus
parents:
diff changeset
   408
	    ^self.
claus
parents:
diff changeset
   409
	] ifFalse:[
claus
parents:
diff changeset
   410
	    "it is a class definition"
43
claus
parents: 42
diff changeset
   411
"/            Transcript show: 'Class definition: ', changedObject printString;cr.
41
claus
parents:
diff changeset
   412
	    sourceCode := changedObject sourceCodeAt: #history.
claus
parents:
diff changeset
   413
	    sourceCode isNil ifTrue:[
claus
parents:
diff changeset
   414
		"method has not been created"
43
claus
parents: 42
diff changeset
   415
"/                Transcript showCr: 'method class-history has not been created'.
41
claus
parents:
diff changeset
   416
	    ] ifFalse:[
claus
parents:
diff changeset
   417
		aMethod := changedObject compiledMethodAt: #history.
claus
parents:
diff changeset
   418
claus
parents:
diff changeset
   419
		sourceCode := self addHistoryTo:sourceCode.
claus
parents:
diff changeset
   420
		aMethod source: sourceCode.
claus
parents:
diff changeset
   421
43
claus
parents: 42
diff changeset
   422
"/                Transcript showCr: 'history updated / added'.
41
claus
parents:
diff changeset
   423
	    ].
claus
parents:
diff changeset
   424
	].
claus
parents:
diff changeset
   425
    ].
claus
parents:
diff changeset
   426
claus
parents:
diff changeset
   427
    ^self
claus
parents:
diff changeset
   428
43
claus
parents: 42
diff changeset
   429
    "Modified: 27.8.1995 / 02:14:43 / claus"
41
claus
parents:
diff changeset
   430
! !
claus
parents:
diff changeset
   431
claus
parents:
diff changeset
   432
HistoryManager initialize!