ChangesBrowser.st
author claus
Fri, 05 Aug 1994 12:21:22 +0200
changeset 31 7ee4217817fa
parent 29 8a72e10043f6
child 33 11474e0f4d00
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
     1
"{ Package: 'Programming Tools' }"
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
     2
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
     3
"
4
77d8e96499b2 *** empty log message ***
claus
parents: 1
diff changeset
     4
 COPYRIGHT (c) 1990 by Claus Gittinger
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
     5
              All Rights Reserved
571fd5eee315 Initial revision
claus
parents:
diff changeset
     6
571fd5eee315 Initial revision
claus
parents:
diff changeset
     7
 This software is furnished under a license and may be used
571fd5eee315 Initial revision
claus
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
571fd5eee315 Initial revision
claus
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
571fd5eee315 Initial revision
claus
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
571fd5eee315 Initial revision
claus
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
571fd5eee315 Initial revision
claus
parents:
diff changeset
    12
 hereby transferred.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    13
"
571fd5eee315 Initial revision
claus
parents:
diff changeset
    14
571fd5eee315 Initial revision
claus
parents:
diff changeset
    15
StandardSystemView subclass:#ChangesBrowser
571fd5eee315 Initial revision
claus
parents:
diff changeset
    16
       instanceVariableNames:'changeListView codeView changeFileName 
571fd5eee315 Initial revision
claus
parents:
diff changeset
    17
                              changeChunks changePositions
571fd5eee315 Initial revision
claus
parents:
diff changeset
    18
                              changeClassNames
571fd5eee315 Initial revision
claus
parents:
diff changeset
    19
                              anyChanges changeNrShown changeNrProcessed
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
    20
                              fileBox'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    21
       classVariableNames:''
571fd5eee315 Initial revision
claus
parents:
diff changeset
    22
       poolDictionaries:''
571fd5eee315 Initial revision
claus
parents:
diff changeset
    23
       category:'Interface-Browsers'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    24
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    25
571fd5eee315 Initial revision
claus
parents:
diff changeset
    26
ChangesBrowser comment:'
4
77d8e96499b2 *** empty log message ***
claus
parents: 1
diff changeset
    27
COPYRIGHT (c) 1990 by Claus Gittinger
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    28
            All Rights Reserved
571fd5eee315 Initial revision
claus
parents:
diff changeset
    29
31
7ee4217817fa *** empty log message ***
claus
parents: 29
diff changeset
    30
$Header: /cvs/stx/stx/libtool/ChangesBrowser.st,v 1.13 1994-08-05 10:21:22 claus Exp $
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    31
'!
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    32
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    33
!ChangesBrowser class methodsFor:'documentation'!
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    34
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    35
copyright
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    36
"
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    37
 COPYRIGHT (c) 1990 by Claus Gittinger
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    38
              All Rights Reserved
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    39
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    40
 This software is furnished under a license and may be used
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    41
 only in accordance with the terms of that license and with the
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    42
 inclusion of the above copyright notice.   This software may not
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    43
 be provided or otherwise made available to, or used by, any
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    44
 other person.  No title to or ownership of the software is
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    45
 hereby transferred.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    46
"
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    47
!
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    48
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    49
version
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    50
"
31
7ee4217817fa *** empty log message ***
claus
parents: 29
diff changeset
    51
$Header: /cvs/stx/stx/libtool/ChangesBrowser.st,v 1.13 1994-08-05 10:21:22 claus Exp $
7ee4217817fa *** empty log message ***
claus
parents: 29
diff changeset
    52
"
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    53
!
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    54
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    55
documentation
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    56
"
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    57
    this implements a browser for the changes-file.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    58
    See the extra document 'doc/misc/cbrowser.doc' for how to use this browser.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    59
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    60
    written jan 90 by claus
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    61
"
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
    62
! !
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    63
571fd5eee315 Initial revision
claus
parents:
diff changeset
    64
!ChangesBrowser class methodsFor:'behavior'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    65
571fd5eee315 Initial revision
claus
parents:
diff changeset
    66
autoSelectNext
571fd5eee315 Initial revision
claus
parents:
diff changeset
    67
    "returning true here, makes a Delete operation automatically
571fd5eee315 Initial revision
claus
parents:
diff changeset
    68
     select the next change"
571fd5eee315 Initial revision
claus
parents:
diff changeset
    69
571fd5eee315 Initial revision
claus
parents:
diff changeset
    70
    ^ true
571fd5eee315 Initial revision
claus
parents:
diff changeset
    71
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
    72
571fd5eee315 Initial revision
claus
parents:
diff changeset
    73
!ChangesBrowser class methodsFor:'instance creation'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    74
571fd5eee315 Initial revision
claus
parents:
diff changeset
    75
new
571fd5eee315 Initial revision
claus
parents:
diff changeset
    76
    "create a new changes browser"
571fd5eee315 Initial revision
claus
parents:
diff changeset
    77
571fd5eee315 Initial revision
claus
parents:
diff changeset
    78
    ^ super label:'Changes Browser'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    79
             icon:(Form fromFile:'CBrowser.xbm' resolution:100)
571fd5eee315 Initial revision
claus
parents:
diff changeset
    80
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    81
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
    82
openOn:aFileName
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    83
    "create c changes browser on a change file"
571fd5eee315 Initial revision
claus
parents:
diff changeset
    84
6
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
    85
    ^ ((self new label:'Changes Browser:', aFileName) changeFileName:aFileName) open
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    86
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
    87
571fd5eee315 Initial revision
claus
parents:
diff changeset
    88
!ChangesBrowser methodsFor:'initialize / release'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    89
571fd5eee315 Initial revision
claus
parents:
diff changeset
    90
initialize
571fd5eee315 Initial revision
claus
parents:
diff changeset
    91
    |frame v|
571fd5eee315 Initial revision
claus
parents:
diff changeset
    92
571fd5eee315 Initial revision
claus
parents:
diff changeset
    93
    super initialize.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    94
571fd5eee315 Initial revision
claus
parents:
diff changeset
    95
    changeFileName := 'changes'.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    96
571fd5eee315 Initial revision
claus
parents:
diff changeset
    97
    frame := VariableVerticalPanel origin:(0.0 @ 0.0)
571fd5eee315 Initial revision
claus
parents:
diff changeset
    98
                                   corner:(1.0 @ 1.0)
571fd5eee315 Initial revision
claus
parents:
diff changeset
    99
                              borderWidth:0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   100
                                       in:self.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   101
