Finding original change sets
Last updated at 3:57 pm UTC on 14 January 2006
Question Michael Roberts January 27, 2004: Is it possible to view the original change set for VersionsBrowser>>findOriginalChangeSet? If you pull up a versions browser on this method and invoke the menu option to find the changes, my (3.7a) system can't find them. What does 'This version was not found in any changeset nor in the .sources file' mean? Is this normal?
As another example, if you look in changeset 5169commentFixFix-sw and the versions for ClassDescription>>putClassCommentToCondensedChangesFile: It also says that it can't find the original change set. Is this to be expected - I bring up a versions browser from the change set viewer?
I'm trying to work out when I should expect this findOriginalChangeSet method to return something. I get various hits in the sources file for certain objects, but not, for example, Lexicon>>navigateToNextMethod.
I was thinking that this later method dated 12/14/2000 would be found in the sources file?
Answer Michael Roberts: I've just answered my own question for the Lexicon selector as by looking at its CompiledMethod, I can find that the source for this is in the changes file. I therefore assume from the comment that the change set for this has been deleted.
Am I right in thinking, then, that this method is trying to find the original change set file that contained the changes? If it is then that would I think answer my question.
If I put a self halt in Lexicon>>navigateToNextMethod, that change appears in my current change set 'New Changes'. If I then revert to the original method, and then remove my method from the changeset (all using the history browser menu), The history still shows my method, even though it now can't be found? Even if I pull up a new history browser, I can't seem get rid of my history?
Answer Doug Way: Yep, it's trying to find the original changeset that contained that change (that version of that method).
It's not too uncommon to get the 'This version was not found in any changeset nor in the .sources file' response. For example, if you're using 3.7alpha, the changesets in the change sorter only go back to 3.5 or so. So, if this version of the method was in a changeset from 3.1/3.2/3.3/3.4, it won't be able to find the changeset. If it's prior to 3.0, it will be in the .sources file.
But if you really want to find out what changeset that method is from, you can download the "jumbo changes" image from the ftp site, which has changesets going all the way back to 3.0! See ftp://st.cs.uiuc.edu/pub/Smalltalk/Squeak/testing This image is still at 3.6alpha, though... needs to be updated to 3.7alpha.
Answer Scott Wallace:
- By "history browser" here, do you mean a "recent submissions" tool? If so, what you're observing is normal and correct. The recent-submissions tool operates independently of the change-set regime. Every time a method is successfully submitted by any means – normal "accept" in a browser or other code tool, file-in from a file-list, file-in from a change-list-browser or file-contents-browser or from loading code updates, or revert-to-earlier-version – the fact that it was submitted gets remembered in the recent-submissions list, and this has nothing to do with what change-set(s) the method may occur in.
- ... or perhaps by "history browser" you mean a "recent change log" tool, which is a kind of ChangeList browser that shows, in dechunked format, the tail end of the .changes log. If so, again the right thing is happening. The changes log is write-only and immutable; whatever has been logged there cannot become "unlogged". Again, this operates independently of any change-set considerations.
- ... or perhaps by "history browser" you mean the "recent" category in the Lexicon tool, which shows all the methods to which you have navigated within that tool? If so, again the right thing is happening. If you want to delete a particular method from the Lexicon's own "recent-history" list, select the method and hit the "-" button in the tool's button bar. That's specifically what that button is for.