HistoryManager.st
author Claus Gittinger <cg@exept.de>
Sat, 27 Apr 1996 20:06:13 +0200
changeset 243 2d375fb526f6
parent 237 09c4d83d5ab1
child 245 f475bf72217a
permissions -rw-r--r--
examples
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
120
950e4628d657 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 119
diff changeset
    14
Object subclass:#HistoryManager
149
f7d66ab71259 filter out previous Created line after a copy (get 2 of them after copyCategory in browser)
Claus Gittinger <cg@exept.de>
parents: 142
diff changeset
    15
	instanceVariableNames:'historyMode'
f7d66ab71259 filter out previous Created line after a copy (get 2 of them after copyCategory in browser)
Claus Gittinger <cg@exept.de>
parents: 142
diff changeset
    16
	classVariableNames:'TheOneAndOnlyInstance'
f7d66ab71259 filter out previous Created line after a copy (get 2 of them after copyCategory in browser)
Claus Gittinger <cg@exept.de>
parents: 142
diff changeset
    17
	poolDictionaries:''
f7d66ab71259 filter out previous Created line after a copy (get 2 of them after copyCategory in browser)
Claus Gittinger <cg@exept.de>
parents: 142
diff changeset
    18
	category:'System-Changes-History'
41
claus
parents:
diff changeset
    19
!
claus
parents:
diff changeset
    20
claus
parents:
diff changeset
    21
!HistoryManager class methodsFor:'documentation'!
claus
parents:
diff changeset
    22
46
claus
parents: 43
diff changeset
    23
copyright 
claus
parents: 43
diff changeset
    24
"
claus
parents: 43
diff changeset
    25
 COPYRIGHT (c) 1995 by AEG Industry Automation
claus
parents: 43
diff changeset
    26
 COPYRIGHT (c) 1995 by Claus Gittinger
claus
parents: 43
diff changeset
    27
	      All Rights Reserved
claus
parents: 43
diff changeset
    28
claus
parents: 43
diff changeset
    29
 This software is furnished under a license and may be used
claus
parents: 43
diff changeset
    30
 only in accordance with the terms of that license and with the
claus
parents: 43
diff changeset
    31
 inclusion of the above copyright notice.   This software may not
claus
parents: 43
diff changeset
    32
 be provided or otherwise made available to, or used by, any
claus
parents: 43
diff changeset
    33
 other person.  No title to or ownership of the software is
claus
parents: 43
diff changeset
    34
 hereby transferred.
claus
parents: 43
diff changeset
    35
"
claus
parents: 43
diff changeset
    36
!
claus
parents: 43
diff changeset
    37
41
claus
parents:
diff changeset
    38
documentation
claus
parents:
diff changeset
    39
"
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
    40
    This class is part of the HistoryManagerProject.
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
    41
    It helps to keep track of changes made to methods.
41
claus
parents:
diff changeset
    42
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
    43
    All Methods and Classes in the system get a HistroyLine which 
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
    44
    contains a timestamp and the name of the changing user. 
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
    45
    This is acually the UniX loginname.
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
    46
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
    47
    The Manager registers all Classes in the system to get notifications 
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
    48
    on change, intercepts them and appends a historyLine to the methods
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
    49
    code.
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
    50
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
    51
    The HistoryManager can be turned off via the Launcher menu.
41
claus
parents:
diff changeset
    52
235
3ebfdc6edab9 documentation
Claus Gittinger <cg@exept.de>
parents: 214
diff changeset
    53
    [author:]
3ebfdc6edab9 documentation
Claus Gittinger <cg@exept.de>
parents: 214
diff changeset
    54
        Robert Sailer - AEG
243
2d375fb526f6 examples
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
    55
2d375fb526f6 examples
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
    56
    [see also:]
2d375fb526f6 examples
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
    57
        HistoryLine
2d375fb526f6 examples
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
    58
2d375fb526f6 examples
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
    59
    [start with:]
2d375fb526f6 examples
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
    60
         HistoryManager activate
2d375fb526f6 examples
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
    61
         HistoryManager deactivate
2d375fb526f6 examples
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
    62
