v0.7.0 for Squeak 5.2 and Trunk
Migration notes
You will notice the addition of an objectsReplacedByNames
property when committing changes to packages after updating to this version. The property existed before, but was not persisted. Just accept to commit it.
New features
- Support for reading and writing Tonel repositories (Tonel is an alternate Smalltalk code serialization format and it is the new default in Pharo projects) #208
- Repositories can switch between writing Tonel and Cypress/FileTree at will. A setting for the format has been added in the Git Browser. You can set it via the "Settings" button or from the context menu of the project in the Git Browser.
- Note that Tonel does not store the timestamps of methods or class comments, so these will be lost when writing Tonel and loading that into another image. Timestamps are not artificially created from Git commits as of now.
- The load order of objects (packages) can be changed in the load window (when checking out a commit) and commit window, so the order can be fixed on-the-fly.
- Keyboard shortcuts for excluding and including changes in commit and load windows, thanks to @marceltaeumel.
- "Added" and "removed" indicators for classes in commit and load windows. #157
- Branches can be pushed to any remote now without changing the upstream branch.
- The URL for cloning a repository is pre-populated from the clipboard, like in TortoiseSVN and TortoiseGit.
- Improved support for reading repositories without Squot metadata or only partially existant metadata (e. g., some packages have the .squot-contents file and some do not)
- The writing of Squot metadata can be disabled for a project via the "Settings" button in the Git Browser. This allows to keep repositories "clean" of any Squot marks, but restricts you to the auto-detection of packages and their formats.
Bug fixes
- Packages could not easily (or not at all) be untracked via the GUI because they were automatically re-added. #179
- Unpeeled tags in the packed-refs file were not understood. Repositories with annotated tags can now properly be read and written. #209
- Temporary commits for "unsaved changes" on top of branches were erroneously merged instead of cherry-picked. #173
- "Key not found: serializer" error when checking out non-Squot repositories #176
- Copying of files between different file systems failed if these files contained byte sequences that were not valid according to UTF-8 #212
- The Monticello converter did not record deletions of classes or methods if an MCVersion was missing in the source MCRepository. #218
- New orphaned branches (without parent commits) erroneously did not have an empty file tree to start from #217
- Fixed bugs related to changes to timestamps in Squeak Trunk #213
- Could not track packages whose name started with the name of another already tracked package (regardless of dashes, i. e.
PkgXyz
could not be tracked ifPkg
was already tracked, even though it was only intended that categories likePkg-Xyz
be filtered out) - Debugger appeared when yellow-clicking the commit text pane
- Changes in artifact metadata were not persisted (but since there are no cases where this metadata is really necessary for packages, this was not a problem so far).
Functional changes
- The meta Git refs for the loaded version in an image are no longer saved in the Git repository. They did not fulfill their purpose properly if the image had to be abandoned unsaved. The version is now only referenced in memory. #165
- Simple method recategorizations or timestamp changes are now displayed as such in commit and load windows.
- When a new branch is checked out from a remote-tracking branch, the suggested default is the same branch name derived from the remote-tracking branch.
- A little bit more progress reporting during pushes.
API changes
- The including and excluding of changes from commits or checkouts works differently now. The underlying patch and its diffs are now directly modified via blocks supplied to the diff tree nodes. #215
SquotDiffNode
s should now be constructed withtitle: content: children: onInclude: onExclude:
. The last two parameters are new and take blocks to modify the patch to be loaded or committed. ForSquotMergeDiffNode
there is an additionalonReset:
block if the solution to the conflict shall be discarded.squotAdjustToResemble:
was removed and is no longer sent. Its code should go into the new blocks to be supplied toonInclude:
andonExclude:
(see above)adjustedBy:
on artifacts and their diffs was removed and is no longer sent
- The automatic detection of artifacts is now open to extensions instead of being hard-coded for Cypress/FileTree packages only.
- The "guessing procedure" now looks for methods with the
squotArtifactLocatorFor: priority:
pragma in theSquotFileSystemStore
. Add extension methods to provide additional ways to auto-detect objects in files. - Such methods shall return a
SquotArtifactLocator
with a detection block that tests whether a given file reference contains an object sought after. The block takes also takes an object that represents the search through the file tree as parameter. The search is progressed by telling this object which directory entries to look at. Found artifacts are also added via the search object. - Artifact objects for such discovered files/directories can be created with
forgeLazyArtifact: deserializerFactory: serializerFactory: objectClass:
, so the serializer and deserializer to be used can be specified here.
- The "guessing procedure" now looks for methods with the
- The
SquotPackageShadow
sends a different message to the serializer object to serialize itsMCSnapshot
. The new message also includes the package's name (which is needed by the Tonel serializer). See 4f16d9a. - The available serializers for an object can be discovered via
squotAllSerializers
andsquotSpecializedSerializers
. To make this work, add extension methods to the trackable classes with the pragmasquotSerializer: priority:
and return your serializer class from these methods. This mechanism is used to offer the choice between Tonel and FileTree code output.
Changes under the hood
- The FileSystem packages have been extracted into a separate repository (except for FileSystem-Git which is still here): https://github.com/j4yk/Squeak-FileSystem
- Improved speed of Monticello converter by remembering the fetched version file names during the conversion and verification
- Consolidated
SquotSaveVersionDialog
(a. k. a. commit window) andSquotChangedArtifactsChooser
(a. k. a. load window) - Patches now remember their base object container and their target object container, to make it possible to edit the load order of objects when checking them out.
- Two
SquotPackageShadow
s are now equal if their package names and the containedMCSnapshot
s are equal. - The shadows of start objects in an object graph are now consistently decorated with the object's artificial name.
- Tracked single classes don't get an object name assigned anymore. Classes are identified by their name already.
- Keep immutable object graphs (or rather, shadow graphs) in regular artifacts instead of mutable ones.
addGlobalObjectsToStore:
is no longer called in the method to load a patch. It is instead called in the invoking methods that load or merge from a version.- Package auto-tracking has been generalized to add Tonel packages with the correct serializer.