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