41
claus
parents:
diff changeset
    63
"
claus
parents:
diff changeset
    64
! !
claus
parents:
diff changeset
    65
claus
parents:
diff changeset
    66
!HistoryManager class methodsFor:'initialization'!
claus
parents:
diff changeset
    67
87
e0f5b58481a6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 82
diff changeset
    68
initMe
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
    69
    "setup theOneAndOnly instance of myself (if not already present"
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
    70
87
e0f5b58481a6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 82
diff changeset
    71
    ^self new.
e0f5b58481a6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 82
diff changeset
    72
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
    73
    "Modified: 14.8.1995 / 09:02:00 / robert"
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
    74
    "Modified: 20.4.1996 / 20:33:44 / cg"
87
e0f5b58481a6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 82
diff changeset
    75
!
e0f5b58481a6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 82
diff changeset
    76
41
claus
parents:
diff changeset
    77
initialize
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
    78
    "add myself as a dependent of ObjectMemory to be told about image restarts"
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
    79
41
claus
parents:
diff changeset
    80
    ObjectMemory addDependent: self.
claus
parents:
diff changeset
    81
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
    82
    "Modified: 14.8.1995 / 09:09:06 / robert"
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
    83
    "Modified: 20.4.1996 / 20:34:09 / cg"
41
claus
parents:
diff changeset
    84
! !
claus
parents:
diff changeset
    85
claus
parents:
diff changeset
    86
!HistoryManager class methodsFor:'instance creation'!
claus
parents:
diff changeset
    87
claus
parents:
diff changeset
    88
new
46
claus
parents: 43
diff changeset
    89
    "because there can be only ONE HistoryManager, new must me redefiend"
41
claus
parents:
diff changeset
    90
claus
parents:
diff changeset
    91
    TheOneAndOnlyInstance isNil ifTrue:[
claus
parents:
diff changeset
    92
	TheOneAndOnlyInstance := super new initialize.
claus
parents:
diff changeset
    93
	HistoryLine initialize.
claus
parents:
diff changeset
    94
    ].
claus
parents:
diff changeset
    95
claus
parents:
diff changeset
    96
   ^ TheOneAndOnlyInstance
claus
parents:
diff changeset
    97
claus
parents:
diff changeset
    98
"
claus
parents:
diff changeset
    99
claus
parents:
diff changeset
   100
    HistoryManager new.
claus
parents:
diff changeset
   101
"
claus
parents:
diff changeset
   102
claus
parents:
diff changeset
   103
    "Modified: 11.08.1995 / 17:01:29 / robert"
claus
parents:
diff changeset
   104
! !
claus
parents:
diff changeset
   105
claus
parents:
diff changeset
   106
!HistoryManager class methodsFor:'accessing'!
claus
parents:
diff changeset
   107
claus
parents:
diff changeset
   108
instance
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   109
    "return the one and only historyManager instance"
41
claus
parents:
diff changeset
   110
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   111
    ^ TheOneAndOnlyInstance
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   112
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   113
    "Modified: 20.4.1996 / 20:31:18 / cg"
41
claus
parents:
diff changeset
   114
!
claus
parents:
diff changeset
   115
claus
parents:
diff changeset
   116
isActive 
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   117
    "return true, if the historyManagement is activated"
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   118
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   119
    ^ TheOneAndOnlyInstance notNil
41
claus
parents:
diff changeset
   120
claus
parents:
diff changeset
   121
    "Modified: 27.8.1995 / 00:32:12 / claus"
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   122
    "Modified: 20.4.1996 / 20:31:32 / cg"
41
claus
parents:
diff changeset
   123
! !
claus
parents:
diff changeset
   124
claus
parents:
diff changeset
   125
!HistoryManager class methodsFor:'activation / deactivation'!
claus
parents:
diff changeset
   126
claus
parents:
diff changeset
   127
activate
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   128
    "activate the HistoryManagement"
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   129
41
claus
parents:
diff changeset
   130
    self new   "/ creating an instance activates me
178
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   131
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   132
    "
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   133
     HistoryManager activate
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   134
    "
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   135
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   136
    "Modified: 20.4.1996 / 20:31:46 / cg"