571fd5eee315 Initial revision
claus
parents:
diff changeset
   102
    v := ScrollableView for:SelectionInListView in:frame.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   103
    v origin:(0.0 @ 0.0) corner:(1.0 @ 0.3).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   104
    changeListView := v scrolledView.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   105
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   106
    v := HVScrollableView for:CodeView miniScrollerH:true miniScrollerV:false in:frame.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   107
    v origin:(0.0 @ 0.3) corner:(1.0 @ 1.0).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   108
    codeView := v scrolledView.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   109
571fd5eee315 Initial revision
claus
parents:
diff changeset
   110
    anyChanges := false.
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   111
    ObjectMemory addDependent:self.   "to get shutdown-update"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   112
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   113
571fd5eee315 Initial revision
claus
parents:
diff changeset
   114
initializeMiddleButtonMenu
571fd5eee315 Initial revision
claus
parents:
diff changeset
   115
    |labels|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   116
1
4bb1d231596f *** empty log message ***
claus
parents: 0
diff changeset
   117
    labels := resources array:#(
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   118
                               'apply change'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   119
                               'apply changes to end'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   120
                               'apply all changes'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   121
                               '-'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   122
                               'delete'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   123
                               'delete to end'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   124
                               'delete changes for this class to end'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   125
                               'delete all changes for this class'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   126
                               '-'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   127
                               'update'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   128
                               'compress'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   129
                               'compare with current version'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   130
                               '-'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   131
                               'make change a patch'
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   132
                               'save change in a file'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   133
                               'update sourcefile from change'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   134
                               '-'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   135
                               'writeback changeFile').
571fd5eee315 Initial revision
claus
parents:
diff changeset
   136
571fd5eee315 Initial revision
claus
parents:
diff changeset
   137
    changeListView
571fd5eee315 Initial revision
claus
parents:
diff changeset
   138
        middleButtonMenu:(PopUpMenu 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   139
                            labels:labels
571fd5eee315 Initial revision
claus
parents:
diff changeset
   140
                         selectors:#(
571fd5eee315 Initial revision
claus
parents:
diff changeset
   141
                                     doApply
571fd5eee315 Initial revision
claus
parents:
diff changeset
   142
                                     doApplyRest
571fd5eee315 Initial revision
claus
parents:
diff changeset
   143
                                     doApplyAll
571fd5eee315 Initial revision
claus
parents:
diff changeset
   144
                                     nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   145
                                     doDelete
571fd5eee315 Initial revision
claus
parents:
diff changeset
   146
                                     doDeleteRest
571fd5eee315 Initial revision
claus
parents:
diff changeset
   147
                                     doDeleteClassRest
571fd5eee315 Initial revision
claus
parents:
diff changeset
   148
                                     doDeleteClassAll
571fd5eee315 Initial revision
claus
parents:
diff changeset
   149
                                     nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   150
                                     doUpdate
571fd5eee315 Initial revision
claus
parents:
diff changeset
   151
                                     doCompress
571fd5eee315 Initial revision
claus
parents:
diff changeset
   152
                                     doCompare
571fd5eee315 Initial revision
claus
parents:
diff changeset
   153
                                     nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   154
                                     doMakePatch
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   155
                                     doSaveChangeInFile
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   156
                                     doMakePermanent
571fd5eee315 Initial revision
claus
parents:
diff changeset
   157
                                     nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   158
                                     doWriteBack)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   159
                          receiver:self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   160
                               for:changeListView)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   161
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   162
571fd5eee315 Initial revision
claus
parents:
diff changeset
   163
realize
571fd5eee315 Initial revision
claus
parents:
diff changeset
   164
    super realize.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   165
    self readChangesFile.
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   166
    self setChangeList.
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   167
    changeListView action:[:lineNr | self changeSelection:lineNr].
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   168
    self disableMenuEntries.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   169
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   170
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   171
update:what
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   172
    |box|
27
3dd66037a853 *** empty log message ***
claus
parents: 26
diff changeset
   173
3dd66037a853 *** empty log message ***
claus
parents: 26
diff changeset
   174
    (what == #aboutToExit) ifTrue:[
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   175
        "
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   176
         smalltalk is about to shut down -
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   177
         - if change list was modified, ask user and save if requested.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   178
        "
27
3dd66037a853 *** empty log message ***
claus
parents: 26
diff changeset
   179
        anyChanges ifTrue:[
3dd66037a853 *** empty log message ***
claus
parents: 26
diff changeset
   180
            shown ifFalse:[
3dd66037a853 *** empty log message ***
claus
parents: 26
diff changeset
   181
                self unrealize.
3dd66037a853 *** empty log message ***
claus
parents: 26
diff changeset
   182
                self realize
3dd66037a853 *** empty log message ***
claus
parents: 26
diff changeset
   183
            ].
3dd66037a853 *** empty log message ***
claus
parents: 26
diff changeset
   184
            self raise.
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   185
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   186
            box := YesNoBox new.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   187
            box title:(resources at:'ChangesBrowser:\changefile has not been updated from the modified changelist.\\Update before exiting ?') withCRs.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   188
            box noText:(resources at:'don''t update').
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   189
            box okText:(resources at:'update').
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   190
            box yesAction:[self writeBackChanges] 
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   191
                 noAction:[].
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   192
            box showAtPointer
27
3dd66037a853 *** empty log message ***
claus
parents: 26
diff changeset
   193
        ].
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   194
        ^ self
27
3dd66037a853 *** empty log message ***
claus
parents: 26
diff changeset
   195
    ].
