Skip to content
janvrany edited this page Mar 21, 2013 · 14 revisions

This effort has been sparked by Dale's presentation at STIC 2012.

Goals

The goal is to have a version controlled environment for cross-dialect projects. We do not aim to replace existing dialect solutions. There should be a convenient way to run development of a particular branch of a project in a dialect specific manner but be able to export the results into a (usually github based) common cross-dialect repository. The vision is that a cross-dialect project will maintain separate master branches for each dialect and rely on merging capabilities of the version control system to move changes between these branches.

Current Activities (as of March 2012)

Currently there are several dialect specific solutions brewing in their specific project. This project is the umbrella where they will eventually merge. At STIC 2012 we've agreed on the general layout and format of the code storage in a git repository that we will support from all dialects. The format is versioned to allow its evolution, i.e. a repository will have metadata at the top level indicating which format it uses.

Amber + Gemstone

Dale intends to create a non-Monticello based solution for both of these dialects

Squeak, Pharo, Gemstone

At this point we expect the FileTree (Monticello based) project to evolve towards these goals

VisualWorks

Travis Griggs created STIG as a VW specific integration with git. Martin Kobetic is using that as a basis to provide a Cypress solution

Visual Age

Bob Nemec will code the VA Smalltalk implementation.

Smalltalk/X

An implmenetation of Cypress for Smalltalk/X can be found at https://bitbucket.org/janvrany/stx-goodies-cypress.

The Cypress support is now a part of Smalltalk/X jv-branch.

Proposed file structure

(Following text was added at ESUG 2012 as a result of discussion between Dale Henrichs, Jan Vrany, Martin Kobetic, Martin McClure)

All common files must be UTF8 encoded.

Repository

Cypress repository must have a property file in its root directory side-by-side with the package directories. The lower levels are as shown in the picture above. Extra files, not defined here, are allowed within the repository directory structure, clients must tolerate their presence.

Common property keys

Properties of repository, package and class are stored in file named 'properties.ston' at the corresponding location in the directory structure and contains STON object (for portability it must be restricted to the JSON subset). Each property file contains property named "_cypress_copyright" where the value is same as the copyrightLine property below. Empty properties can be omitted.

Dialect specific property keys should use vendor prefix of the form (e.g. 'vw...', 'squeak...').

Repository Properties

  1. commentFile - filename to be used to store comment (of class or package)
  2. copyrightLine - single line copyright statement that is included in the header of each method file
  3. licenseFile - filename used to store license text (at the package or repository level).

Class Properties

  1. name - the name of the class (just the unqualified class name)
  2. super - the name of the superclass (just the unqualified class name)
  3. namespace - optional namespace of the class
  4. superNamespace - optional namespace of the superclass
  5. instvars - lists the names of instance variables
  6. classinstvars - lists the names of class instance variables
  7. classvars - list of class variable names.
  8. _xx_type - class type identifier; xx is the vendor prefix and the property value is vendor specific; this attribute should be omitted for the most common class type, i.e. non-variable pointer class
  9. pools - list of variable pool names
  10. category - category of the class

Method File Format

Method file starts with following four lines:

  1. a single double-quote
  2. "notice: " + the contents of the copyrightLine property (see above)
  3. "category: " + method category/protocol
  4. a single double-quote

The method source code starts on 5-th line