<div dir="ltr">Hi All,<div><br></div><div>    if one has a set of packages with some versions with identical version numbers but different timestamps then the default sort-by-version-number list can be displayed in the wrong order.  For example take a look at the VMMaker.oscog package in</div><div><br></div><div><div>MCHttpRepository</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>location: '<a href="http://source.squeak.org/VMMaker">http://source.squeak.org/VMMaker</a>'</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>user: 'squeak'</div><div><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>password: 'squeak'</div><div><br></div><div>Versions such as VMMaker.oscog-eem.2151 & VMMaker.oscog-cb.2151 may be displayed in the wrong order because the sort-by-version-number block in MCRepositoryInspector>>#orderSpecs doesn't look at time stamps when the version numbers are the same.  </div><div><br></div><div>In fact it does this for good reason.  It takes an *age* to obtain he timestamp from a version number because the scanner in MCMczReader>>#loadVersionInfo reads the entire version info.  There isn't a path to scan just enough tokens to retrieve the time stamp.</div><div><br></div><div>I don't have the time or the Monticello chops to fix this but if anyone does I'd be grateful.  I got as far as the following before I realised I needed to write a timestamp-specific path through the MCVersionName -> MCVersionInfo path that avoids parsing the entire version literal.</div><div><br></div><div>(See attached)</div><div>Added a sortCache inst var to MCRepositoryInspector.</div><div>Changed</div><div>MCRepositoryInspector>>versionList</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>| result |</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>result := selectedPackage</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">              </span>ifNil: [ self versionNamesForNoPackageSelection ]</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">              </span>ifNotNil: [ self versionNamesForSelectedPackage ].</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>(self orderSpecs at: order) value ifNotNil:</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">            </span>[ : sortBlock |</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                </span>sortCache := Dictionary new.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">           </span>result sort: sortBlock ].</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>sortCache := nil.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">      </span>^result collect:</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">               </span>[ : each | self versionHighlight: each ]</div><div><br></div><div><div>MCRepositoryInspector>>orderSpecs</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">     </span>^{</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">             </span>'unchanged' -> nil.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">         </span>'order by package' -> [ :x :y | x packageName < y packageName ].</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">         </span>'order by author' -> [ :x :y | x author caseInsensitiveLessOrEqual: y author ].</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">             </span>'order by version-string' -> [ :x :y | x versionNumber asString < y versionNumber asString ].</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">            </span>'order by version-number' -><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>[ :x :y | | vx vy |</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                                                                            </span> x versionNumber > y versionNumber</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                                                                          </span> or: [x versionNumber = y versionNumber</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                                                                                        </span>and: [vx := sortCache at: x ifAbsentPut: [repository versionInfoForFileNamed: x].</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                                                                                              </span>vy := sortCache at: y ifAbsentPut: [repository versionInfoForFileNamed: y].</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                                                                                            </span>vx timeStamp > vy timeStamp]]].</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">             </span>'order by filename' -> [ :x :y | x < y ].</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>}</div></div><div><br></div><div>Fixed what looks like a bug in </div><div>MCCacheRepository>>versionInfoForFileNamed: aString</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>^ cache at: aString ifAbsentPut: [self versionReaderForFileNamed: aString do: [:r | r info]]</div><div><br></div><div class="gmail_signature"><div dir="ltr"><div><span style="font-size:small;border-collapse:separate"><div>_,,,^..^,,,_<br></div><div>best, Eliot</div></span></div></div></div>
</div></div>