<div dir="ltr">Hi Christoph,<div><br></div><div>+1 for the multilingual change.<br><div><br></div><div>However, the UI does already support the ability to diff between _any_ two versions via the existing browsers. Simply opening the History browser on the descendant, and then select whichever ancestor you wish to compare to.</div></div><div><br></div><div>Best,</div><div> Chris</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Sep 17, 2020 at 6:47 AM <<a href="mailto:commits@source.squeak.org">commits@source.squeak.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">A new version of Monticello was added to project The Inbox:<br>
<a href="http://source.squeak.org/inbox/Monticello-ct.728.mcz" rel="noreferrer" target="_blank">http://source.squeak.org/inbox/Monticello-ct.728.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: Monticello-ct.728<br>
Author: ct<br>
Time: 17 September 2020, 1:47:00.019813 pm<br>
UUID: 7d44995a-f19b-ee49-b16b-c710c9f2bce6<br>
Ancestors: Monticello-cmm.726<br>
<br>
Implements comparing a Monticello version against any of its ancestors. Not absolutely sure about the code quality, but it's a relevant feature for me (until now I always used to consult the Nabble archive). Also improves multilingual support.<br>
<br>
=============== Diff against Monticello-cmm.726 ===============<br>
<br>
Item was changed:<br>
----- Method: MCHttpRepository>>httpGet:arguments: (in category 'private') -----<br>
httpGet: url arguments: arguments<br>
<br>
| progress urlString client response result |<br>
progress := [ :total :amount |<br>
HTTPProgress new <br>
total: total;<br>
amount: amount;<br>
+ signal: 'Downloading...' translated ].<br>
- signal: 'Downloading...' ].<br>
urlString := arguments<br>
ifNil: [ url ]<br>
ifNotNil: [ <br>
| queryString |<br>
queryString := WebUtils encodeUrlEncodedForm: arguments.<br>
(url includes: $?)<br>
ifTrue: [ url, '&', queryString ]<br>
ifFalse: [ url, '?', queryString ] ].<br>
self class useSharedWebClientInstance ifTrue: [<br>
"Acquire webClient by atomically storing it in the client variable and setting its value to nil."<br>
client := webClient.<br>
webClient := nil ].<br>
client <br>
ifNil: [ client := WebClient new ]<br>
ifNotNil: [ <br>
"Attempt to avoid an error on windows by recreating the underlying stream."<br>
client isConnected ifFalse: [ client close ] ].<br>
response := client<br>
username: self user;<br>
password: self password;<br>
httpGet: urlString do: [ :request |<br>
request<br>
headerAt: 'Authorization' put: 'Basic ', (self user, ':', self password) base64Encoded;<br>
headerAt: 'Connection' put: 'Keep-Alive';<br>
headerAt: 'Accept' put: '*/*' ].<br>
result := (response code between: 200 and: 299) <br>
ifFalse: [<br>
response content. "Make sure content is read."<br>
nil ]<br>
ifTrue: [ (RWBinaryOrTextStream with: (response contentWithProgress: progress)) reset ].<br>
self class useSharedWebClientInstance<br>
ifTrue: [<br>
"Save the WebClient instance for reuse, but only if there is no client cached."<br>
webClient <br>
ifNil: [ webClient := client ]<br>
ifNotNil: [ client close ] ]<br>
ifFalse: [ client close ].<br>
+ result ifNil: [ NetworkError signal: ('Could not access {1} (Code {2})' translated format: {location. response code}) ].<br>
- result ifNil: [ NetworkError signal: 'Could not access ', location ].<br>
^result!<br>
<br>
Item was changed:<br>
----- Method: MCRepositoryInspector>>versionListMenu: (in category 'morphic ui') -----<br>
versionListMenu: aMenu<br>
+ <br>
1 to: self orderSpecs size do: [ :index |<br>
aMenu addUpdating: #orderString: target: self selector: #order: argumentList: { index } ].<br>
aMenu addLine.<br>
+ aMenu add: 'Changes against ...' translated action: [<br>
+ | ri versions seen |<br>
- aMenu add: 'Changes against ...' action: [| ri |<br>
ri := aMenu defaultTarget.<br>
+ versions := ri versionList<br>
+ collect: [:name | MCVersionName on: name]<br>
+ as: OrderedCollection.<br>
+ seen := versions asSet.<br>
+ self version info breadthFirstAncestors do: [:ancestor |<br>
+ (seen includes: ancestor name) ifFalse: [<br>
+ versions add: ancestor.<br>
+ seen add: ancestor name]].<br>
(UIManager default<br>
+ chooseFrom: (versions collect: [:version | version name])<br>
+ values: versions<br>
+ title: 'Select version to show patch against ...' translated) ifNotNil: [:name |<br>
+ | target base |<br>
- chooseFrom: ri versionList<br>
- values: ri versionList<br>
- title: 'Select version to show patch against ...') ifNotNil: [:name |<br>
- | versionName target base |<br>
- versionName := MCVersionName on: name.<br>
target := ri repository versionNamed: ri versionInfo name.<br>
+ base := name isString<br>
+ ifTrue: [ri repository versionNamed: name]<br>
+ ifFalse: [ri version workingCopy repositoryGroup versionWithInfo: name].<br>
- base := aMenu defaultTarget repository versionNamed: versionName.<br>
(MCPatchBrowser<br>
forPatch: (target snapshot patchRelativeToBase: base snapshot))<br>
+ showLabelled: ('Changes from {1} to {2}' translated format: {name. ri versionInfo name})]].<br>
- showLabelled: 'Changes from ', versionName, ' to ', ri versionInfo name]].<br>
^aMenu!<br>
<br>
Item was added:<br>
+ ----- Method: MCVersionName>>name (in category 'as yet unclassified') -----<br>
+ name<br>
+ <br>
+ ^ self!<br>
<br>
<br>
</blockquote></div>