41
claus
parents:
diff changeset
   137
!
claus
parents:
diff changeset
   138
claus
parents:
diff changeset
   139
deactivate
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   140
    "deactivate the HistoryManagement"
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   141
178
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   142
    |mgr|
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   143
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   144
    mgr := TheOneAndOnlyInstance.
41
claus
parents:
diff changeset
   145
    Smalltalk allClassesDo:[:aClass |
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   146
        aClass removeDependent:mgr.
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   147
        aClass class removeDependent:mgr.
41
claus
parents:
diff changeset
   148
    ].
claus
parents:
diff changeset
   149
    TheOneAndOnlyInstance := nil.
claus
parents:
diff changeset
   150
178
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   151
    "
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   152
     HistoryManager deactivate
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   153
    "
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   154
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   155
    "Modified: 20.4.1996 / 20:31:53 / cg"
41
claus
parents:
diff changeset
   156
! !
claus
parents:
diff changeset
   157
87
e0f5b58481a6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 82
diff changeset
   158
!HistoryManager class methodsFor:'change and update'!
e0f5b58481a6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 82
diff changeset
   159
e0f5b58481a6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 82
diff changeset
   160
update: what
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   161
    "intercepts system restart - reinstall mySelf as dependent of all classes"
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   162
87
e0f5b58481a6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 82
diff changeset
   163
    (what == #restarted) ifTrue:[
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   164
        TheOneAndOnlyInstance notNil ifTrue:[
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   165
            "
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   166
             smalltalk is about to restart from an Image -
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   167
            "
87
e0f5b58481a6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 82
diff changeset
   168
"/            'HistoryManager initialize (via update)' infoPrintNL.
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   169
            self initMe.
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   170
        ]
87
e0f5b58481a6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 82
diff changeset
   171
    ].
e0f5b58481a6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 82
diff changeset
   172
e0f5b58481a6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 82
diff changeset
   173
    "Modified: 27.8.1995 / 16:33:02 / claus"
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   174
    "Modified: 20.4.1996 / 20:33:02 / cg"
87
e0f5b58481a6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 82
diff changeset
   175
! !
e0f5b58481a6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 82
diff changeset
   176
47
claus
parents: 46
diff changeset
   177
!HistoryManager class methodsFor:'helpers'!
claus
parents: 46
diff changeset
   178
claus
parents: 46
diff changeset
   179
getAllHistoriesFrom:someString
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   180
    "returns anArray of HistoryLines from a string.
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   181
     Usually, the argument is a methods source code."
47
claus
parents: 46
diff changeset
   182
claus
parents: 46
diff changeset
   183
    |position aReadWriteStream firstFound nextFound  aHistoryString rcOC h|
claus
parents: 46
diff changeset
   184
claus
parents: 46
diff changeset
   185
    "read begining from the end and look there for the first comment character. If there's none return"
claus
parents: 46
diff changeset
   186
claus
parents: 46
diff changeset
   187
    rcOC := OrderedCollection new.
claus
parents: 46
diff changeset
   188
    position := someString size.
claus
parents: 46
diff changeset
   189
    firstFound := false.
claus
parents: 46
diff changeset
   190
    nextFound := false.
claus
parents: 46
diff changeset
   191
claus
parents: 46
diff changeset
   192
    someString reverseDo:[ :aChar|
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   193
        position := position - 1.
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   194
        aChar == $" ifTrue:[
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   195
            firstFound ifTrue:[
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   196
                firstFound := false.
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   197
                nextFound := true.
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   198
            ] ifFalse:[
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   199
                aReadWriteStream := ReadWriteStream on: String new.
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   200
                firstFound := true.
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   201
                nextFound := false.
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   202
            ].
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   203
        ].
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   204
        (firstFound and: [nextFound not]) ifTrue:[
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   205
            "now collect all up to the next comment character"
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   206
            aChar == $" ifFalse:[     
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   207
                aReadWriteStream nextPut: aChar.
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   208
            ].
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   209
        ].
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   210
        nextFound ifTrue:[
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   211
            "End reached - now try to make a HistoryLine"
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   212
            aHistoryString := (aReadWriteStream contents) reverse.
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   213
            "
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   214
                Transcript showCr: aHistoryString.
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   215
            "
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   216
            h := HistoryLine fromString: aHistoryString at: position.
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   217
            h notNil ifTrue:[
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   218
                rcOC add:h.
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   219
            ].
47
claus
parents: 46
diff changeset
   220
"/            (aHistoryString startsWith: 'Modified:') ifTrue:[
claus
parents: 46
diff changeset
   221
"/                "a history line was found - now make a NewInstance of HistoryLine"
claus
parents: 46
diff changeset
   222
"/                rcOC add: ( HistoryLine fromString: aHistoryString at: position).
claus
parents: 46
diff changeset
   223
"/            ].
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   224
            nextFound := false.
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   225
        ].
