[squeak-dev] The Trunk: UpdateStream-ct.13.mcz

Marcel Taeumel marcel.taeumel at hpi.de
Wed Mar 4 08:24:07 UTC 2020

Why does #conflictsWithUpdatedMethods return "nil" at all? Should always be an empty or non-empty collection.

Am 04.03.2020 08:49:45 schrieb karl ramberg <karlramberg at gmail.com>:

On Tue, 3 Mar 2020 at 23:18, <commits at source.squeak.org [mailto:commits at source.squeak.org]> wrote:

Nicolas Cellier uploaded a new version of UpdateStream to project The Trunk:
http://source.squeak.org/trunk/UpdateStream-ct.13.mcz [http://source.squeak.org/trunk/UpdateStream-ct.13.mcz]

==================== Summary ====================

Name: UpdateStream-ct.13
Author: ct
Time: 21 December 2019, 1:00:30.046795 pm
UUID: 4f856f41-7ea6-c744-a765-4f5bdc635989
Ancestors: UpdateStream-mt.12

Fix a small bug when dropping a changeset without conflicts into the image, showing the "conflicts with updated methods" and then pressing "no"

=============== Diff against UpdateStream-mt.12 ===============

Item was changed:
  ----- Method: FilePackage class>>conflictsWithUpdatedMethods: (in category '*UpdateStream-instance creation') -----
  conflictsWithUpdatedMethods: fullName
        | conflicts changeList |
        conflicts := (self fromFileNamed: fullName) conflictsWithUpdatedMethods.
+       (conflicts isNil or: [conflicts isEmpty]) ifTrue: [^ self].

Could this use isEmptyOrNil  ?


-       conflicts isEmpty ifTrue: [^ self].
        changeList := ChangeList new.
                changes: conflicts
                file: (FileDirectory default readOnlyFileNamed: fullName) close.
                open: changeList
                name: 'Conflicts for ', (FileDirectory localNameFor: fullName)
                multiSelect: true.!

Item was changed:
  ----- Method: FilePackage>>conflictsWithUpdatedMethods (in category '*UpdateStream-conflict checker') -----
        "Check this package for conflicts with methods in the image which are in newer updates."

        | localFileName stream updateNumberString updateNumber imageUpdateNumber updateNumberChangeSet conflicts fileStream |
        localFileName := FileDirectory localNameFor: fullName.
        stream := ReadStream on: sourceSystem.
        stream upToAll: 'latest update: #'.
        updateNumberString := stream upTo: $].
        stream close.

        fileStream := FileStream readOnlyFileNamed: fullName.
        (fileStream contentsOfEntireFile includes: Character linefeed)
                ifTrue: [self notify:  'The changeset file ', localFileName, ' contains linefeeds.  Proceed if...
  you know that this is okay (e.g. the file contains raw binary data).'].
        fileStream close.
        updateNumberString isEmpty ifFalse:             "remove prepended junk, if any"
                [updateNumberString := (updateNumberString findTokens: Character space) last].
        updateNumberString asInteger ifNil:
                [(self confirm: 'Error: ', localFileName, ' has no valid Latest Update number in its header.
  Do you want to enter an update number for this file?')
+                       ifFalse: [^ nil]
-                       ifFalse: [^ self]
                        ifTrue: [updateNumberString := UIManager default
                                                request: 'Please enter the estimated update number (e.g. 4332).']].
        updateNumberString asInteger ifNil: [self inform: 'Conflict check cancelled.'. ^ self].
        updateNumber := updateNumberString asInteger.
        imageUpdateNumber := SystemVersion current highestUpdate.
        updateNumber > imageUpdateNumber ifTrue:
                [(self confirm: 'Warning: The update number for this file (#', updateNumberString, ')
  is greater than the highest update number for this image (#', imageUpdateNumber asString, ').
  This probably means you need to update your image.
  Should we proceed anyway as if the file update number is #', imageUpdateNumber asString, '?')
                                [updateNumber := imageUpdateNumber.
                                updateNumberString := imageUpdateNumber asString]
+                       ifFalse: [^ nil]].
-                       ifFalse: [^ self]].
        updateNumberChangeSet := self findUpdateChangeSetMatching: updateNumber.
+       updateNumberChangeSet ifNil: [^ nil].
-       updateNumberChangeSet ifNil: [^ self].
        Smalltalk isMorphic ifTrue: [self currentWorld findATranscript: self currentEvent].
        self class logCr; logCr; log: 'Checking ', localFileName, ' (#', updateNumberString, ') for method conflicts with changesets after ', updateNumberChangeSet name, ' ...'.
        conflicts := OrderedCollection new.
        self classes do: [:pseudoClass |
                (Array with: pseudoClass with: pseudoClass metaClass) do: [:classOrMeta |
                        classOrMeta selectorsDo: [:selector | | conflict |
                                conflict := self
                                                        checkForMoreRecentUpdateThanChangeSet: updateNumberChangeSet
                                                        pseudoClass: classOrMeta
                                                        selector: selector.
                                conflict ifNotNil: [conflicts add: conflict].
        self class logCr; log: conflicts size asString, (' conflict' asPluralBasedOn: conflicts), ' found.'; logCr.
        self class closeLog.
        ^ conflicts!

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20200304/cd87e5f7/attachment.html>

More information about the Squeak-dev mailing list