pharo-vcs / iceberg

Iceberg is the main toolset for handling VCS in Pharo.
MIT License
134 stars 85 forks source link

Failed merge leaves Iceberg in a broken state #648

Open zecke opened 6 years ago

zecke commented 6 years ago

After #647 iceberg is in a bad state (and there is no gui option to clean it up).

Trying discard changes:

Instance of Array did not understand #id
Array(Object)>>doesNotUnderstand: #id
IceLibgitRepository>>changedFilesBetween:and:
IceGitCommit>>changesFromCommit:
IceGitLocalBranch(IceBranch)>>changesFromCommit:
IceWorkingCopy>>changesTo:
IceDiff>>build
IceDiff class>>from:to:
IceWorkingCopy>>discardChanges

Trying to reload a single package:

Instance of Array did not understand #diffToWorkingCopyForPackage:
Array(Object)>>doesNotUnderstand: #diffToWorkingCopyForPackage:
[ :each | 
(each includesPackageNamed: package name)
    ifTrue: [ | icePackage diff |
        icePackage := each packageNamed: package name.
        diff := each workingCopy referenceCommit
            diffToWorkingCopyForPackage: icePackage.
        icePackage beDirty: (diff includesPackageNamed: each name).
        Iceberg announcer announce: (IceRepositoryModified for: each) ] ] in IceSystemEventListener class>>handleVersionLoaded: in Block: [ :each | ...
OrderedCollection>>do:
IceSystemEventListener class>>handleVersionLoaded:
WeakMessageSend>>value:
WeakMessageSend>>cull:
WeakMessageSend>>cull:cull:
[ action cull: anAnnouncement cull: announcer ] in LegacyWeakSubscription(WeakAnnouncementSubscription)>>deliver: in Block: [ action cull: anAnnouncement cull: announcer ]
BlockClosure>>on:do:
BlockClosure>>on:fork:
LegacyWeakSubscription(WeakAnnouncementSubscription)>>deliver:
[ "Ensure delivery to remaining announcements" subscription deliver: anAnnouncement ] in SubscriptionRegistry>>deliver:to:startingAt: in Block: [ "Ensure delivery to remaining announcements" sub...etc...
BlockClosure>>ifCurtailed:
SubscriptionRegistry>>deliver:to:startingAt:
SubscriptionRegistry>>deliver:to:
SubscriptionRegistry>>deliver:
SystemAnnouncer(Announcer)>>announce:
SystemAnnouncer>>announce:
MCVersionLoader>>announceLoadStop:
[ self announceLoadStop: aString ] in [ [ returnValue := aBlock value ]
    ensure: [ self announceLoadStop: aString ] ] in MCVersionLoader>>announceLoad:do: in Block: [ self announceLoadStop: aString ]
BlockClosure>>ensure:
[ [ returnValue := aBlock value ]
    ensure: [ self announceLoadStop: aString ] ] in MCVersionLoader>>announceLoad:do: in Block: [ [ returnValue := aBlock value ]...
BlockClosure>>ensure:
MCVersionLoader>>announceLoad:do:
MCVersionLoader>>loadWithNameLike:
[ self ensurePackage: version package.
self loadWithNameLike: version info name ] in [ | version |
version := versions first.
[ self ensurePackage: version package.
self loadWithNameLike: version info name ] asJob
    title: 'Loading ' , version info name asString;
    run ] in MCVersionLoader>>load in Block: [ self ensurePackage: version package....
BlockClosure>>cull:
[ ^ block cull: self ] in [ self prepareForRunning.
CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run in Block: [ ^ block cull: self ]
[ activeProcess psValueAt: index put: anObject.
aBlock value ] in CurrentJob(DynamicVariable)>>value:during: in Block: [ activeProcess psValueAt: index put: anObject....
BlockClosure>>ensure:
chisandrei commented 5 years ago

A similar error where an array is instead of the current commit seems to error happen after issue #1137

Array(Object)>>doesNotUnderstand: #project
IceBasicProject(IceAbstractProject)>>isDirty
IceWorkingCopy>>isModified
IceLibgitRepository(IceRepository)>>isModified
IceLibgitRepository>>isModified
IceTipRepositoryModel>>descriptionWithDecoration
IceTipCachedModel>>forwardMessage:
IceTipCachedModel>>doesNotUnderstand: #descriptionWithDecoration
ByteSymbol(Symbol)>>value:
IceTipTableColumn>>read:
IceTipDataSource>>cellColumn:row:
FTTableContainerMorph>>updateExposedRows
FTTableMorph>>resizeAllSubviews
FTTableMorph>>extent:
FTTableMorph(Morph)>>bounds:
FTTableMorph(Morph)>>layoutInBounds:
FTTableMorph(Morph)>>layoutProportionallyIn:
[ :m | m layoutProportionallyIn: newBounds ] in ProportionalLayout>>layout:in: in Block: [ :m | m layoutProportionallyIn: newBounds ]
Array(SequenceableCollection)>>do:
PanelMorph(Morph)>>submorphsDo:
ProportionalLayout>>layout:in:
PanelMorph(Morph)>>doLayoutIn:
[ self doLayoutIn: self layoutBounds ] in PanelMorph(Morph)>>computeFullBounds in Block: [ self doLayoutIn: self layoutBounds ]
BlockClosure>>on:do:
PanelMorph(Morph)>>computeFullBounds
PanelMorph(Morph)>>fullBounds
[ :m | 
| subBox |
m visible
    ifTrue: [ subBox := m fullBounds.
        box
            ifNil: [ box := subBox copy ]
            ifNotNil: [ box := box quickMerge: subBox ] ] ] in PanelMorph(Morph)>>submorphBounds in Block: [ :m | ...
Array(SequenceableCollection)>>do:
PanelMorph(Morph)>>submorphBounds
PanelMorph(Morph)>>privateFullBounds