47
claus
parents: 46
diff changeset
   226
    ].
claus
parents: 46
diff changeset
   227
claus
parents: 46
diff changeset
   228
    ^rcOC reverse  "the OrderedCollection with HistoryLines in the right order"
claus
parents: 46
diff changeset
   229
claus
parents: 46
diff changeset
   230
    "Modified: 21.12.1993 / 18:32:30 / M.Noell"
claus
parents: 46
diff changeset
   231
    "Modified: 9.8.1995 / 22:45:30 / R.Sailer"
claus
parents: 46
diff changeset
   232
    "Modified: 8.9.1995 / 17:54:33 / claus"
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   233
    "Modified: 20.4.1996 / 20:33:22 / cg"
192
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   234
!
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   235
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   236
withoutHistoryLines:someString
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   237
    "given some methods sourceString, return a copy without any
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   238
     history lines"
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   239
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   240
    | pos sourceCode previousHistories |
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   241
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   242
    previousHistories := self getAllHistoriesFrom:someString.
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   243
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   244
    "extract source body."
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   245
    previousHistories isEmpty ifTrue: [
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   246
        sourceCode := someString withoutSeparators.
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   247
    ] ifFalse: [
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   248
        pos := (previousHistories first) firstPositionInSourceCode.
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   249
        sourceCode := (someString copyFrom: 1 to: pos - 1) withoutSeparators.
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   250
    ].
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   251
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   252
    ^ sourceCode
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   253
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   254
    "Created: 5.3.1996 / 15:11:12 / cg"
dcd1e06e9727 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 178
diff changeset
   255
    "Modified: 6.3.1996 / 11:52:21 / cg"
47
claus
parents: 46
diff changeset
   256
! !
claus
parents: 46
diff changeset
   257
41
claus
parents:
diff changeset
   258
!HistoryManager methodsFor:'accessing'!
claus
parents:
diff changeset
   259
claus
parents:
diff changeset
   260
historyMode
claus
parents:
diff changeset
   261
    "return historyMode"
claus
parents:
diff changeset
   262
claus
parents:
diff changeset
   263
    ^ historyMode
claus
parents:
diff changeset
   264
claus
parents:
diff changeset
   265
    "Modified: 11.08.1995 / 16:51:56 / robert"
claus
parents:
diff changeset
   266
!
claus
parents:
diff changeset
   267
claus
parents:
diff changeset
   268
historyMode:something
claus
parents:
diff changeset
   269
    "set historyMode"
claus
parents:
diff changeset
   270
claus
parents:
diff changeset
   271
    historyMode := something.
claus
parents:
diff changeset
   272
claus
parents:
diff changeset
   273
    "Modified: 11.08.1995 / 16:52:12 / robert"
claus
parents:
diff changeset
   274
! !
claus
parents:
diff changeset
   275
claus
parents:
diff changeset
   276
!HistoryManager methodsFor:'initialization'!
claus
parents:
diff changeset
   277
claus
parents:
diff changeset
   278
exclude
46
claus
parents: 43
diff changeset
   279
    "public - return an exclusionlist for some smalltalk classes which should not be notified or historisized"
41
claus
parents:
diff changeset
   280
claus
parents:
diff changeset
   281
    | oc |
claus
parents:
diff changeset
   282
        
claus
parents:
diff changeset
   283
    oc := OrderedCollection new.
