Search code examples
pharo

How to save a Pharo Smalltalk package to disk in Tonel format?


I would like to write Pharo Smalltalk scripts that load and save Smalltalk packages to disk in tonel format but I don't understand the API for saving packages.

Loading from Tonel on disk into the image works like this:

(TonelReader on: aRepositoryDirectory fileName: packageName)
    version load.

but what is the inverse operation that saves a package onto disk? (assuming that the package name and target directory are supplied.)

(I explicitly want to avoid using advanced tools like Metacello and Iceberg here. I want to either use the Tonel library directly or else Monticello without depending on any previous repository configuration.)


Solution

  • Perhaps unsurprisingly, it looks like the inverse of TonelReader is implemented by TonelWriter:

    [[[ TonelWriter on: ('someDirectory' asFileReference ensureCreateDirectory) ]]]
    

    Here is a full example courtesy Luke:

    [ :packageName :directory |
          TonelWriter fileOut:  packageName asPackage mcWorkingCopy on: directory.
    ] value: 'BaselineOfTonel' value: '/tmp/tonel-test'