3dd66037a853 *** empty log message ***
claus
parents: 26
diff changeset
   196
    super update:what
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   197
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
   198
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   199
!ChangesBrowser methodsFor:'termination'!
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   200
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   201
destroy
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   202
    "destroy the receiver; make certain, that boxes are destroyed too"
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   203
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   204
    ObjectMemory removeDependent:self.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   205
    fileBox notNil ifTrue:[fileBox destroy. fileBox := nil].
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   206
    super destroy
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   207
!
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   208
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   209
saveAndTerminate
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   210
    "update the changes file and quit.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   211
     Dont depend on this being sent, not all window managers
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   212
     send it; instead, they simply destroy the view."
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   213
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   214
    anyChanges ifTrue:[
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   215
        self writeBackChanges.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   216
    ].
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   217
    self destroy
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   218
!
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   219
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   220
terminate
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   221
    "window manager wants us to go away"
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   222
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   223
    |box|
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   224
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   225
    anyChanges ifTrue:[
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   226
        box := OptionBox title:'' numberOfOptions:3.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   227
        box title:(resources at:'ChangesBrowser:\changefile has not been updated from the modified changelist.\\Update before exiting ?') withCRs.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   228
        box buttonTitles:(resources array:#('abort' 'dont''t update' 'update')).
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   229
        box actions:(Array with:[^ self]
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   230
                           with:[self destroy]
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   231
                           with:[self writeBackChanges. self destroy]
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   232
                    ).
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   233
        box showAtPointer.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   234
    ] ifFalse:[
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   235
        self destroy
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   236
    ]
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   237
! !
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   238
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   239
!ChangesBrowser methodsFor:'private'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   240
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   241
enableMenuEntries
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   242
    "enable all entries refering to a class"
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   243
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   244
    #(doApply doApplyRest doDelete doDeleteRest doDeleteClassRest
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   245
      doDeleteClassAll doCompare doMakePatch doSaveChangeInFile doMakePermanent) 
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   246
    do:[:sel |
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   247
        changeListView middleButtonMenu enable:sel
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   248
    ].
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   249
!
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   250
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   251
disableMenuEntries
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   252
    "enable all entries refering to a class"
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   253
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   254
    #(doApply doApplyRest doDelete doDeleteRest doDeleteClassRest
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   255
      doDeleteClassAll doCompare doMakePatch doSaveChangeInFile doMakePermanent) 
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   256
    do:[:sel |
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   257
        changeListView middleButtonMenu disable:sel
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   258
    ].
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   259
!
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   260
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   261
unselect
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   262
    "common unselect"
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   263
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   264
    changeListView deselect.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   265
    self disableMenuEntries
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   266
!
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   267
6
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   268
queryCloseText
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   269
    "made this a method for easy redefinition in subclasses"
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   270
6
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   271
    ^ 'Quit without updating changeFile ?'
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   272
!
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   273
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   274
changeFileName:aFileName
571fd5eee315 Initial revision
claus
parents:
diff changeset
   275
    changeFileName := aFileName
571fd5eee315 Initial revision
claus
parents:
diff changeset
   276
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   277
571fd5eee315 Initial revision
claus
parents:
diff changeset
   278
withCursor:aCursor do:aBlock
571fd5eee315 Initial revision
claus
parents:
diff changeset
   279
    "evaluate aBlock while showing another cursor"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   280
571fd5eee315 Initial revision
claus
parents:
diff changeset
   281
    |oldListCursor oldCodeViewCursor|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   282
571fd5eee315 Initial revision
claus
parents:
diff changeset
   283
    oldListCursor := changeListView cursor.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   284
    oldCodeViewCursor := codeView cursor.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   285
571fd5eee315 Initial revision
claus
parents:
diff changeset
   286
    changeListView cursor:aCursor.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   287
    codeView cursor:aCursor.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   288
571fd5eee315 Initial revision
claus
parents:
diff changeset
   289
    aBlock valueNowOrOnUnwindDo:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   290
        changeListView cursor:oldListCursor.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   291
        codeView cursor:oldCodeViewCursor
571fd5eee315 Initial revision
claus
parents:
diff changeset
   292
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   293
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   294
571fd5eee315 Initial revision
claus
parents:
diff changeset
   295
classNameOfChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   296
    "return the classname of a change (for xxx class - changes xxx is returned)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   297
     - since parsing ascii methods is slow, keep result cached in 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   298
       changeClassNames for the next query"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   299
571fd5eee315 Initial revision
claus
parents:
diff changeset
   300
    |chunk aParseTree recTree sel name arg1Tree|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   301