claus
parents:
diff changeset
   284
    oc add: self.
claus
parents:
diff changeset
   285
claus
parents:
diff changeset
   286
    ^oc
claus
parents:
diff changeset
   287
claus
parents:
diff changeset
   288
    "Modified: 11.08.1995 / 17:02:18 / robert"
claus
parents:
diff changeset
   289
!
claus
parents:
diff changeset
   290
claus
parents:
diff changeset
   291
initialize
46
claus
parents: 43
diff changeset
   292
    "public - make me depend on all smalltalk classes (except the exclusionList)
claus
parents: 43
diff changeset
   293
     to be notified later about changes. This intercepts source installation and allows
claus
parents: 43
diff changeset
   294
     be to patch the source-string with a historyLine."
41
claus
parents:
diff changeset
   295
53
claus
parents: 48
diff changeset
   296
    |exclusionlist|
41
claus
parents:
diff changeset
   297
claus
parents:
diff changeset
   298
    super initialize.
claus
parents:
diff changeset
   299
    historyMode := true.
claus
parents:
diff changeset
   300
    exclusionlist := self exclude.
claus
parents:
diff changeset
   301
178
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   302
    Smalltalk allClassesDo:[:aClass|
41
claus
parents:
diff changeset
   303
	"all classes should send a notification if changed"
claus
parents:
diff changeset
   304
	"aClass = self " false ifFalse: [
claus
parents:
diff changeset
   305
	    (exclusionlist includes: aClass) ifFalse:[
claus
parents:
diff changeset
   306
		aClass addDependent: self.
claus
parents:
diff changeset
   307
		aClass class addDependent: self.   "for class methods"
claus
parents:
diff changeset
   308
	    ].
claus
parents:
diff changeset
   309
	].
claus
parents:
diff changeset
   310
    ].
claus
parents:
diff changeset
   311
claus
parents:
diff changeset
   312
    ^self
claus
parents:
diff changeset
   313
claus
parents:
diff changeset
   314
    "Modified: 11.08.1995 / 17:12:51 / robert"
claus
parents:
diff changeset
   315
! !
claus
parents:
diff changeset
   316
claus
parents:
diff changeset
   317
!HistoryManager methodsFor:'updateHistory'!
claus
parents:
diff changeset
   318
149
f7d66ab71259 filter out previous Created line after a copy (get 2 of them after copyCategory in browser)
Claus Gittinger <cg@exept.de>
parents: 142
diff changeset
   319
addHistoryTo:someString forceModification:forceModification forceCreation:forceCreation
41
claus
parents:
diff changeset
   320
    "private - add a historyLine at end to the sourceCode;
140
8c22b3cf100d changed methods which had no history get a Modified string (instead of Created)
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
   321
     check for multiple lines of the same user and merge into one.
8c22b3cf100d changed methods which had no history get a Modified string (instead of Created)
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
   322
     If forceModification is true or a history already exists in someString,
8c22b3cf100d changed methods which had no history get a Modified string (instead of Created)
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
   323
     add a 'Modified' line; otherwise, add a 'Created' line."
41
claus
parents:
diff changeset
   324
53
claus
parents: 48
diff changeset
   325
    | histLines pos wStream sourceCode previousHistories
47
claus
parents: 46
diff changeset
   326
      newLine |
41
claus
parents:
diff changeset
   327
53
claus
parents: 48
diff changeset
   328
    "Check whether we want a history to be added"    
claus
parents: 48
diff changeset
   329
    historyMode ifFalse:[
178
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   330
	^ someString
53
claus
parents: 48
diff changeset
   331
    ].
47
claus
parents: 46
diff changeset
   332
    previousHistories := self class getAllHistoriesFrom:someString.
41
claus
parents:
diff changeset
   333
claus
parents:
diff changeset
   334
    "extract source body."
