<body><div id="__MailbirdStyleContent" style="font-size: 10pt;font-family: Arial;color: #000000">
Hmpf. :-(<div class="mb_sig"></div><blockquote class='history_container' type='cite' style='border-left-style:solid;border-width:1px; margin-top:20px; margin-left:0px;padding-left:10px;'>
<p style='color: #AAAAAA; margin-top: 10px;'>Am 04.11.2020 17:13:47 schrieb Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com>:</p><div style='font-family:Arial,Helvetica,sans-serif'>
<div dir="ltr"><div>Remember this mail from February 2019?</div><div><br></div><div>
<div>Still cleaning the inbox...</div><div>I see this:</div><div><br></div><div><b>Name: <span class="gmail-il">Monticello</span>-<span class="gmail-il">bf</span>.<span class="gmail-il">540</span><br>Author: <span class="gmail-il">bf</span><br>Time: 3 May 2013, 12:06:01.01 pm<br>UUID: 759525eb-5ca8-4ab2-9e4a-bddc7d0680dc<br>Ancestors: <span class="gmail-il">Monticello</span>-<span class="gmail-il">bf</span>.532, <span class="gmail-il">Monticello</span>-fbs.539<br><br>This
is my allow-partial-commits mod, improved to always diff to the target
repository, and merged with the latest fbs.359 trunk version.</b></div><div><br></div><div>It
is not signalled as false ancestor, so it means that this ancestor is
in history, or another package in history has same UUID (unlikely!).</div><div><br></div><div>But in trunk there is a different package:</div><div><br></div><div><b>Name: <span class="gmail-il">Monticello</span>-<span class="gmail-il">bf</span>.<span class="gmail-il">540</span><br>Author: <span class="gmail-il">bf</span><br>Time: 4 May 2013, 8:13:11.165 pm<br>UUID: b8904753-a5e5-4061-a912-49480229e91a<br>Ancestors: <span class="gmail-il">Monticello</span>-fbs.539<br><br>Add MCReorganizationPreloader which can resolve moves between arbitrary packages.</b></div><div><br></div><div>Do we really have two different <span class="gmail-il">Monticello</span>-<span class="gmail-il">bf</span>.<span class="gmail-il">540</span> in ancestors or what?</div><div>Is there a morphic tool to visualize the ancestry graph?</div><div><br></div><div>I do not remember the conclusion, but can we browse/download/access the two ancestors?<br></div>
</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Le mer. 4 nov. 2020 à 15:57, <<a href="mailto:commits@source.squeak.org">commits@source.squeak.org</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Marcel Taeumel uploaded a new version of Monticello to project The Trunk:<br>
<a href="http://source.squeak.org/trunk/Monticello-bf.540.mcz" rel="noreferrer" target="_blank">http://source.squeak.org/trunk/Monticello-bf.540.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: Monticello-bf.540<br>
Author: bf<br>
Time: 3 May 2013, 12:06:01.01 pm<br>
UUID: 759525eb-5ca8-4ab2-9e4a-bddc7d0680dc<br>
Ancestors: Monticello-bf.532, Monticello-fbs.539<br>
<br>
This is my allow-partial-commits mod, improved to always diff to the target repository, and merged with the latest fbs.359 trunk version.<br>
<br>
=============== Diff against Monticello-fbs.539 ===============<br>
<br>
Item was added:<br>
+ ----- Method: MCPatch>>ignoring: (in category 'accessing') -----<br>
+ ignoring: ignoredOperations<br>
+ ^ MCPatch operations: (operations difference: ignoredOperations)!<br>
<br>
Item was added:<br>
+ Notification subclass: #MCRepositoryRequest<br>
+ instanceVariableNames: ''<br>
+ classVariableNames: ''<br>
+ poolDictionaries: ''<br>
+ category: 'Monticello-UI'!<br>
<br>
Item was changed:<br>
+ MCPatchBrowser subclass: #MCSaveVersionDialog<br>
+ instanceVariableNames: 'name message ignore'<br>
- MCTool subclass: #MCSaveVersionDialog<br>
- instanceVariableNames: 'name message'<br>
classVariableNames: ''<br>
poolDictionaries: ''<br>
category: 'Monticello-UI'!<br>
<br>
Item was changed:<br>
----- Method: MCSaveVersionDialog>>accept (in category 'as yet unclassified') -----<br>
accept<br>
self answer:<br>
(Array<br>
with: (self findTextMorph: #versionName) text asString<br>
+ with: (self findTextMorph: #logMessage) text asString<br>
+ with: ignore)<br>
+ !<br>
- with: (self findTextMorph: #logMessage) text asString)<br>
- !<br>
<br>
Item was changed:<br>
----- Method: MCSaveVersionDialog>>defaultExtent (in category 'as yet unclassified') -----<br>
defaultExtent <br>
+ ^ 600@600!<br>
- ^ 400@300!<br>
<br>
Item was added:<br>
+ ----- Method: MCSaveVersionDialog>>ignore (in category 'as yet unclassified') -----<br>
+ ignore<br>
+ ^ ignore ifNil: [ignore := Set new]!<br>
<br>
Item was added:<br>
+ ----- Method: MCSaveVersionDialog>>ignoreSelection (in category 'as yet unclassified') -----<br>
+ ignoreSelection<br>
+ selection<br>
+ ifNil: [ignore size = items size<br>
+ ifFalse: [ignore addAll: items]<br>
+ ifTrue: [ignore removeAll]]<br>
+ ifNotNil: [<br>
+ ignore remove: selection ifAbsent: [<br>
+ ignore add: selection].<br>
+ self selection < items size<br>
+ ifTrue: [self selection: self selection + 1]].<br>
+ self changed: #list<br>
+ !<br>
<br>
Item was added:<br>
+ ----- Method: MCSaveVersionDialog>>installSelection (in category 'as yet unclassified') -----<br>
+ installSelection<br>
+ super installSelection.<br>
+ selection ifNotNil: [<br>
+ ignore remove: selection ifAbsent: [].<br>
+ self changed: #list].<br>
+ <br>
+ !<br>
<br>
Item was added:<br>
+ ----- Method: MCSaveVersionDialog>>list (in category 'as yet unclassified') -----<br>
+ list<br>
+ ^ self items collect: [:ea |<br>
+ (self ignore includes: ea)<br>
+ ifFalse: [ea summary]<br>
+ ifTrue: [Text string: '( ', ea summary, ' )' attribute: TextEmphasis struckOut ]]!<br>
<br>
Item was added:<br>
+ ----- Method: MCSaveVersionDialog>>methodListKey:from: (in category 'as yet unclassified') -----<br>
+ methodListKey: aKeystroke from: aListMorph <br>
+ aKeystroke caseOf: {<br>
+ [$I] -> [self ignoreSelection].<br>
+ } otherwise: [super methodListKey: aKeystroke from: aListMorph ]!<br>
<br>
Item was added:<br>
+ ----- Method: MCSaveVersionDialog>>methodListMenu: (in category 'as yet unclassified') -----<br>
+ methodListMenu: aMenu<br>
+ aMenu addList:#(<br>
+ ('ignore (I)' ignoreSelection 'Do not include this change when saving')<br>
+ -).<br>
+ super methodListMenu: aMenu.<br>
+ ^aMenu!<br>
<br>
Item was added:<br>
+ ----- Method: MCSaveVersionDialog>>revertSelection (in category 'as yet unclassified') -----<br>
+ revertSelection<br>
+ super revertSelection.<br>
+ selection ifNotNil: [<br>
+ ignore add: selection.<br>
+ self changed: #list].<br>
+ !<br>
<br>
Item was changed:<br>
----- Method: MCSaveVersionDialog>>widgetSpecs (in category 'as yet unclassified') -----<br>
widgetSpecs<br>
^ #( <br>
((textMorph: versionName) (0 0 1 0) (0 0 0 30))<br>
+ ((textMorph: logMessage) (0 0 1 0.3) (0 30 0 -30))<br>
+ ((buttonRow) (0 0.3 1 0.3) (0 -40 0 0))<br>
+ ((listMorph:selection:menu:keystroke: list selection methodListMenu: methodListKey:from:) (0 0.3 1 0.6) (0 0 0 0))<br>
+ ((textMorph: text) (0 0.6 1 1) (0 0 0 0))<br>
- ((textMorph: logMessage) (0 0 1 1) (0 30 0 -30))<br>
- ((buttonRow) (0 1 1 1) (0 -40 0 0))<br>
)!<br>
<br>
Item was changed:<br>
----- Method: MCTool>>showModally (in category 'morphic ui') -----<br>
showModally<br>
modalProcess := Processor activeProcess.<br>
+ self window openInWorldExtent: self defaultExtent.<br>
- self window openInWorldExtent: (400@400).<br>
[self window world notNil] whileTrue: [<br>
self window outermostWorldMorph doOneCycle.<br>
].<br>
morph := nil.<br>
^ modalValue!<br>
<br>
Item was changed:<br>
Notification subclass: #MCVersionNameAndMessageRequest<br>
+ instanceVariableNames: 'suggestion initialMessage patch'<br>
- instanceVariableNames: 'suggestion initialMessage'<br>
classVariableNames: ''<br>
poolDictionaries: ''<br>
category: 'Monticello-Versioning'!<br>
<br>
Item was changed:<br>
----- Method: MCVersionNameAndMessageRequest>>defaultAction (in category 'as yet unclassified') -----<br>
defaultAction<br>
^ MCSaveVersionDialog new<br>
versionName: suggestion;<br>
logMessage: initialMessage;<br>
+ patch: patch;<br>
showModally!<br>
<br>
Item was added:<br>
+ ----- Method: MCVersionNameAndMessageRequest>>patch (in category 'as yet unclassified') -----<br>
+ patch<br>
+ ^ patch!<br>
<br>
Item was added:<br>
+ ----- Method: MCVersionNameAndMessageRequest>>patch: (in category 'as yet unclassified') -----<br>
+ patch: aPatch<br>
+ patch := aPatch<br>
+ !<br>
<br>
Item was changed:<br>
----- Method: MCWorkingCopy>>newVersion (in category 'operations') -----<br>
newVersion<br>
+ | packageSnapshot parentSnapshot patch |<br>
+ parentSnapshot := self parentSnapshot.<br>
+ packageSnapshot := package snapshot.<br>
+ patch := packageSnapshot patchRelativeToBase: parentSnapshot.<br>
^ (self requestVersionNameAndMessageWithSuggestion: self uniqueVersionName<br>
+ initialMessage: self patchMessageDefault<br>
+ patch: patch) ifNotNil:<br>
+ [:tuple |<br>
+ self newVersionWithName: tuple first withBlanksTrimmed<br>
+ message: (self patchMessageStripped: tuple second)<br>
+ snapshot: (tuple third<br>
+ ifEmpty: [packageSnapshot]<br>
+ ifNotEmpty: [<br>
+ MCPatcher apply: (patch ignoring: tuple third)<br>
+ to: parentSnapshot])]<br>
- initialMessage: self patchMessageSuggestion) ifNotNil:<br>
- [:pair |<br>
- self newVersionWithName: pair first withBlanksTrimmed<br>
- message: (self patchMessageStripped: pair last)].<br>
!<br>
<br>
Item was changed:<br>
----- Method: MCWorkingCopy>>newVersionWithName:message: (in category 'operations') -----<br>
newVersionWithName: nameString message: messageString<br>
+ ^self newVersionWithName: nameString message: messageString snapshot: package snapshot!<br>
- | info deps |<br>
- info := ancestry infoWithName: nameString message: messageString.<br>
- ancestry := MCWorkingAncestry new addAncestor: info.<br>
- self modified: true; modified: false.<br>
- <br>
- deps := self requiredPackages collect:<br>
- [:ea | <br>
- MCVersionDependency<br>
- package: ea<br>
- info: ea workingCopy currentVersionInfo].<br>
- <br>
- ^ MCVersion<br>
- package: package<br>
- info: info<br>
- snapshot: package snapshot<br>
- dependencies: deps!<br>
<br>
Item was added:<br>
+ ----- Method: MCWorkingCopy>>newVersionWithName:message:snapshot: (in category 'operations') -----<br>
+ newVersionWithName: nameString message: messageString snapshot: aSnapshot<br>
+ | info deps clean |<br>
+ info := ancestry infoWithName: nameString message: messageString.<br>
+ ancestry := MCWorkingAncestry new addAncestor: info.<br>
+ clean := (package snapshot patchRelativeToBase: aSnapshot) isEmpty.<br>
+ self modified: clean; modified: clean not. "hack to ensure label is updated"<br>
+ <br>
+ deps := self requiredPackages collect:<br>
+ [:ea | <br>
+ MCVersionDependency<br>
+ package: ea<br>
+ info: ea workingCopy currentVersionInfo].<br>
+ <br>
+ ^ MCVersion<br>
+ package: package<br>
+ info: info<br>
+ snapshot: aSnapshot<br>
+ dependencies: deps!<br>
<br>
Item was added:<br>
+ ----- Method: MCWorkingCopy>>parentSnapshot (in category 'private') -----<br>
+ parentSnapshot<br>
+ "prefer parent in selected repository"<br>
+ MCRepositoryRequest signal ifNotNil: [:repo |<br>
+ self ancestors do: [:ancestor |<br>
+ (repo versionWithInfo: ancestor)<br>
+ ifNotNil: [:ver | ^ver snapshot]]].<br>
+ "otherwise, look in all repositories"<br>
+ self ancestors do: [:ancestor |<br>
+ (self repositoryGroup versionWithInfo: ancestor)<br>
+ ifNotNil: [:ver | ^ver snapshot]].<br>
+ "otherwise"<br>
+ ^MCSnapshot empty!<br>
<br>
Item was changed:<br>
----- Method: MCWorkingCopy>>patchMessageChanges (in category 'operations') -----<br>
patchMessageChanges<br>
+ | changes |<br>
+ changes := package snapshot patchRelativeToBase: self parentSnapshot.<br>
- | changes parentInfo parentSnapshot |<br>
- parentInfo := self ancestors<br>
- ifEmpty: [nil]<br>
- ifNotEmpty: [self ancestors first].<br>
- parentSnapshot := self findSnapshotWithVersionInfo: parentInfo.<br>
- changes := package snapshot patchRelativeToBase: parentSnapshot.<br>
^ (MCPatchMessage new patch: changes) message!<br>
<br>
Item was removed:<br>
- ----- Method: MCWorkingCopy>>requestVersionNameAndMessageWithSuggestion:initialMessage: (in category 'private') -----<br>
- requestVersionNameAndMessageWithSuggestion: nameString initialMessage: msgString<br>
- ^ (MCVersionNameAndMessageRequest new<br>
- suggestedName: nameString;<br>
- initialMessage: msgString<br>
- ) signal!<br>
<br>
Item was added:<br>
+ ----- Method: MCWorkingCopy>>requestVersionNameAndMessageWithSuggestion:initialMessage:patch: (in category 'private') -----<br>
+ requestVersionNameAndMessageWithSuggestion: nameString initialMessage: msgString patch: aPatch<br>
+ ^ (MCVersionNameAndMessageRequest new<br>
+ suggestedName: nameString;<br>
+ initialMessage: msgString;<br>
+ patch: aPatch<br>
+ ) signal!<br>
<br>
Item was changed:<br>
----- Method: MCWorkingCopyBrowser>>saveVersion (in category 'actions') -----<br>
saveVersion<br>
| repo |<br>
self canSave ifFalse: [^self].<br>
self checkForNewerVersions ifFalse: [^self].<br>
repo := self repository.<br>
+ (self withRepository: repo do: [workingCopy newVersion]) ifNotNil:<br>
- workingCopy newVersion ifNotNil:<br>
[:v |<br>
(MCVersionInspector new version: v) show.<br>
Cursor wait showWhile: [repo storeVersion: v].<br>
MCCacheRepository default cacheAllFileNamesDuring: <br>
[repo cacheAllFileNamesDuring: <br>
[v allAvailableDependenciesDo:<br>
[:dep |<br>
(repo includesVersionNamed: dep info name)<br>
ifFalse: [repo storeVersion: dep]]]]]!<br>
<br>
Item was added:<br>
+ ----- Method: MCWorkingCopyBrowser>>withRepository:do: (in category 'actions') -----<br>
+ withRepository: aRepository do: aBlock<br>
+ ^aBlock<br>
+ on: MCRepositoryRequest<br>
+ do: [:req | req resume: aRepository]!<br>
<br>
<br>
</blockquote></div>
</div></blockquote>
</div></body>