571fd5eee315 Initial revision
claus
parents:
diff changeset
   302
    changeNr notNil ifTrue:[
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   303
        "
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   304
         first look, if not already known
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   305
        "
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   306
        name := changeClassNames at:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   307
        name notNil ifTrue:[^ name].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   308
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   309
        "
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   310
         get the chunk
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   311
        "
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   312
        chunk := changeChunks at:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   313
        chunk notNil ifTrue:[
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   314
            "
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   315
             use parser to construct a parseTree
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   316
            "
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   317
            aParseTree := Parser parseExpression:chunk.
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   318
            (aParseTree notNil and:[aParseTree isMessage]) ifTrue:[
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   319
                "
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   320
                 ask parser for selector
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   321
                "
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   322
                sel := aParseTree selector.
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   323
                "
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   324
                 is it a method-change, methodRemove or comment-change ?
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   325
                "
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   326
                (#(methodsFor: privateMethodsFor: publicMethodsFor: 
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   327
                   removeSelector: comment:) includes:sel) ifTrue:[
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   328
                    "
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   329
                     yes, the className is the receiver
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   330
                    "
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   331
                    recTree := aParseTree receiver.
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   332
                    (recTree notNil and:[recTree ~~ #Error]) ifTrue:[
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   333
                        recTree isUnaryMessage ifTrue:[
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   334
                            (recTree selector ~~ #class) ifTrue:[^ nil].
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   335
                            "id class methodsFor:..."
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   336
                            recTree := recTree receiver
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   337
                        ].
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   338
                        recTree isPrimary ifTrue:[
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   339
                            name := recTree name.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   340
                            changeClassNames at:changeNr put:name.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   341
                            ^ name
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   342
                        ]
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   343
                    ]
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   344
                ] ifFalse:[
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   345
                    "
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   346
                     is it a change in a class-description ?
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   347
                    "
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   348
                    ('subclass:*' match:sel) ifTrue:[
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   349
                        arg1Tree := aParseTree arg1.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   350
                        (arg1Tree notNil and:[arg1Tree isConstant]) ifTrue:[
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   351
                            name := arg1Tree value asString.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   352
                            changeClassNames at:changeNr put:name.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   353
                            ^ name
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   354
                        ]
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   355
                    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   356
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   357
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   358
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   359
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   360
    ^ nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   361
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   362
571fd5eee315 Initial revision
claus
parents:
diff changeset
   363
streamForChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   364
    "answer a stream for change"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   365
 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   366
    |aStream|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   367
571fd5eee315 Initial revision
claus
parents:
diff changeset
   368
    aStream := FileStream readonlyFileNamed:changeFileName.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   369
    aStream isNil ifTrue:[^ nil].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   370
    aStream position:(changePositions at:changeNr).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   371
    ^ aStream
571fd5eee315 Initial revision
claus
parents:
diff changeset
   372
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   373
571fd5eee315 Initial revision
claus
parents:
diff changeset
   374
clearCodeView
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   375
    self unselect "changeListView deselect".
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   376
    codeView contents:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   377
    changeNrShown := nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   378
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   379
571fd5eee315 Initial revision
claus
parents:
diff changeset
   380
autoSelect:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   381
    self class autoSelectNext ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   382
        (changeNr <= changeChunks size) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   383
            changeListView selection:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   384
            self changeSelection:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   385
            ^ self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   386
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   387
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   388
    self clearCodeView
571fd5eee315 Initial revision
claus
parents:
diff changeset
   389
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   390
571fd5eee315 Initial revision
claus
parents:
diff changeset
   391
writeBackChanges
571fd5eee315 Initial revision
claus
parents:
diff changeset
   392
    "write back the changes file"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   393
571fd5eee315 Initial revision
claus
parents:
diff changeset
   394
    |inStream outStream chunk sawExcla excla done dir|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   395
571fd5eee315 Initial revision
claus
parents:
diff changeset
   396
    outStream := FileStream newFileNamed:'n_changes'.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   397
    outStream isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   398
        self warn:'cannot create temporary file'.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   399
        ^ self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   400
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   401
   
571fd5eee315 Initial revision
claus
parents:
diff changeset
   402
    inStream := FileStream readonlyFileNamed:changeFileName.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   403
    inStream isNil ifTrue:[^ nil].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   404
571fd5eee315 Initial revision
claus
parents:
diff changeset
   405
    self withCursor:(Cursor write) do:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   406
        excla := inStream class chunkSeparator.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   407
        1 to:(changeChunks size) do:[:index |
571fd5eee315 Initial revision
claus
parents:
diff changeset
   408
            inStream position:(changePositions at:index).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   409
            sawExcla := inStream peekFor:excla.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   410
            chunk := inStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   411
571fd5eee315 Initial revision
claus
parents:
diff changeset
   412
            sawExcla ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   413
                outStream nextPut:excla.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   414
                outStream nextChunkPut:chunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   415
                outStream cr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   416
                "a method-definition chunk - skip followups"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   417
                done := false.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   418
                [done] whileFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   419
                    chunk := inStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   420
                    chunk isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   421
                        done := true
571fd5eee315 Initial revision
claus
parents:
diff changeset
   422
                    ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   423
                        outStream nextChunkPut:chunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   424
                        outStream cr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   425
                        done := chunk isEmpty
571fd5eee315 Initial revision
claus
parents:
diff changeset
   426
                    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   427
                ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   428
                0 "compiler kludge"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   429
            ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   430
                outStream nextChunkPut:chunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   431
                outStream cr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   432
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   433
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   434
        outStream close.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   435
        inStream close.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   436
        dir := FileDirectory currentDirectory.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   437
        dir removeFile:changeFileName.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   438
        dir renameFile:'n_changes' newName:changeFileName.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   439
        anyChanges := false
571fd5eee315 Initial revision
claus
parents:
diff changeset
   440
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   441
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   442
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   443
setChangeList
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   444
    "extract type-information from changes and stuff into top selection
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   445
     view"
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   446
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   447
    changeListView contents:changeChunks.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   448
!
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   449
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   450
readChangesFile
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   451
    "read the changes file, create a list of header-lines (changeChunks)
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   452
     and a list of chunk-positions (changePositions)"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   453
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   454
    |aStream index text done sawExcla chunkPos excla
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   455
     myProcess myPriority p sel cls|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   456
571fd5eee315 Initial revision
claus
parents:
diff changeset
   457
    aStream := FileStream readonlyFileNamed:changeFileName.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   458
    aStream isNil ifTrue:[^ nil].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   459
571fd5eee315 Initial revision
claus
parents:
diff changeset
   460
    self withCursor:(Cursor read) do:[
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   461
        "
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   462
         this is a time consuming operation (especially, if reading an
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   463
         NFS-mounted directory; therefore lower my priority ...
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   464
        "
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   465
        myProcess := Processor activeProcess.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   466
        myPriority := myProcess priority.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   467
        myProcess priority:(Processor userBackgroundPriority).
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   468
        [
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   469
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   470
            changeChunks := OrderedCollection new.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   471
            changePositions := OrderedCollection new.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   472
            excla := aStream class chunkSeparator.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   473
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   474
            [aStream atEnd] whileFalse:[
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   475
                "
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   476
                 get a chunk (separated by excla)
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   477
                "
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   478
                aStream skipSeparators.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   479
                chunkPos := aStream position.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   480
                sawExcla := aStream peekFor:excla.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   481
                text := aStream nextChunk.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   482
                text notNil ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   483
                    changePositions add:chunkPos.
6
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   484
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   485
                    "
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   486
                     only first line is saved in changeChunks ...
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   487
                    "
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   488
                    index := text indexOf:(Character cr).
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   489
                    (index ~~ 0) ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   490
                        text := text copyTo:(index - 1).
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   491
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   492
                        "take care for comment changes - must still be a
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   493
                         valid expression for classNameOfChange: to work"
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   494
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   495
                        (text endsWith:'comment:''') ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   496
                            text := text , '...'''
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   497
                        ]
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   498
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   499
                    ].
6
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   500
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   501
                    sawExcla ifFalse:[
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   502
                        (text startsWith:'''---- snap') ifFalse:[
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   503
"/                            text := '(doIt) ' , text.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   504
                        ].
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   505
                        changeChunks add:text.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   506
                    ] ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   507
                        "
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   508
                         method definitions actually consist of
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   509
                         two (or more) chunks; skip next chunk(s)
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   510
                         up to an empty one.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   511
                         (the system currently only writes one chunk,
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   512
                          but in theory, more could follow for the same
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   513
                          class/category).
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   514
                        "
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   515
                        cls := nil.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   516
                        p := Parser parseExpression:text.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   517
                        (p notNil and:[p ~~ #Error]) ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   518
                            sel := p selector.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   519
                            (sel == #methodsFor:) ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   520
                                p receiver isUnaryMessage ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   521
                                    cls := p receiver receiver name.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   522
                                    cls := cls , 'class'
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   523
                                ] ifFalse:[
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   524
                                    cls := p receiver name
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   525
                                ]
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   526
                            ]
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   527
                        ].
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   528
                        cls isNil ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   529
                            changeChunks add:text , ' (change)'.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   530
                        ].
6
226ff00db7e3 *** empty log message ***
claus
parents: 4
diff changeset
   531
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   532
                        done := false.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   533
                        [done] whileFalse:[
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   534
                            text := aStream nextChunk.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   535
                            text isNil ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   536
                                done := true
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   537
                            ] ifFalse:[
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   538
                                done := text isEmpty
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   539
                            ].
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   540
                            done ifFalse:[
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   541
                                cls notNil ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   542
                                    p := Parser parseMethodSpecification:text.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   543
                                    (p notNil and:[p ~~ #Error]) ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   544
                                        sel := p selector.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   545
                                        changeChunks add: cls , ' ' , sel
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   546
                                    ]
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   547
                                ]
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   548
                            ]
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   549
                        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   550
                    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   551
                ]
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   552
            ].
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   553
            changeClassNames := VariableArray new:(changeChunks size).
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   554
            aStream close.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   555
            anyChanges := false
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   556
        ] valueNowOrOnUnwindDo:[
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   557
            myProcess priority:myPriority.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   558
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   559
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   560
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   561
571fd5eee315 Initial revision
claus
parents:
diff changeset
   562
silentDeleteChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   563
    "delete a change do not update changeListView"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   564
571fd5eee315 Initial revision
claus
parents:
diff changeset
   565
    anyChanges := true.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   566
    changeChunks removeIndex:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   567
    changePositions removeIndex:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   568
    changeClassNames removeIndex:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   569
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   570
571fd5eee315 Initial revision
claus
parents:
diff changeset
   571
571fd5eee315 Initial revision
claus
parents:
diff changeset
   572
deleteChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   573
    "delete a change"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   574
571fd5eee315 Initial revision
claus
parents:
diff changeset
   575
    changeListView deselect.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   576
    self silentDeleteChange:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   577
    changeListView setContents:changeChunks
571fd5eee315 Initial revision
claus
parents:
diff changeset
   578
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   579
571fd5eee315 Initial revision
claus
parents:
diff changeset
   580
deleteChangesFrom:start to:stop
571fd5eee315 Initial revision
claus
parents:
diff changeset
   581
    "delete a range of changes"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   582
571fd5eee315 Initial revision
claus
parents:
diff changeset
   583
    changeListView deselect.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   584
    stop to:start by:-1 do:[:changeNr |
571fd5eee315 Initial revision
claus
parents:
diff changeset
   585
        self silentDeleteChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   586
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   587
    changeListView setContents:changeChunks
571fd5eee315 Initial revision
claus
parents:
diff changeset
   588
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   589
571fd5eee315 Initial revision
claus
parents:
diff changeset
   590
deleteChangesFor:aClassName from:start to:stop
571fd5eee315 Initial revision
claus
parents:
diff changeset
   591
    "delete changes for a given class in a range"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   592
571fd5eee315 Initial revision
claus
parents:
diff changeset
   593
    |thisClassName index|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   594
571fd5eee315 Initial revision
claus
parents:
diff changeset
   595
    index := stop.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   596
    [index >= start] whileTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   597
        thisClassName := self classNameOfChange:index.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   598
        thisClassName = aClassName ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   599
            self silentDeleteChange:index
571fd5eee315 Initial revision
claus
parents:
diff changeset
   600
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   601
        index := index - 1
571fd5eee315 Initial revision
claus
parents:
diff changeset
   602
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   603
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   604
571fd5eee315 Initial revision
claus
parents:
diff changeset
   605
applyChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   606
    "filein a change"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   607
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   608
    |aStream chunk sawExcla upd rslt|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   609
571fd5eee315 Initial revision
claus
parents:
diff changeset
   610
    aStream := self streamForChange:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   611
    aStream isNil ifTrue:[^ self].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   612
    sawExcla := aStream peekFor:(aStream class chunkSeparator).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   613
    chunk := aStream nextChunk.
1
4bb1d231596f *** empty log message ***
claus
parents: 0
diff changeset
   614
    upd := Class updateChanges:false.
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   615
1
4bb1d231596f *** empty log message ***
claus
parents: 0
diff changeset
   616
    codeView abortAction:[Class updateChanges:upd. 
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   617
                          codeView abortAction:nil. 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   618
                          aStream close. 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   619
                          ^self]. 
22
8b81fea5212b *** empty log message ***
claus
parents: 15
diff changeset
   620
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   621
    changeNrProcessed := changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   622
    [
22
8b81fea5212b *** empty log message ***
claus
parents: 15
diff changeset
   623
        Object abortSignal catch:[
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   624
            |rslt|
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   625
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   626
            rslt := Compiler evaluate:chunk notifying:self.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   627
            sawExcla ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   628
                rslt fileInFrom:aStream notifying:self
22
8b81fea5212b *** empty log message ***
claus
parents: 15
diff changeset
   629
            ]
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   630
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   631
        changeNrProcessed := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   632
        codeView abortAction:nil
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   633
    ] valueNowOrOnUnwindDo:[
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   634
        Class updateChanges:upd.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   635
        aStream close
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   636
    ].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   637
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   638
571fd5eee315 Initial revision
claus
parents:
diff changeset
   639
compareChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   640
    "compare a change with current version"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   641
571fd5eee315 Initial revision
claus
parents:
diff changeset
   642
    |aStream chunk sawExcla parseTree thisClass cat oldSource newSource
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   643
     parser sel oldMethod outcome showDiff d|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   644
571fd5eee315 Initial revision
claus
parents:
diff changeset
   645
    aStream := self streamForChange:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   646
    aStream isNil ifTrue:[^ self].
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   647
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   648
    sawExcla := aStream peekFor:(aStream class chunkSeparator).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   649
    chunk := aStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   650
    sawExcla ifFalse:[
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   651
        outcome := 'not comparable ...'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   652
    ] ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   653
        parseTree := Parser parseExpression:chunk.
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   654
        (parseTree notNil and:[parseTree isMessage]) ifTrue:[
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   655
            (parseTree selector == #methodsFor:) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   656
                thisClass := (parseTree receiver evaluate).
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   657
                thisClass isBehavior ifTrue:[
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   658
                    showDiff := false.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   659
                    cat := parseTree arg1 evaluate.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   660
                    newSource := aStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   661
                    parser := Parser parseMethod:newSource in:thisClass.
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   662
                    (parser notNil and:[parser ~~ #Error]) ifTrue:[
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   663
                        sel := parser selector.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   664
                        oldMethod := thisClass compiledMethodAt:sel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   665
                        oldMethod notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   666
                            (oldMethod category = cat) ifFalse:[
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   667
                                Transcript showCr:'category changed.'.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   668
                            ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   669
                            oldSource := oldMethod source.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   670
                            (oldSource = newSource) ifTrue:[
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   671
                                outcome := 'same source'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   672
                            ] ifFalse:[
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   673
                                outcome := 'source changed.'.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   674
                                showDiff := true
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   675
                            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   676
                        ] ifFalse:[
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   677
                            outcome := 'method does not exist.'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   678
                        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   679
                    ] ifFalse:[
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   680
                        outcome := 'change unparsable.'
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   681
                    ].
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   682
                    (showDiff and:[oldSource notNil and:[newSource notNil]]) ifTrue:[
29
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   683
                        d := DiffTextView openOn:oldSource and:newSource.
8a72e10043f6 *** empty log message ***
claus
parents: 28
diff changeset
   684
                        d label:'differences (current left; change right)'.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   685
                    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   686
                ] ifFalse:[
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   687
                    outcome := 'class does not exist.'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   688
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   689
            ] ifFalse:[
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   690
                outcome := 'not comparable.'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   691
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   692
        ] ifFalse:[
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   693
            outcome := 'not comparable.'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   694
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   695
    ].
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   696
    Transcript showCr:outcome.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   697
    aStream close.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   698
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   699
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   700
appendChange:changeNr toFile:fileName
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   701
    "append change to a file"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   702
571fd5eee315 Initial revision
claus
parents:
diff changeset
   703
    |aStream outStream chunk sawExcla|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   704
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   705
    outStream := FileStream oldFileNamed:fileName.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   706
    outStream isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   707
        outStream isNil ifTrue:[
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   708
            outStream := FileStream newFileNamed:fileName.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   709
            outStream isNil ifTrue:[
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   710
                self warn:'cannot update file ''', fileName , ''''.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   711
                ^ self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   712
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   713
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   714
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   715
    outStream setToEnd.
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   716
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   717
    aStream := self streamForChange:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   718
    aStream isNil ifTrue:[^ self].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   719
    sawExcla := aStream peekFor:(aStream class chunkSeparator).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   720
    sawExcla ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   721
        outStream nextPut:$!!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   722
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   723
    chunk := aStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   724
    outStream nextChunkPut:chunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   725
    outStream cr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   726
    sawExcla ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   727
        chunk := aStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   728
        outStream nextChunkPut:chunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   729
        outStream space
571fd5eee315 Initial revision
claus
parents:
diff changeset
   730
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   731
    sawExcla ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   732
        outStream nextPut:$!!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   733
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   734
    outStream cr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   735
    aStream close.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   736
    outStream close
571fd5eee315 Initial revision
claus
parents:
diff changeset
   737
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   738
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   739
makeChangeAPatch:changeNr
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   740
    "append change to patchfile"
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   741
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   742
    self appendChange:changeNr toFile:'patches'
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   743
!
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   744
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   745
makeChangePermanent:changeNr
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   746
    "rewrite the source file where change changeNr lies"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   747
571fd5eee315 Initial revision
claus
parents:
diff changeset
   748
    self notify:'this is not yet implemented'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   749
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
   750
571fd5eee315 Initial revision
claus
parents:
diff changeset
   751
!ChangesBrowser methodsFor:'error handling'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   752
571fd5eee315 Initial revision
claus
parents:
diff changeset
   753
correctableError:aString position:relPos to:relEndPos
571fd5eee315 Initial revision
claus
parents:
diff changeset
   754
    "compiler notifys us of an error - this should really not happen since
571fd5eee315 Initial revision
claus
parents:
diff changeset
   755
     changes ought to be correct (did someone edit the changes file ??).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   756
     Show the bad change in the codeView and let codeView hilight the error;
571fd5eee315 Initial revision
claus
parents:
diff changeset
   757
     no corrections allowed here therefore return false"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   758
571fd5eee315 Initial revision
claus
parents:
diff changeset
   759
    (changeNrProcessed ~~ changeNrShown) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   760
        self changeSelection:changeNrProcessed
571fd5eee315 Initial revision
claus
parents:
diff changeset
   761
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   762
    codeView error:aString position:relPos to:relEndPos.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   763
    ^ false
571fd5eee315 Initial revision
claus
parents:
diff changeset
   764
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   765
571fd5eee315 Initial revision
claus
parents:
diff changeset
   766
error:aString position:relPos to:relEndPos
571fd5eee315 Initial revision
claus
parents:
diff changeset
   767
    "compiler notifys us of an error - this should really not happen since
571fd5eee315 Initial revision
claus
parents:
diff changeset
   768
     changes ought to be correct (did someone edit the changes file ??).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   769
     Show the bad change in the codeView and let codeView hilight the error"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   770
571fd5eee315 Initial revision
claus
parents:
diff changeset
   771
    (changeNrProcessed ~~ changeNrShown) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   772
        self changeSelection:changeNrProcessed
571fd5eee315 Initial revision
claus
parents:
diff changeset
   773
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   774
    ^ codeView error:aString position:relPos to:relEndPos
571fd5eee315 Initial revision
claus
parents:
diff changeset
   775
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   776
571fd5eee315 Initial revision
claus
parents:
diff changeset
   777
warning:aString position:relPos to:relEndPos
571fd5eee315 Initial revision
claus
parents:
diff changeset
   778
    "compiler notifys us of a warning - ignore it"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   779
571fd5eee315 Initial revision
claus
parents:
diff changeset
   780
    ^ self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   781
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
   782
571fd5eee315 Initial revision
claus
parents:
diff changeset
   783
!ChangesBrowser methodsFor:'user interaction'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   784
571fd5eee315 Initial revision
claus
parents:
diff changeset
   785
noChangesAllowed
571fd5eee315 Initial revision
claus
parents:
diff changeset
   786
    "show a warning that changes cannot be changed"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   787
1
4bb1d231596f *** empty log message ***
claus
parents: 0
diff changeset
   788
    self warn:(resources at:'changes are not allowed to be changed')
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   789
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   790
571fd5eee315 Initial revision
claus
parents:
diff changeset
   791
changeSelection:lineNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   792
    "show a change in the codeView"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   793
571fd5eee315 Initial revision
claus
parents:
diff changeset
   794
    |aStream sawExcla chunk|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   795
571fd5eee315 Initial revision
claus
parents:
diff changeset
   796
    aStream := self streamForChange:lineNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   797
    aStream isNil ifTrue:[^ self].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   798
    sawExcla := aStream peekFor:(aStream class chunkSeparator).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   799
    chunk := aStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   800
    sawExcla ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   801
        chunk := aStream nextChunk
571fd5eee315 Initial revision
claus
parents:
diff changeset
   802
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   803
    aStream close.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   804
    codeView contents:chunk.
13
145a9461122e *** empty log message ***
claus
parents: 6
diff changeset
   805
    codeView acceptAction:[:theCode | self doApply "noChangesAllowed"].
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   806
    changeNrShown := lineNr.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   807
    self enableMenuEntries
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   808
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   809
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   810
doSaveChangeInFile
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   811
    "user wants a change to be appended to a file"
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   812
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   813
    |changeNr|
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   814
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   815
    changeNr := changeListView selection.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   816
    changeNr notNil ifTrue:[
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   817
        fileBox isNil ifTrue:[
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   818
            fileBox := FileSelectionBox new.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   819
        ].
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   820
        fileBox title:'append change to:'.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   821
        fileBox okText:'append'.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   822
        fileBox abortText:'cancel'.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   823
        fileBox action:[:fileName | 
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   824
                            self appendChange:changeNr toFile:fileName.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   825
                            self autoSelect:(changeNr + 1)
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   826
                       ].
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   827
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   828
        fileBox pattern:'*.chg'.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   829
        fileBox showAtPointer
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   830
    ]
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   831
!
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   832
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   833
doMakePermanent
571fd5eee315 Initial revision
claus
parents:
diff changeset
   834
    "user wants a change to be made permanent
571fd5eee315 Initial revision
claus
parents:
diff changeset
   835
     - rewrite the source file where this change has to go"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   836
571fd5eee315 Initial revision
claus
parents:
diff changeset
   837
    |changeNr yesNoBox|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   838
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   839
    yesNoBox := YesNoBox new.
1
4bb1d231596f *** empty log message ***
claus
parents: 0
diff changeset
   840
    yesNoBox title:(resources at:'Warning: this operation cannot be undone').
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   841
    yesNoBox okText:(resources at:'continue').
1
4bb1d231596f *** empty log message ***
claus
parents: 0
diff changeset
   842
    yesNoBox noText:(resources at:'abort').
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   843
    yesNoBox okAction:[
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   844
                          changeNr := changeListView selection.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   845
                          changeNr notNil ifTrue:[
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   846
                              self makeChangePermanent:changeNr.
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   847
                              self autoSelect:(changeNr + 1)
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   848
                          ]
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   849
                      ].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   850
    yesNoBox showAtPointer
571fd5eee315 Initial revision
claus
parents:
diff changeset
   851
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   852
571fd5eee315 Initial revision
claus
parents:
diff changeset
   853
doMakePatch
571fd5eee315 Initial revision
claus
parents:
diff changeset
   854
    "user wants a change to be made a patch
571fd5eee315 Initial revision
claus
parents:
diff changeset
   855
     - copy it over to the patches file"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   856
571fd5eee315 Initial revision
claus
parents:
diff changeset
   857
    |changeNr|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   858
571fd5eee315 Initial revision
claus
parents:
diff changeset
   859
    changeNr := changeListView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   860
    changeNr notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   861
        self makeChangeAPatch:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   862
        self autoSelect:(changeNr + 1)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   863
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   864
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   865
571fd5eee315 Initial revision
claus
parents:
diff changeset
   866
doApply
571fd5eee315 Initial revision
claus
parents:
diff changeset
   867
    "user wants a change to be applied"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   868
571fd5eee315 Initial revision
claus
parents:
diff changeset
   869
    |changeNr|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   870
571fd5eee315 Initial revision
claus
parents:
diff changeset
   871
    changeNr := changeListView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   872
    changeNr notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   873
        self withCursor:(Cursor execute) do:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   874
            self applyChange:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   875
            self autoSelect:(changeNr + 1)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   876
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   877
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   878
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   879
571fd5eee315 Initial revision
claus
parents:
diff changeset
   880
doApplyAll
571fd5eee315 Initial revision
claus
parents:
diff changeset
   881
    "user wants all changes to be applied"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   882
571fd5eee315 Initial revision
claus
parents:
diff changeset
   883
    self withCursor:(Cursor execute) do:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   884
        self clearCodeView.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   885
        1 to:(changePositions size) do:[:changeNr |
571fd5eee315 Initial revision
claus
parents:
diff changeset
   886
            changeListView selection:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   887
            self applyChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   888
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   889
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   890
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   891
571fd5eee315 Initial revision
claus
parents:
diff changeset
   892
doApplyRest
571fd5eee315 Initial revision
claus
parents:
diff changeset
   893
    "user wants all changes from changeNr to be applied"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   894
571fd5eee315 Initial revision
claus
parents:
diff changeset
   895
    |changeNr|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   896
571fd5eee315 Initial revision
claus
parents:
diff changeset
   897
    changeNr := changeListView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   898
    changeNr notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   899
        self withCursor:(Cursor execute) do:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   900
            self clearCodeView.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   901
            changeNr to:(changePositions size) do:[:changeNr |
571fd5eee315 Initial revision
claus
parents:
diff changeset
   902
                changeListView selection:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   903
                self applyChange:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   904
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   905
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   906
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   907
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   908
571fd5eee315 Initial revision
claus
parents:
diff changeset
   909
doDelete
571fd5eee315 Initial revision
claus
parents:
diff changeset
   910
    "delete currently selected change"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   911
571fd5eee315 Initial revision
claus
parents:
diff changeset
   912
    |changeNr|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   913
571fd5eee315 Initial revision
claus
parents:
diff changeset
   914
    changeNr := changeListView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   915
    changeNr notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   916
        self deleteChange:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   917
        self autoSelect:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   918
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   919
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   920
571fd5eee315 Initial revision
claus
parents:
diff changeset
   921
doDeleteClassRest
571fd5eee315 Initial revision
claus
parents:
diff changeset
   922
    "delete rest of changes with same class as currently selected change"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   923
571fd5eee315 Initial revision
claus
parents:
diff changeset
   924
    |changeNr classNameToDelete|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   925
571fd5eee315 Initial revision
claus
parents:
diff changeset
   926
    changeNr := changeListView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   927
    changeNr notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   928
        self withCursor:(Cursor execute) do:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   929
            classNameToDelete := self classNameOfChange:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   930
            classNameToDelete notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   931
                changeListView selection:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   932
                self deleteChangesFor:classNameToDelete 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   933
                                 from:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   934
                                   to:(changeChunks size).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   935
                changeListView setContents:changeChunks.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   936
                self autoSelect:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   937
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   938
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   939
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   940
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   941
571fd5eee315 Initial revision
claus
parents:
diff changeset
   942
doDeleteRest
571fd5eee315 Initial revision
claus
parents:
diff changeset
   943
    "delete all changes from current to the end"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   944
571fd5eee315 Initial revision
claus
parents:
diff changeset
   945
    |changeNr|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   946
571fd5eee315 Initial revision
claus
parents:
diff changeset
   947
    changeNr := changeListView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   948
    changeNr notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   949
        self deleteChangesFrom:changeNr to:(changeChunks size).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   950
        self clearCodeView
571fd5eee315 Initial revision
claus
parents:
diff changeset
   951
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   952
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   953
571fd5eee315 Initial revision
claus
parents:
diff changeset
   954
doDeleteClassAll
571fd5eee315 Initial revision
claus
parents:
diff changeset
   955
    "delete all changes with same class as currently selected change"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   956
571fd5eee315 Initial revision
claus
parents:
diff changeset
   957
    |changeNr classNameToDelete|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   958
571fd5eee315 Initial revision
claus
parents:
diff changeset
   959
    changeNr := changeListView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   960
    changeNr notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   961
        self withCursor:(Cursor execute) do:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   962
            classNameToDelete := self classNameOfChange:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   963
            classNameToDelete notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   964
                changeListView selection:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   965
                self deleteChangesFor:classNameToDelete
571fd5eee315 Initial revision
claus
parents:
diff changeset
   966
                                 from:1
571fd5eee315 Initial revision
claus
parents:
diff changeset
   967
                                   to:(changeChunks size).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   968
                changeListView contents:changeChunks.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   969
                self autoSelect:changeNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   970
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   971
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   972
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   973
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   974
571fd5eee315 Initial revision
claus
parents:
diff changeset
   975
doWriteBack
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   976
    "write back the list onto the changes file"
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   977
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   978
    anyChanges ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   979
        self writeBackChanges.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   980
        self doUpdate
571fd5eee315 Initial revision
claus
parents:
diff changeset
   981
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   982
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   983
571fd5eee315 Initial revision
claus
parents:
diff changeset
   984
doUpdate
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   985
    "reread the changes-file"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   986
571fd5eee315 Initial revision
claus
parents:
diff changeset
   987
    self readChangesFile.
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
   988
    changeListView setContents:changeChunks
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   989
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   990
571fd5eee315 Initial revision
claus
parents:
diff changeset
   991
doCompare
571fd5eee315 Initial revision
claus
parents:
diff changeset
   992
    "compare change with current system version
571fd5eee315 Initial revision
claus
parents:
diff changeset
   993
     - give a note in transcript"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   994
571fd5eee315 Initial revision
claus
parents:
diff changeset
   995
    |changeNr|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   996
571fd5eee315 Initial revision
claus
parents:
diff changeset
   997
    changeNr := changeListView selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   998
    changeNr notNil ifTrue:[
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
   999
        self withCursor:(Cursor execute) do:[
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
  1000
            self compareChange:changeNr
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
  1001
        ]
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1002
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1003
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1004
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1005
doCompress
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1006
    "compress the change-set; this replaces multiple method-changes by the last 
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1007
     (i.e. the most recent) change"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1008
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1009
    |classes types selectors thisClass thisSelector
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1010
     aStream chunk changeNr sawExcla aParseTree codeChunk codeParser
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1011
     searchIndex anyMore deleteSet index parseTreeChunk numChanges
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1012
     excla|
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1013
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1014
    aStream := FileStream readonlyFileNamed:changeFileName.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1015
    aStream isNil ifTrue:[^ self].
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1016
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1017
    self withCursor:(Cursor execute) do:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1018
        numChanges := changePositions size.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1019
        classes := Array new:numChanges.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1020
        selectors := Array new:numChanges.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1021
        types := Array new:numChanges.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1022
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1023
        "starting at the end, get the change class and change selector;
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1024
         collect all in classes / selectors"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1025
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1026
        changeNr := numChanges.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1027
        excla := aStream class chunkSeparator.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1028
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1029
        [changeNr >= 1] whileTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1030
            aStream position:(changePositions at:changeNr).
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1031
            sawExcla := aStream peekFor:excla.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1032
            chunk := aStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1033
            sawExcla ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1034
                "optimize a bit if multiple methods for same category arrive"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1035
                (chunk = parseTreeChunk) ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1036
                    aParseTree := Parser parseExpression:chunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1037
                    parseTreeChunk := chunk
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1038
                ].
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
  1039
                (aParseTree notNil 
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
  1040
                and:[(aParseTree ~~ #Error) 
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
  1041
                and:[aParseTree isMessage]]) ifTrue:[
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1042
                    (aParseTree selector == #methodsFor:) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1043
                        thisClass := (aParseTree receiver evaluate).
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1044
                        codeChunk := aStream nextChunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1045
                        codeParser := Parser parseMethodSpecification:codeChunk
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1046
                                                                   in:thisClass.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1047
                        codeParser notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1048
                            selectors at:changeNr put:(codeParser selector).
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1049
                            classes at:changeNr put:thisClass.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1050
                            types at:changeNr put:#methodsFor
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1051
                        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1052
                    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1053
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1054
            ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1055
                aParseTree := Parser parseExpression:chunk.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1056
                parseTreeChunk := chunk.
28
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
  1057
                (aParseTree notNil 
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
  1058
                and:[(aParseTree ~~ #Error) 
eea5a71a1e23 *** empty log message ***
claus
parents: 27
diff changeset
  1059
                and:[aParseTree isMessage]]) ifTrue:[
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1060
                    (aParseTree selector == #removeSelector:) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1061
                        selectors at:changeNr put:(aParseTree arg1 value ).
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1062
                        classes at:changeNr put:(aParseTree receiver evaluate).
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1063
                        types at:changeNr put:#removeSelector
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1064
                    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1065
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1066
            ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1067
            changeNr := changeNr - 1
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1068
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1069
        aStream close.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1070
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1071
        "for all changes, look for another class/selector occurence and
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1072
         add change number to delete set if found"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1073
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1074
        deleteSet := OrderedCollection new.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1075
        changeNr := 1.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1076
        [changeNr < changePositions size] whileTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1077
            thisClass := classes at:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1078
            thisSelector := selectors at:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1079
            searchIndex := changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1080
            anyMore := true.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1081
            [anyMore] whileTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1082
                searchIndex := classes indexOf:thisClass
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1083
                                    startingAt:(searchIndex + 1).
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1084
                (searchIndex ~~ 0) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1085
                    ((selectors at:searchIndex) == thisSelector) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1086
                        thisClass notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1087
                            deleteSet add:changeNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1088
                            anyMore := false
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1089
                        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1090
                    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1091
                ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1092
                    anyMore := false      
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1093
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1094
            ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1095
            changeNr := changeNr + 1
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1096
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1097
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1098
        "finally delete what has been found"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1099
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1100
        (deleteSet size > 0) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1101
            changeListView selection:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1102
            index := deleteSet size.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1103
            [index > 0] whileTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1104
                self silentDeleteChange:(deleteSet at:index).
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1105
                index := index - 1
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1106
            ].
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
  1107
            changeListView setContents:changeChunks.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
  1108
            changeListView firstLineShown > changeChunks size ifTrue:[
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
  1109
                changeListView makeLineVisible:changeChunks size
7fc8fcef7bc6 *** empty log message ***
claus
parents: 13
diff changeset
  1110
            ].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1111
            self clearCodeView
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1112
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1113
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1114
! !