claus
parents:
diff changeset
   335
    previousHistories isEmpty ifTrue: [
178
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   336
	sourceCode := someString withoutSeparators.
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   337
	forceModification ifTrue:[
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   338
	    newLine := (HistoryLine new)
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   339
	] ifFalse:[
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   340
	    newLine := (HistoryLine newCreated).
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   341
	]
41
claus
parents:
diff changeset
   342
    ] ifFalse: [
178
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   343
	pos := (previousHistories first) firstPositionInSourceCode.
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   344
	sourceCode := (someString copyFrom: 1 to: pos - 1) withoutSeparators.
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   345
	forceCreation ifTrue:[
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   346
	    newLine := (HistoryLine newCreated).
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   347
	] ifFalse:[
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   348
	    newLine := (HistoryLine new)
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   349
	]
41
claus
parents:
diff changeset
   350
    ].
claus
parents:
diff changeset
   351
claus
parents:
diff changeset
   352
    "add the actual user's historyLine."
47
claus
parents: 46
diff changeset
   353
    previousHistories add:newLine.
41
claus
parents:
diff changeset
   354
140
8c22b3cf100d changed methods which had no history get a Modified string (instead of Created)
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
   355
    "Filtering historyLines (each user with one entry)."
41
claus
parents:
diff changeset
   356
    histLines := HistoryLine filterHistoryLines: previousHistories.
claus
parents:
diff changeset
   357
claus
parents:
diff changeset
   358
    "create new body with added historyLine"
claus
parents:
diff changeset
   359
    wStream := WriteStream on: String new.
claus
parents:
diff changeset
   360
    wStream nextPutAll: sourceCode; cr.
claus
parents:
diff changeset
   361
claus
parents:
diff changeset
   362
    "append the historyLines to the source"
claus
parents:
diff changeset
   363
    wStream cr.
claus
parents:
diff changeset
   364
    histLines do: [:hl |
140
8c22b3cf100d changed methods which had no history get a Modified string (instead of Created)
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
   365
       wStream nextPutAll:hl printString; cr.
41
claus
parents:
diff changeset
   366
    ].
claus
parents:
diff changeset
   367
claus
parents:
diff changeset
   368
    ^wStream contents.
claus
parents:
diff changeset
   369
47
claus
parents: 46
diff changeset
   370
    "Modified: 11.8.1995 / 16:51:50 / robert"
claus
parents: 46
diff changeset
   371
    "Modified: 8.9.1995 / 17:55:38 / claus"
149
f7d66ab71259 filter out previous Created line after a copy (get 2 of them after copyCategory in browser)
Claus Gittinger <cg@exept.de>
parents: 142
diff changeset
   372
    "Modified: 13.12.1995 / 14:07:03 / cg"
41
claus
parents:
diff changeset
   373
!
claus
parents:
diff changeset
   374
53
claus
parents: 48
diff changeset
   375
addHistoryToHistoryMethodOf:aClass
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   376
    "private - add a historyLine at end of the classes history methods
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   377
     source - if there is one"
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   378
53
claus
parents: 48
diff changeset
   379
    |cls historyMethod oldSource newSource|
claus
parents: 48
diff changeset
   380
claus
parents: 48
diff changeset
   381
    aClass isMeta ifFalse:[
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   382
        cls := aClass class.
53
claus
parents: 48
diff changeset
   383
    ] ifTrue:[
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   384
        cls := aClass
53
claus
parents: 48
diff changeset
   385
    ].
claus
parents: 48
diff changeset
   386
    historyMethod := cls compiledMethodAt: #history.
claus
parents: 48
diff changeset
   387
    historyMethod notNil ifTrue:[
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   388
        oldSource := historyMethod source.
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   389
        oldSource notNil ifTrue:[
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   390
            newSource := self addHistoryTo:oldSource forceModification:false forceCreation:false.
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   391
            historyMethod source:newSource.
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   392
        ]
53
claus
parents: 48
diff changeset
   393
    ]
149
f7d66ab71259 filter out previous Created line after a copy (get 2 of them after copyCategory in browser)
Claus Gittinger <cg@exept.de>
parents: 142
diff changeset
   394
214
f1220f2a24f7 commentary
Claus Gittinger <cg@exept.de>
parents: 202
diff changeset
   395
    "Modified: 20.4.1996 / 20:35:06 / cg"
53
claus
parents: 48
diff changeset
   396
!
claus
parents: 48
diff changeset
   397
140
8c22b3cf100d changed methods which had no history get a Modified string (instead of Created)
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
   398
update:something with:someArgument from:changedObject
8c22b3cf100d changed methods which had no history get a Modified string (instead of Created)
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
   399
    "arrive here, whenever any class changed somehow.
8c22b3cf100d changed methods which had no history get a Modified string (instead of Created)
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
   400
     (something contains aSymbol describing what happened)"
41
claus
parents:
diff changeset
   401
202
cd007897317e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 200
diff changeset
   402
    | sourceCode newMethod fileInOrRecompiling selector oldMethod|
41
claus
parents:
diff changeset
   403
claus
parents:
diff changeset
   404
"/    changedObject == self ifTrue:[  "for development only"
claus
parents:
diff changeset
   405
"/        self halt.
claus
parents:
diff changeset
   406
"/        ^self.
claus
parents:
diff changeset
   407
"/    ].
46
claus
parents: 43
diff changeset
   408
140
8c22b3cf100d changed methods which had no history get a Modified string (instead of Created)
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
   409
    fileInOrRecompiling := Class updateChangeFileQuerySignal raise.
41
claus
parents:
diff changeset
   410
53
claus
parents: 48
diff changeset
   411
"/    changedObject isMeta ifTrue:[
43
claus
parents: 42
diff changeset
   412
"/        Transcript showCr: 'metaClass = ',  changedObject printString.
53
claus
parents: 48
diff changeset
   413
"/    ].
41
claus
parents:
diff changeset
   414
claus
parents:
diff changeset
   415
    fileInOrRecompiling ifFalse:[ 
42
claus
parents: 41
diff changeset
   416
"/        Transcript showCr: '* noChange in history'. 
178
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   417
	^ self 
53
claus
parents: 48
diff changeset
   418
    ].
claus
parents: 48
diff changeset
   419
    historyMode ifFalse:[
178
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   420
	^ self
41
claus
parents:
diff changeset
   421
    ].
claus
parents:
diff changeset
   422
claus
parents:
diff changeset
   423
    "
claus
parents:
diff changeset
   424
    Class Variables
claus
parents:
diff changeset
   425
    "
claus
parents:
diff changeset
   426
    (something == #definition) ifTrue:[
178
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   427
	"add handling for classes here ..."        
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   428
	"/ self addHistoryToHistoryMethodOf:changedObject.
41
claus
parents:
diff changeset
   429
    ].
claus
parents:
diff changeset
   430
claus
parents:
diff changeset
   431
    "this is a sub item of #definition"    
claus
parents:
diff changeset
   432
    (something == #classVariables) ifTrue:[
178
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   433
	"
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   434
	Transcript showCr: 'classVariables changed'.
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   435
	"
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   436
	"/ does not yet work;
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   437
	"/ (someArgument does not contain the class we are interested in)
140
8c22b3cf100d changed methods which had no history get a Modified string (instead of Created)
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
   438
178
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   439
	self addHistoryToHistoryMethodOf:changedObject.
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   440
	^ self
41
claus
parents:
diff changeset
   441
    ].    
claus
parents:
diff changeset
   442
claus
parents:
diff changeset
   443
    "
140
8c22b3cf100d changed methods which had no history get a Modified string (instead of Created)
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
   444
     new Class creation
41
claus
parents:
diff changeset
   445
    "
140
8c22b3cf100d changed methods which had no history get a Modified string (instead of Created)
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
   446
    ((changedObject == Smalltalk) and:[something == #newClass]) ifTrue:[
178
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   447
	"/ 
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   448
	"/  add myself as dependents in order to get future change notifications
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   449
	"/ 
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   450
	someArgument addDependent: self.
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   451
	someArgument class addDependent: self.   "for class methods"
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   452
	someArgument history:(self addHistoryTo:String new forceModification:false forceCreation:false).  "append historyString for new class"
41
claus
parents:
diff changeset
   453
    ].
claus
parents:
diff changeset
   454
claus
parents:
diff changeset
   455
    "
140
8c22b3cf100d changed methods which had no history get a Modified string (instead of Created)
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
   456
     changed methods
41
claus
parents:
diff changeset
   457
    "
claus
parents:
diff changeset
   458
    changedObject isBehavior ifTrue:[
178
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   459
	something = #methodDictionary ifTrue:[
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   460
	    someArgument isArray ifTrue:[
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   461
		selector := someArgument at:1.
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   462
		oldMethod := someArgument at:2
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   463
	    ] ifFalse:[
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   464
		selector := someArgument
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   465
	    ].
140
8c22b3cf100d changed methods which had no history get a Modified string (instead of Created)
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
   466
178
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   467
	    "/
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   468
	    "/ fetch sourceString of the method
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   469
	    "/
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   470
	    sourceCode := changedObject sourceCodeAt:selector.
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   471
	    sourceCode isNil ifTrue:[
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   472
		"method has been deleted"
43
claus
parents: 42
diff changeset
   473
"/                Transcript showCr: 'method has been deleted'.
178
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   474
	    ] ifFalse:[
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   475
		newMethod := changedObject compiledMethodAt:selector.
140
8c22b3cf100d changed methods which had no history get a Modified string (instead of Created)
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
   476
178
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   477
		oldMethod notNil ifTrue:[
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   478
		    (oldMethod source asString withTabsExpanded = sourceCode asString withTabsExpanded) ifTrue:[
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   479
			 "/ no change (accepted same code again ?)
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   480
			^ self
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   481
		    ].
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   482
		].
140
8c22b3cf100d changed methods which had no history get a Modified string (instead of Created)
Claus Gittinger <cg@exept.de>
parents: 120
diff changeset
   483
178
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   484
		"/
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   485
		"/ dont add historylines to documentation methods ...
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   486
		"/
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   487
		(changedObject isMeta not
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   488
		or:[newMethod category ~= 'documentation']) ifTrue:[
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   489
		    sourceCode := self addHistoryTo:sourceCode forceModification:(oldMethod notNil) forceCreation:(oldMethod isNil).
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   490
		    newMethod source: sourceCode.
43
claus
parents: 42
diff changeset
   491
"/                Transcript showCr: 'history updated / added'.
178
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   492
		]
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   493
	    ].
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   494
	    ^self
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   495
	]. 
41
claus
parents:
diff changeset
   496
178
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   497
	something == #comment ifTrue:[
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   498
	    "in someArgument steht jetzt der alte kommentar"
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   499
	    ^ self.
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   500
	] ifFalse:[
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   501
	    "it is a class definition"
43
claus
parents: 42
diff changeset
   502
"/            Transcript show: 'Class definition: ', changedObject printString;cr.
178
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   503
	    self addHistoryToHistoryMethodOf:changedObject.
daae23ef8c93 slight optimization
Claus Gittinger <cg@exept.de>
parents: 154
diff changeset
   504
	].
41
claus
parents:
diff changeset
   505
    ].
claus
parents:
diff changeset
   506
claus
parents:
diff changeset
   507
    ^self
claus
parents:
diff changeset
   508
43
claus
parents: 42
diff changeset
   509
    "Modified: 27.8.1995 / 02:14:43 / claus"
149
f7d66ab71259 filter out previous Created line after a copy (get 2 of them after copyCategory in browser)
Claus Gittinger <cg@exept.de>
parents: 142
diff changeset
   510
    "Modified: 13.12.1995 / 14:06:20 / cg"
41
claus
parents:
diff changeset
   511
! !
claus
parents:
diff changeset
   512
119
1a9c5a761edf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 87
diff changeset
   513
!HistoryManager class methodsFor:'documentation'!
1a9c5a761edf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 87
diff changeset
   514
1a9c5a761edf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 87
diff changeset
   515
version
243
2d375fb526f6 examples
Claus Gittinger <cg@exept.de>
parents: 237
diff changeset
   516
    ^ '$Header: /cvs/stx/stx/libbasic3/HistoryManager.st,v 1.26 1996-04-27 18:06:13 cg Exp $'
119
1a9c5a761edf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 87
diff changeset
   517
! !
41
claus
parents:
diff changeset
   518
HistoryManager initialize!