diff --git a/.travis.yml b/.travis.yml
index 81bffcfcf..a0ba7704f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,13 +1,25 @@
language: erlang
env:
- - ST=Pharo-1.4
- - ST=Pharo-2.0
+# - ST=Pharo-1.4 # I do not intend to continue supporting tODE on Pharo-1.4
+# - ST=Pharo-2.0 # I do not intend to continue supporting tODE on Pharo-2.0
- ST=Pharo-3.0
- - ST=GemStone-2.4.5.2
- - ST=GemStone-3.1.0.6
+ - ST=Pharo-4.0 # experimental
+# - ST=Pharo-5.0 # see https://github.com/dalehenrich/tode/issues/183
+ - ST=GemStone-2.4.5.3
+ - ST=GemStone-2.4.6
- ST=GemStone-3.0.1
- - ST=GemStone-3.2.2
+ - ST=GemStone-3.1.0.6
+ - ST=GemStone-3.2.8.1
+
+notifications:
+ webhooks:
+ urls:
+ - https://webhooks.gitter.im/e/47796c01bb932d6a0300 # dalehenrich/chat
+ - https://webhooks.gitter.im/e/f662b9bc952d22a2f11f # dalehenrich/tode
+ on_success: always # options: [always|never|change] default: always
+ on_failure: always # options: [always|never|change] default: always
+ on_start: false # default: false
install:
- export PROJECT_HOME="$(pwd)"
diff --git a/README.md b/README.md
index a2ce92622..f4fa0bccc 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,5 @@
# tODE: the Object-centric Development Environment [![Build Status](https://travis-ci.org/dalehenrich/tode.png?branch=master)](https://travis-ci.org/dalehenrich/tode)
-[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/dalehenrich/tode?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
## Installation and Setup
@@ -18,6 +17,11 @@ Here's a recent screen shot:
+## Questions? [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/dalehenrich/tode?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+
+1. [Gitter chat](https://gitter.im/dalehenrich/tode)
+2. [tODE mailing list](https://groups.google.com/forum/#!forum/tode_st)
+
[1]: http://www.pharo-project.org/pharo-download/release-1-4
[2]: http://gemstonesoup.wordpress.com/2012/09/21/gemstones-3-1-0-1-is-shipping/
[3]: http://community.gemstone.com/download/attachments/6816350/GS64-Topaz-3.0.pdf?version=1
@@ -28,4 +32,3 @@ Here are some posts from [Stephen Ramsay](http://stephenramsay.us/) that explain
- [Life on the Command Line](http://stephenramsay.us/2011/04/09/life-on-the-command-line/)
- [The Mythical Man-Finger](http://stephenramsay.us/2011/07/25/the-mythical-man-finger/)
- [The Man-Finger Aftermath](http://stephenramsay.us/2011/08/05/the-man-finger-aftermath/)
-- [How Norbert uses *scripts* in Pharo](http://forum.world.st/how-do-you-use-scripts-tp4795618p4796984.html)
diff --git a/docs/GettingStarted.md b/docs/GettingStarted.md
index fdb329389..0836d1946 100644
--- a/docs/GettingStarted.md
+++ b/docs/GettingStarted.md
@@ -1,2 +1,214 @@
#Getting Started with tODE
+Use the [todeClient][35] script to start up a tODE client image:
+
+```Shell
+todeClient
+```
+
+*Note: the `-p` option allows you maintain and run multiple client images*.
+
+
+###tODE System Menu
+
+The tODE System Menu:
+
+![tODE System Menu][37]
+
+is your entry point for setting up and controlling tODE.
+
+1. [tODE Shell](#tode-shell)
+1. [tODE Edit](#tode-edit)
+2. [tODE Test Login](#tode-test-login)
+3. [tODE Install](#tode-install)
+4. [tODE Update](#tode-update)
+5. tODE Workspaces
+6. [tODE Window Layout](#tode-window-layout)
+7. Update tODE Client
+8. Define Web Edition Root
+8. [Define Dev Kit Root](#define-dev-kit-root)
+9. [Refresh tODE menu](#refresh-tode-menu)
+
+####tODE Shell
+
+Use the `tODE Shell` menu item to select the stone to log into:
+
+![tode Shell menu][36]
+
+and open the tODE shell console:
+
+![tODE Shell console][38]
+
+####tODE Edit
+The `tODE Edit` menu items allow you to modify the session descriptions from within the client image:
+
+![tode edit menu item][39]
+
+The menu item brings up a client workspace:
+
+![tode edit workspace][43]
+
+*Note that the workspace is not a file editor, so you need to execute the workspace to update the session disk.*
+
+The name of the session description file is derived from the `name` of the session description.
+If you change the name of the description you are effectively creating a new description.
+
+####tODE Test Login
+The `tODE Test Login` menu item makes it possible to collect diagnostic information when you are having trouble logging into a stone. The menu item is also useful to ping a particular stone to see if it is running.
+
+![tode test login menu item][40]
+
+Besides the menu item the `testLogin` command can be invoked:
+
+1. via the **testLogin:** message in a client-side workspace:
+
+ ```Smalltalk
+ TDShell testLogin: 'gemtalk'
+ ```
+
+3. or, via the command line:
+
+ ![testLogin shell][41]
+
+This is an example of a successful test login:
+
+![successful test login][42]
+
+*Note that while there was a successful test, the message does indicate that tODE is not installed. See the [tODE installTodeStone script][46] for installing tODE on a server.*
+
+Here's an example of an error message:
+
+![testLogin output][20]
+
+If the test login error message does not give you enough information for you to solve the problem, copy the result of the `testLogin` command and send mail to the [GLASS mailing list][28].
+
+####tODE Install
+Use the `tODE Install` menu item to install tODE on the selected stone.
+Use this menu item if you did not use the [createTodeStone][3] script to create the stone:
+
+![tode Install menu][44]
+
+The menu item executes the tode script located in the file `$GS_HOME/tode/client/scripts/installTode`:
+
+```Shell
+updateClient --clientRepo=github://dalehenrich/tode:master/repository
+installServer --clientScriptPath=scripts
+bu backup tode.dbf
+mount --todeRoot home /
+bu backup home.dbf
+cd
+```
+
+*Note that the script starts by updating the client-side code and then updates the server-side code.*
+
+You can customize `installTode` script to perform additional commands, if needed.
+
+The server-side load scripts can be found in the `$GS_HOME/tode/server/scripts` directory.
+
+**You are encouraged to use the [installTodeServer][46] shell script to install tODE into your Dev Kit server.**
+
+####tODE Update
+Use the `tODE Update` menu item update the tODE project on the selected stone:
+
+![tode Update menu][45]
+
+The menu item executes the tode script located in the file `$GS_HOME/tode/client/scripts/updateTode`:
+
+```Shell
+updateClient --clientRepo=github://dalehenrich/tode:master/repository
+updateServer --clientScriptPath=scripts
+bu backup home.dbf
+```
+
+You can customize `updateTode` script to perform additional commands, if needed.
+
+The server-side load scripts can be found in the `$GS_HOME/tode/server/scripts` directory.
+
+**You are encouraged to use the `project load Tode` command in the tODE shell to perform updates of the tODE project.**
+####tODE Window Layout
+Use the `tODE Window Layout` menu item to choose a window layout for your client image:
+
+![tode window layout menu][52]
+
+The window layout is scaled based on the size of the Pharo client window, so you need to re-select a window layout whenever you change the size of the Pharo client window.
+
+Here are samples of three of the available window layouts:
+
+| layout | sample|
+|--------|-------|
+| standard-small|![standard-small][49]|
+|standard-medium|![standard-medium][50]|
+|standard-large|![standard-large][51]|
+
+####Define Dev Kit Root
+The `Define Dev Kit Root` menu item:
+
+![dev kit root menu][53]
+
+tells the Pharo client where to find the `$GS_HOME/tode` directory.
+The scripts and session descriptions used by the pharo client are found in the `$GS_HOME/tode` directory.
+
+A `todeClientImage` can be retargeted to a different GsDevKit installation by changing the directory.
+
+####Refresh tODE menu
+The `Refresh tODE menu` menu item:
+
+![refresh tode menu menu][54]
+
+rebuilds the tODE system menu. The menu should automatically update.
+
+
+### Add Project to tODE video
+
+This short video describes how to add your own project to tODE. It also serves as an introduction to the tODE development environment:
+
+
+
+## Mono-spaced fonts
+While you are in the Pharo client window, it is a good time to choose a new font. tODE works best with a mono-spaced font and you can choose a font from those installed on your system using the Pharo System Settings menu item:
+
+![pharo system settings][1]
+
+which opens the `Settings browser`:
+
+![pharo settings brower][2]
+
+1. Click on the `Default font button` and choose a font from those listed in the window that pops up.
+You may need to `Update` to get the system fonts loaded into the Pharo client.
+2. Click on the `Force All button` to get your font choice propogated to the other choices.
+
+Don't forget to save the image after making client-side changes.
+
+## Window Layout
+Now is also a good time to change the size of the Pharo client window.
+When you change the size of the Pharo client window, you need to use the [tODE Window Layout menu item](#tode-window-layout) to reset or change the window layout.
+The initial layout (`standard-small`) is probably not a good choice for high resolution displays.
+`standard-medium` or `standared-large` are better choices depending upon the resolution of your display and the size of the font that you have chosen.
+
+Don't forget to save the image after making client-side changes.
+
+[1]: images/pharoSystemSettingsMenu.png
+[2]: images/pharoSystemSettingsDialog.png
+[3]: https://github.com/GsDevKit/gsDevKitHome/blob/master/README.md#createtodestone
+[20]: docs/images/testLoginOutput.png
+[28]: http://lists.gemtalksystems.com/mailman/listinfo/glass
+[35]: https://github.com/GsDevKit/gsDevKitHome/blob/master/bin/todeClient
+[36]: images/todeShell.png
+[37]: images/todeSystemMenu.png
+[38]: images/todeShellConsole.png
+[39]: images/todeEditMenu.png
+[40]: images/todeTestLoginMenu.png
+[41]: images/todeTestLoginShell.png
+[42]: images/todeTestLoginSuccess.png
+[43]: images/todeEditWorkspace.png
+[44]: images/todeInstallMenu.png
+[45]: images/todeUpdateMenu.png
+[49]: images/standardSmallLayout.png
+[50]: images/standardMediumLayout.png
+[51]: images/standardLargeLayout.png
+[52]: images/todeWindowLayoutMenu.png
+[53]: images/todeDefineDevKitRootMenu.png
+[54]: images/todeRefreshTodeMenu.png
+
diff --git a/docs/glossary.md b/docs/glossary.md
new file mode 100644
index 000000000..f24a46a5c
--- /dev/null
+++ b/docs/glossary.md
@@ -0,0 +1 @@
+#tODE Glossary
diff --git a/docs/images/pharoSystemSettingsDialog.png b/docs/images/pharoSystemSettingsDialog.png
new file mode 100644
index 000000000..55058b41b
Binary files /dev/null and b/docs/images/pharoSystemSettingsDialog.png differ
diff --git a/docs/images/pharoSystemSettingsMenu.png b/docs/images/pharoSystemSettingsMenu.png
new file mode 100644
index 000000000..dc55ed654
Binary files /dev/null and b/docs/images/pharoSystemSettingsMenu.png differ
diff --git a/docs/images/projectListMenu.png b/docs/images/projectListMenu.png
new file mode 100644
index 000000000..1a0e19215
Binary files /dev/null and b/docs/images/projectListMenu.png differ
diff --git a/docs/images/standardLargeLayout.png b/docs/images/standardLargeLayout.png
new file mode 100644
index 000000000..9683804c2
Binary files /dev/null and b/docs/images/standardLargeLayout.png differ
diff --git a/docs/images/standardSmallLayout.png b/docs/images/standardSmallLayout.png
new file mode 100644
index 000000000..e87fd0c69
Binary files /dev/null and b/docs/images/standardSmallLayout.png differ
diff --git a/docs/images/todeDefineDevKitRootMenu.png b/docs/images/todeDefineDevKitRootMenu.png
new file mode 100644
index 000000000..68c743f5e
Binary files /dev/null and b/docs/images/todeDefineDevKitRootMenu.png differ
diff --git a/docs/images/todeEditMenu.png b/docs/images/todeEditMenu.png
new file mode 100644
index 000000000..109427d1d
Binary files /dev/null and b/docs/images/todeEditMenu.png differ
diff --git a/docs/images/todeEditWorkspace.png b/docs/images/todeEditWorkspace.png
new file mode 100644
index 000000000..4483b9ae8
Binary files /dev/null and b/docs/images/todeEditWorkspace.png differ
diff --git a/docs/images/todeInstallMenu.png b/docs/images/todeInstallMenu.png
new file mode 100644
index 000000000..a8e8ba3dd
Binary files /dev/null and b/docs/images/todeInstallMenu.png differ
diff --git a/docs/images/todeRefreshTodeMenu.png b/docs/images/todeRefreshTodeMenu.png
new file mode 100644
index 000000000..de2ac327a
Binary files /dev/null and b/docs/images/todeRefreshTodeMenu.png differ
diff --git a/docs/images/todeShell.png b/docs/images/todeShell.png
new file mode 100644
index 000000000..7f837714a
Binary files /dev/null and b/docs/images/todeShell.png differ
diff --git a/docs/images/todeShellConsole.png b/docs/images/todeShellConsole.png
new file mode 100644
index 000000000..cff6c4a17
Binary files /dev/null and b/docs/images/todeShellConsole.png differ
diff --git a/docs/images/todeSystemMenu.png b/docs/images/todeSystemMenu.png
new file mode 100644
index 000000000..6c9d6ab42
Binary files /dev/null and b/docs/images/todeSystemMenu.png differ
diff --git a/docs/images/todeTestLoginMenu.png b/docs/images/todeTestLoginMenu.png
new file mode 100644
index 000000000..7725ece93
Binary files /dev/null and b/docs/images/todeTestLoginMenu.png differ
diff --git a/docs/images/todeTestLoginSuccess.png b/docs/images/todeTestLoginSuccess.png
new file mode 100644
index 000000000..47419f12e
Binary files /dev/null and b/docs/images/todeTestLoginSuccess.png differ
diff --git a/docs/images/todeUpdateMenu.png b/docs/images/todeUpdateMenu.png
new file mode 100644
index 000000000..2fb2ebf05
Binary files /dev/null and b/docs/images/todeUpdateMenu.png differ
diff --git a/docs/images/todeWindowLayoutMenu.png b/docs/images/todeWindowLayoutMenu.png
new file mode 100644
index 000000000..3af09b1dd
Binary files /dev/null and b/docs/images/todeWindowLayoutMenu.png differ
diff --git a/docs/releaseNotes/releaseNotes0.1.0.md b/docs/releaseNotes/releaseNotes0.1.0.md
new file mode 100644
index 000000000..6af264203
--- /dev/null
+++ b/docs/releaseNotes/releaseNotes0.1.0.md
@@ -0,0 +1,491 @@
+# Release Notes 0.1.0
+
+- [Bug Fixes](#bug-fixes)
+- [Pull Requests](#pull-requests)
+- [Git Credentials and tODE](#git-credentials-and-tode)
+- [Project Loading with tODE](#project-loading-with-tode)
+ - [Project Entries](#project-entries)
+ - [Project Entry and Script Sharing](#project-entry-and-script-sharing)
+ - [Project Entry and Script Sharing Structures](#project-entry-and-script-sharing-structures)
+ - [/home](#home)
+ - [/projects](#projects)
+ - [/sys](#sys)
+ - [/sys/default](#sysdefault)
+ - [/sys/local](#syslocal)
+ - [/sys/stone](#sysstone)
+ - [/sys/stones>](#sysstones)
+ - [/sys/stones/\](#sysstonesstone-name)
+ - [/sys/stones/\/dirs](#sysstonesstone-namedirs)
+ - [/sys/stones/\/home](#sysstonesstone-namehome)
+ - [/sys/stones/\/homeComposition](#sysstonesstone-namehomecomposition)
+ - [/sys/stones/\/packages](#sysstonesstone-namepackages)
+ - [/sys/stones/\/projectComposition](#sysstonesstone-nameprojectcomposition)
+ - [/sys/stones/\/projects](#sysstonesstone-nameprojects)
+ - [/sys/stones/\/repos](#sysstonesstone-namerepos)
+ - [Construction of Project Entry and Script Sharing Structures](#construction-of-project-entry-and-script-sharing-structures)
+- [Converting v0.0.2 project structure to v0.1.0](#converting-v002-project-structure-to-v010)
+
+##Bug Fixes
+1. [Issue #5: Add command / file completion][12]
+2. [Issue #100: TDProjectEntryDefinition class>>defaultGitRootPath should be in session temps][17]
+1. [Issue #106: projects dir with projectEntries?][7]
+1. [Issue #110: probably should have stone specific home dir in gsdevkit][6]
+2. [Issue #123: adapt tode client to new tode/sys structure][8]
+3. [Issue #124: `project load` may not use proper version of project entry][10]
+3. [Issue #125: potential difficulty when updating live tode in 3.1.0.6 and earlier: `a OffsetError occurred (error 2003), reason:objErrBadOffsetIncomplete, max:0 actual:1`][9]
+4. [Issue #129: add `\` escape to tODE command-line processing (mainly to escape newlines)][11]
+5. [Issue #130: implement TDTopezServer>>evaluateCommandStream: for multi-line scripts and `tode its`][13]
+6. [Issue #135: cheat sheet for GemTools users][15]
+6. [Issue #143: add `/sys` structure to tODE checkout][14]
+7. [Issue #147: finish `gs` command docs][16]
+8. [Issue #148: write `project` command man pages #148][18]
+9. [Issue #149: v0.1.0 release notes][19]
+10. [Issue #152: `project refresh` project entry command needed][31]
+11. [Issue #154: `project load Tode --loads=`#('Tests')` option to append --loads to project entry][32]
+12. [Issue #155: rename v0.0.3 to v0.1.0][33]
+13. [Issue #157: `test --batch` option for supporting batch test runs][34]
+
+##Pull Requests
+1. [Pull Request #140: Greatly Improved Git merge tool][21]
+1. [Pull Request #150: v0.1.0][20]
+
+##Git Credentials and tODE
+When you clone a git repository, your remote repository credentials (i.e., GitHub username and password) are needed for doing commands like `push`.
+The [Github article: Which remote URL should I use?][35] describes the various choices you have.
+With tODE, the `git` commands are performed using `System class>>performOnServer:` and it is not convenient to prompt for your username and password everytime a git command is performed.
+
+###Cloning with SSH
+I recommend that you use SSH and setup [an SSH keypair][36].
+With an SSH keypair, you are not prompted for a username and password, so git interactions via tODE are simplified.
+You can also use [SSH agent forwarding][37] to use your local SSH keys for server installations.
+
+###Cloning with HTTPS
+If for some reason you decide that you want to use `https` to clone your repo (i.e., your firewall prevents the use of SSH), then you will need to set up [a `credential.helper` for git][38].
+To avoid having to periodically redefine your password, you should probably use [`git-credential-store][39], which stores credentials in a file on disk protected by filesystem permissions.
+
+##Project Loading with tODE
+One of the basic principles for tODE is that the same code should be run whether you are executing an operation from a menu pick, the tODE shell, or a [topaz][26] job.
+This priniciple is especially important when it comes to project load scripts.
+Developers must be able to count on the fact that whether or not they build a stone from scratch or update a stone from a menu pick, that they end up with the same code loaded into their image.
+
+For loading projects, the class **TDMetacelloTool** is the workhorse.
+**TDMetacelloTool** implements a comprehensive Smalltalk API for managing most phases of project management.
+**TDMetacelloTool** also implements the `project` command which provides tODE shell access to the project management API:
+
+```
+NAME
+ project - Metacello project management support.
+
+SYNOPSIS
+ project [--help] []
+
+DESCRIPTION
+ Commands:
+ clone Clone repository (github only)
+ commit Commit the Metacello project
+ compare View differences between repository versions (git only)
+ diff View code differences between image and repository
+ entry Create a new project entry
+ list List Metacello projects
+ load Load a Metacello project
+ lock Lock project registration
+ log Browse commit log for the Metacello project (git only)
+ prime Prime the project registry
+ registry Inspect the project registry
+ rehome Point package repository groups for project to new repository
+ summary View report of changed packages and methods
+ validate Validate the project registrations
+
+ Use `project --help ` to read about a specific subcommand.
+```
+
+For example, to load the `Seaside3` project one can use:
+
+1. The `load` menu item in the `project list`:
+
+ ![project list menu][27]
+
+2. The 'project load` command in the tODE shell:
+
+ ```
+ project load Seaside3
+ ```
+
+3. A Smalltalk expression that can be run in a workspace or topaz:
+
+```Smalltalk
+ (TDTopezServer batchInstance toolInstanceFor: 'project')
+ projectLoad: 'Seaside3'
+```
+
+All three techniques are based on using `toolInstanceFor:` for look up and the same `load` code is executed in all three scenarios.
+
+###Project Entries
+
+The *project entry* is used by tODE to specify the details needed for loading a project.
+A *project entry* has attributes that correspond to the arguments you would use in a [**Metacello** load command][3].
+For example the following Metacello load command for the Seaside3 project:
+
+```Smalltalk
+Metacello new
+ baseline: 'Seaside3';
+ repository: 'github://GsDevKit/Seaside31:3.1.?/repository'
+ lock;
+ load: #('Development' 'Zinc' 'FastCGI' 'Examples' 'Tests')
+```
+
+is specified like this in a *project entry*:
+
+```Smalltalk
+^ TDProjectSpecEntryDefinition new
+ baseline: 'Seaside3'
+ repository: 'github://GsDevKit/Seaside31:3.1.?/repository'
+ loads: #('Development' 'Zinc' 'FastCGI' 'Examples' 'Tests');
+ status: #(#'inactive');
+ locked: false;
+ yourself
+```
+
+Over time, the **TDProjectSpecEntryDefinition** will be expanded to include additional project meta data as needed.
+
+The *project entry* specification is stored on disk so that the specifications can be shared across multiple stones.
+
+###Project Entry and Script Sharing
+In a [GsDevKitHome][25] installation, it is expected that multiple stones will be used for production, development and testing.
+In this environment it is necessary to be able to have:
+
+1. An initial, default set of *project entry* specifications, managed by the [GsDevKit team][28], that are shared by all stones.
+2. Installation-wide *project entries* and scripts where some *project entry* specifications have been customized for the local installation or additional *project entry* specifications have been added that are managed by the local development team.
+3. Stone-specific *project entry* specifications that are customized on a stone by stone basis.
+
+###Project Entry and Script Sharing Structures
+At the top-level of the tODE directory node structure in`/`, there are three directory nodes that are used to implement *project entry* and script sharing:
+
+```
++-home\
++-projects\
++-sys\
+```
+####/home
+The `/home` directory node houses the shared scripts and directory nodes.
+
+*See the [/sys/stones/\/homeComposition](#sysstonesstone-namehomecomposition) section for information on how the contents of the `/home` directory node is composed.*
+
+####/projects
+The nodes in the `/projects` directory node are *project entry* specifications.
+
+*See the [/sys/stones/\/projectComposition](#sysstonesstone-nameprojectcomposition) section for information on how the contents of the `/projects` directory node is composed.*
+
+####/sys
+Both the `/home` and `/projects` directory nodes are composed from three other directory node strucures under `/sys`: [/sys/default](#sysdefault); [/sys/local](#syslocal); and [/sys/stones/\](#sysstonesstone-name):
+
+```
++-sys\
+ +-default\
+ +-local\
+ +-stone\
+ +-stones\
+```
+
+####/sys/default
+The `/sys/default/` directory node is a mount point for the disk directory `$GS_HOME/tode/sys/default`.
+
+`/sys/default/bin` is the default location for utility scripts.
+
+`/sys/default/client` is the default location for client session descriptions, scripts, and windowLayouts.
+
+`/sys/default/home` is the location where the common tODE scripts are located.
+The scripts in this directory node are included in the initial checkout of [gsDevKitHome][23].
+Over time, I expect folks to contribute their own utility scripts here.
+
+`/sys/default/pharo` is the location of the `todeLoad.st` file that is used to bootstrap and update the todeClientImage.
+
+`/sys/default/projects` is the location where the common tODE *project entries* are located.
+The *project entries* in this directory node should represent the full range of projects that have been ported to [GsDevKit][25].
+Over time, I expect that the list will be expanded as folks port more projects to [GsDevKit][25].
+
+`/sys/default/server` is the default location for server bootstrap scripts.
+
+`/sys/default/templates` is the location where the default templates for the nodes used in [constructing the per stone structure is defined](#sysstonesstone-name).
+
+####/sys/local
+The `/sys/local/` directory node is a mount point for the disk directory `$GS_HOME/tode/sys/local`.
+
+`/sys/local/client` is the location where installation-wide client session descriptions, scripts, and windowLayouts are stored.
+The default location for scripts and windowLayouts is `/sys/default/client`.
+
+`/sys/local/git` is the location where installation-wide git clones may be shared.
+You may specify an alternate location in the session description for a stone.
+
+`/sys/local/home` is the location where the installation-wide tODE scripts are located.
+You should add scripts to this directory node that you want all stones in your installation to share.
+
+`/sys/local/pharo` is the location of a local version `todeLoad.st` file that is used in place of `/sys/default/pharo/todeLoad.st` to bootstrap and update the todeClientImage.
+
+`/sys/local/projects` is the location where the installation-wide tODE *project entries* are located.
+You should add *project entries* to this directory node that you want all the stones in your installation to share.
+If you have clones of projects that are present in `/sys/default/projects`, you should copy the *project entry* from `/sys/default/projects` to `/sys/local/projects` and save your installation-specific modifications there.
+By default, the *project entries* in `/sys/local/projects` have precedence over those in `/sys/default/projects`.
+
+`/sys/local/server` is the location where installation-wide server bootstrap scripts are located.
+The default bootstrap scripts are located in `/sys/defaul/server/scripts`.
+
+`/sys/local/templates` is the location where the local templates for the nodes used in [constructing the per stone structure is defined](#sysstonesstone-name).
+
+####/sys/stone
+`/sys/stone` is mounted to point at the `/sys/stones/` directory node.
+In effect `/sys/stone/` is a *symbolic link* to `/sys/stones/` and can be used in tODE commands to refer to the current stone's directory structure without having to specify the name of the current stone.
+
+####/sys/stones/\
+
+Here's a diagram of the structure in the `/sys/stones/` directory node:
+
+```
++-sys\
+ +-stones\
+ +-\
+ +-dirs\
+ +-home\
+ +-homeComposition
+ +-packages\
+ +-projectComposition
+ +-projects\
+ +-repos\
+```
+
+####/sys/stones/\/dirs
+`/sys/stones//dirs` is the location where you can find the list of git-based project directory nodes.
+A git-based project uses a baseline and the project repository is either a `filetree://` repository that is managed by git or the project repository is a `github://` repository.
+Each of the nodes in `/sys/stones//dirs` resolves to an instance of **ServerFileDirectory**.
+
+By referencing the `dirs` node, you can form disk path references for tODE shell commands.
+The following tODE shell script copies the contents of the [`tode` directory located in the Tode project repository][29] to `/sys/local/home` making it available in all stones in your [GsDevKitHome][23] installation:
+
+```
+cp /sys/stone/dirs/Tode/tode /sys/local/home/tode
+```
+
+If you have a local git clone of the [tODE repository][30], then you might prefer to directly mount the `/sys/stone/dirs/Tode/tode` so that the changes that you make to any script will be made to the files in the git clone itself:
+
+```
+mount @/sys/stone/dirs/Tode/tode /sys/local/home tode
+```
+
+####/sys/stones/\/home
+`/sys/stones//home` (or `/sys/stone/home`) is the location where the stone-specific tODE scripts are located.
+By default, all new scripts and directory nodes that you create in `/home`, will be saved in this location.
+
+####/sys/stones/\/homeComposition
+The `/sys/stones//homeComposition` node defines the composition of the [`/home` directory node](#home).
+
+```Smalltalk
+(TDComposedDirectoryNode
+ pathComposedDirectoryNodeNamed: 'home'
+ topez: self topez)
+ addPathNode: '/sys/stone/home';
+ addPathNode: '/sys/local/home';
+ addPathNode: '/sys/default/home';
+ yourself
+```
+
+The order of `addPathNode:` statements defines the precedence order with the first entry having precedence over subsequent entries.
+There are variants of the `addPathNode:` method, that allow you to define a specific list of nodes to `exclude` or `include`.
+You also have the option of specifying a `select block`.
+
+To view or modify the composition specification use the following tODE shell commands:
+
+```
+edit /sys/stone/homeComposition # view composition for current stone
+```
+
+####/sys/stones/\/packages
+The `/sys/stones//packages` is the location where you can find the list of packages that are loaded into the stone.
+Each of the nodes in `/sys/stones//packages` resolves to an instance of **MCWorkingCopy**.
+
+You can use the `packages` node in a node path in commands that call for a ``.
+The following command brings up a window on the list of ancestors in the `Utf8Encoding` package:
+
+```
+mc ancestors @/sys/stone/packages/Utf8Encoding
+```
+
+####/sys/stones/\/projects
+`/sys/stones//projects` (or `/sys/stone/projects`) is the location where the stone-specific *project entry* specifications are located.
+
+####/sys/stones/\/projectComposition
+The `/sys/stones//projectComposition` node defines the composition of the [`/projects` directory node](#projects).
+
+```Smalltalk
+(TDComposedDirectoryNode
+ pathComposedDirectoryNodeNamed: 'projects'
+ topez: self topez)
+ addPathNode: '/sys/stone/projects';
+ addPathNode: '/sys/local/projects';
+ addPathNode: '/sys/default/projects';
+ yourself
+```
+
+*See the [/sys/stones/\/homeComposition](#sysstonesstone-namehomecomposition) section for information about specifying precedence.*
+
+To view or modify the composition specification use the following tODE shell commands:
+
+```
+edit /sys/stone/projectComposition # view composition for current stone
+```
+
+####/sys/stones/\/repos
+The `/sys/stones//repos` node is the location where you can find the list of git-based or filetree-based repositories associated with the loaded project entries in the stone.
+Each of the nodes in `/sys/stones//repos` is an instance of **MCRepository**.
+
+You can use the `repos` node to reference a `` like the following:
+
+```
+mr packages @/sys/stone/repos/Tode
+```
+
+Each of the nodes in `/sys/stones//repos/` resolves to an Array of **GoferResolvedReference** instances, that represent the list of versions for the named package in that repository.
+
+A specific version can be resolved by using the version name in the node path:
+
+```
+mc compare image BaselineOfSton @/sys/stone/repos/Ston/BaselineOfSton/BaselineOfSton-dkh.2
+```
+
+###Construction of Project Entry and Script Sharing Structures
+The `/sys/default/`, `/sys/local/`, and`/sys/stones/` directory nodes are mount points for the disk directories rooted in `$GS_HOME/tode/sys`.
+All of the directories and files under `$GS_HOME/tode/sys` are shared by all stones.
+A change to a script in `/home` will immediately be available to all other stones.
+
+The scripts and files in tODE are stored as objects on disk using STON.
+STON files have a `.ston` extension.
+
+The following tODE shell script is used to construct `/home`. `/projects`, and `/sys` directory nodes:
+
+```
+# Set up /sys node structure
+mount --todeRoot sys/default /sys default
+mount --todeRoot sys/local /sys local
+mount --todeRoot sys/stones /sys stones
+# ensure that --stoneRoot directory structure is present
+/sys/default/bin/validateStoneSysNodes --files --repair
+mount --stoneRoot / /sys stone
+# Define /home and /projects based on a composition of the /sys nodes
+mount --stoneRoot homeComposition.ston / home
+mount --stoneRoot projectComposition.ston / projects
+commit
+cd
+```
+
+The script is invoked whenever a new stone is created by the `$GS_HOME/bin/createTodeStone` bash shell script.
+The script is stored on disk at `$GS_HOME/tode/sys/default/client/scripts/setUpSys` and can be invoked at any time using the following tODE shell command:
+
+```
+script --script=setUpSys
+```
+
+If you wish to override the script to create additional artifacts in your tODE image, you may copy `$GS_HOME/tode/sys/default/client/scripts/setUpSys` to `$GS_HOME/tode/sys/local/client/scripts/` where you can make your edits.
+
+For additional documentation on the commands used in the script:
+
+```
+man mount
+/sys/default/bin/validateStoneSysNodes --help
+```
+
+
+---
+I might want to go into detaial about the files in the directories?
+
+```
++-$GS_HOME\
+ +-tode\
+ +-sys\
+ +-default\
+ +-bin\
+ +-client\
+ +-scripts\
+ +-windowLayout\
+ +-home\
+ +-pharo\
+ +-projects\
+ +-server\
+ +-scripts\
+ +-templates\
+ +-dirs.ston
+ +-homeComposition.ston
+ +-packages.ston
+ +-projectComposition.ston
+ +-repos.ston
+ +-local\
+ +-client\
+ +-descriptions\
+ +-scripts\
+ +-windowLayout\
+ +-git\
+ +-home\
+ +-pharo\
+ +-projects\
+ +-server\
+ +-scripts\
+ +-templates\
+ +-stones\
+ +-\
+ +-dirs.ston
+ +-home\
+ +-homeComposition.ston
+ +-packages.ston
+ +-projectComposition.ston
+ +-projects\
+ +-repos.ston
+```
+
+
+##Converting v0.0.2 project structure to v0.1.0
+
+1. install current gsDevKitHome project
+2. pull `tode:dev`, pull `gsDevKitHome:dev` ... work out update instructions ...
+3. finalize the converting/upgrading section of tODE release notes
+4. pass through gsdevkithome scripts updating for new stone creation
+
+```
+ updateClient # update client-side tODE
+ project load Tode # update server-side tODE
+ script --script=setUpSys # build tODE /sys structure
+```
+
+[1]: https://github.com/dalehenrich/tode/releases/tag/v0.0.2
+[3]: https://github.com/dalehenrich/metacello-work/blob/master/docs/MetacelloScriptingAPI.md#loading
+[6]: https://github.com/dalehenrich/tode/issues/110
+[7]: https://github.com/dalehenrich/tode/issues/106
+[8]: https://github.com/dalehenrich/tode/issues/123
+[9]: https://github.com/dalehenrich/tode/issues/125
+[10]: https://github.com/dalehenrich/tode/issues/124
+[11]: https://github.com/dalehenrich/tode/issues/129
+[12]: https://github.com/dalehenrich/tode/issues/5
+[13]: https://github.com/dalehenrich/tode/issues/130
+[14]: https://github.com/dalehenrich/tode/issues/143
+[15]: https://github.com/dalehenrich/tode/issues/135
+[16]: https://github.com/dalehenrich/tode/issues/147
+[17]: https://github.com/dalehenrich/tode/issues/100
+[18]: https://github.com/dalehenrich/tode/issues/148
+[19]: https://github.com/dalehenrich/tode/issues/149
+[20]: https://github.com/dalehenrich/tode/pull/150
+[21]: https://github.com/dalehenrich/tode/pull/140
+[22]: https://github.com/dalehenrich/tode/releases/tag/v0.1.0
+[23]: https://github.com/GsDevKit/gsDevKitHome
+[24]: https://github.com/GsDevKit/gsDevKitHome/blob/master/docs/releaseNotes/releaseNotes1.0.0.md
+[25]: https://github.com/GsDevKit
+[26]: http://downloads.gemtalksystems.com/docs/GemStone64/3.2.x/GS64-Topaz-3.2.pdf
+[27]: ../images/projectListMenu.png
+[28]: https://github.com/orgs/GsDevKit/people
+[29]: ../../../tode
+[30]: https://github.com/dalehenrich/tode
+[31]: https://github.com/dalehenrich/tode/pull/152
+[32]: https://github.com/dalehenrich/tode/pull/154
+[33]: https://github.com/dalehenrich/tode/pull/155
+[34]: https://github.com/dalehenrich/tode/pull/157
+[35]: https://help.github.com/articles/which-remote-url-should-i-use/
+[36]: https://help.github.com/articles/generating-ssh-keys
+[37]: https://developer.github.com/guides/using-ssh-agent-forwarding/
+[38]: http://git-scm.com/docs/gitcredentials
+[39]: http://git-scm.com/docs/git-credential-store
diff --git a/repository/BaselineOfTode.package/BaselineOfTode.class/instance/baseline..st b/repository/BaselineOfTode.package/BaselineOfTode.class/instance/baseline..st
index b3bbf8e44..402915064 100644
--- a/repository/BaselineOfTode.package/BaselineOfTode.class/instance/baseline..st
+++ b/repository/BaselineOfTode.package/BaselineOfTode.class/instance/baseline..st
@@ -4,7 +4,10 @@ baseline: spec
spec
for: #'common'
do: [
- spec baseline: 'Ston'.
+ spec
+ baseline: 'Ston'
+ with: [ spec repository: 'github://GsDevKit/ston:v0.9.?/repository' ];
+ yourself.
spec
package: 'Topez-Common-Core' with: [ spec requires: #('Ston') ];
package: 'Topez-Server-Core'
@@ -14,6 +17,7 @@ baseline: spec
yourself.
spec
group: 'Common Tests' with: #('Topez-Common-Tests');
+ group: 'Visualize' with: #();
yourself ].
spec
for: #'squeakCommon'
@@ -42,9 +46,6 @@ baseline: spec
spec
for: #'pharo'
do: [
- spec
- baseline: 'Ston'
- with: [ spec repository: 'github://dalehenrich/ston:pharo-0.5/repository' ].
spec
package: 'Topez-Pharo-Common';
package: 'Tode-Pharo-Server-Core'
@@ -58,12 +59,15 @@ baseline: spec
with: [ spec requires: #('GemTools-ClientGCI' 'Tode-Client-Common') ];
package: 'Tode-Client-Pharo'
with: [ spec requires: #('Tode-Client-Common') ];
+ package: 'Tode-Client-ServerBlocks'
+ with: [ spec requires: #('Tode-Client-Common') ];
package: 'Topez-ClientTravis-Tests'
with: [ spec requires: #('Topez-Client-GemStone') ];
yourself.
spec
group: 'default' with: #('GemStone');
- group: 'GemStone' with: #('Topez-Client-GemStone');
+ group: 'GemStone'
+ with: #('Topez-Client-GemStone' 'Tode-Client-ServerBlocks');
group: 'Pharo' with: #('Tode-Pharo-Server-Core' 'Tode-Client-Pharo');
group: 'GemStone Tests' with: #('Topez-ClientTravis-Tests');
group: 'GemStone Dev'
@@ -77,6 +81,29 @@ baseline: spec
package: 'Topez-Pharo-Common' with: [ spec includes: 'Tode-Pharo14' ];
package: 'Tode-Pharo14' with: [ spec requires: 'Topez-Pharo-Common' ];
yourself ].
+ spec
+ for: #(#'pharo3.x' #'pharo4.x')
+ do: [
+ spec
+ configuration: 'Roassal2'
+ with: [
+ spec
+ versionString: '1.5.2';
+ repository:
+ 'http://smalltalkhub.com/mc/ObjectProfile/Roassal2/main';
+ loads: #('Trachel' 'Roassal2') ];
+ yourself.
+ spec
+ package: 'Tode-Client-Roassal2'
+ with: [ spec requires: #('Tode-Client-ServerBlocks') ];
+ package: 'TPZ-Talk'
+ with: [
+ spec
+ requires: #('Ston' 'Roassal2');
+ repository:
+ 'http://smalltalkhub.com/mc/PierreChanson/TPZ-Talk/main' ];
+ group: 'Visualize' with: #('TPZ-Talk' 'Tode-Client-Roassal2');
+ yourself ].
spec
for: #'gemstone'
do: [
@@ -93,8 +120,6 @@ baseline: spec
spec
loads: #('AST-Core');
repository: 'github://dalehenrich/rb:dev/repository' ];
- baseline: 'Ston'
- with: [ spec repository: 'github://dalehenrich/ston:v0.5/repository' ];
baseline: 'FileTree'
with: [ spec repository: 'github://dalehenrich/filetree:gemstone2.4_dev/repository' ];
yourself.
@@ -165,6 +190,10 @@ baseline: spec
with: [ spec includes: 'Topez-Server-24x-Tests' ];
package: 'Topez-Server-24x-Tests'
with: [ spec requires: 'Topez-Server-Tests' ];
+ package: 'Tode-GemStone-Server-Core'
+ with: [ spec includes: #('Tode-GemStone-Core2x') ];
+ package: 'Tode-GemStone-Core2x'
+ with: [ spec requires: #('Tode-GemStone-Server-Core') ];
yourself ].
spec
for: #'gs3.x'
@@ -182,6 +211,10 @@ baseline: spec
with: [ spec includes: 'Topez-Server-31x-Tests' ];
package: 'Topez-Server-31x-Tests'
with: [ spec requires: 'Topez-Server-Tests' ];
+ package: 'Tode-GemStone-Server-Core'
+ with: [ spec includes: #('Tode-GemStone-Core3x') ];
+ package: 'Tode-GemStone-Core3x'
+ with: [ spec requires: #('Tode-GemStone-Server-Core') ];
yourself ].
spec
for: #'gs3.0.x'
@@ -218,6 +251,19 @@ baseline: spec
package: 'Topez-Server-32x-Core'
with: [ spec requires: 'Topez-Server-Core' ];
yourself ].
+ spec
+ for: #'gs3.3.x'
+ do: [
+ spec
+ package: 'Tode-GemStone-Server-Core'
+ with: [ spec includes: 'Topez-GemStone-Server-33x-Core' ];
+ package: 'Topez-GemStone-Server-33x-Core'
+ with: [ spec requires: 'Tode-GemStone-Server-Core' ];
+ package: 'Topez-Server-Core'
+ with: [ spec includes: 'Topez-Server-33x-Core' ];
+ package: 'Topez-Server-33x-Core'
+ with: [ spec requires: 'Topez-Server-Core' ];
+ yourself ].
spec
for: #(#'gs3.1.x' #'gs3.2.x' #'gs3.3.x')
do: [
@@ -236,4 +282,4 @@ baseline: spec
yourself.
spec
package: 'Topez-Common-Core'
- with: [ spec includes: 'Topez-MagLev-Core' ] ]
+ with: [ spec includes: 'Topez-MagLev-Core' ] ]
\ No newline at end of file
diff --git a/repository/BaselineOfTode.package/BaselineOfTode.class/methodProperties.json b/repository/BaselineOfTode.package/BaselineOfTode.class/methodProperties.json
index 862d7805c..e33e6603c 100644
--- a/repository/BaselineOfTode.package/BaselineOfTode.class/methodProperties.json
+++ b/repository/BaselineOfTode.package/BaselineOfTode.class/methodProperties.json
@@ -2,5 +2,5 @@
"class" : {
},
"instance" : {
- "baseline:" : "dkh 08/27/2014 14:03",
+ "baseline:" : "dkh 06/26/2015 14:21",
"initializeTools" : "dkh 06/06/2013 11:59" } }
diff --git a/repository/BaselineOfTode.package/monticello.meta/version b/repository/BaselineOfTode.package/monticello.meta/version
index 4973db0c3..69923deec 100644
--- a/repository/BaselineOfTode.package/monticello.meta/version
+++ b/repository/BaselineOfTode.package/monticello.meta/version
@@ -1 +1,45 @@
-(name 'BaselineOfTode-dkh.43' message 'Issue #174: use STON v0.5 for pharo branch (dalehenrich/ston pharo-0.5 tag)' id '9452b4df-b82c-4fab-82a6-d1de9d5e3536' date '06/23/2015' time '14:40:15' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.42' message 'Issue #174: use STON v0.5 for GemStone' id '8ccf1e71-ece2-4abc-b19a-0ccee48fb28b' date '06/19/2015' time '13:07:33' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.41' message 'start plying with todo' id 'b4f97e31-bc87-420f-9cb6-f1be83d092e4' date '08/27/2014' time '14:05:34' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.40' message 'take gemstone 3.3 into account' id 'c2550d2d-a446-48c7-8c68-6c7ddba46c27' date '07/16/2014' time '14:12:30' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.39' message 'add direct Metacello repository... locks will be used to control which GLASS1 and Metacello repositories are used during install' id '0f710bb9-3514-4073-a597-890d79bc13c1' date '07/05/2014' time '11:13:54' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.38' message 'tODE depends directly on GLASS1' id '14cccb58-b409-4353-9bac-e434d3845884' date '07/05/2014' time '11:03:27' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.37' message 'get git log for unloaded git projects .... record FileTree dependendency ... bump up number of git log entries retrieved' id 'c984d8c6-ac20-4759-baab-d1bd4f9747d8' date '07/03/2014' time '17:44:00' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.36' message '- working on fixing disappearing comments for workspaces (comment
no statements)
- adding RBWorkspaceNode as extenstion to RB AST...
- clean up workspace code so that it''s possible for workspace to
correctly access temps and args for debugger context
- debugger context browse class and browse full cleaned up' id '83f69515-5637-451f-ac5a-fa2701dd9cab' date '06/28/2014' time '15:58:17' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.35' message 'Issue #91: first cut at test browser tool ... hooked into `project list` at the moment ...
- new package for some tests that I''m using for
testing the test browser ... ' id '43081ca8-25cf-4b71-9ac4-1712b47d7f79' date '06/25/2014' time '16:18:52' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.34' message 'restore bedit tool to standard build ... ABSOLUTELY needed for `cls rename` ...' id 'd3f0fbc6-fdb2-472d-91d5-5713a2fa21d7' date '06/08/2014' time '14:19:01' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.33' message 'no longer doing an initializeBounds during load' id 'b803b4cd-d114-4c94-a1f1-efdac33acc18' date '06/02/2014' time '07:58:28' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.32' message 'add Topez-Server-3x-DebugTools and Topez-Server-30x-DebugTools packages to properly handle the different methods needed for debugging in the different versions of GemStone 3.x' id '3ba0584c-7d1c-44b2-8fa4-9ba166cacc48' date '05/24/2014' time '10:20:32' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.31' message 'populate Topez-Server-30x-Core package' id '94f824af-236e-49bd-b294-549b10c4fbc5' date '05/24/2014' time '09:57:06' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.30' message 'Not all of the defs in Topez-Server-31x-Core package were appropriate for 3.0
- move the defs appropriate for 3.0 to Topez-Server-3x-Core
(where they belonged in the first place)' id 'c7f3d9c1-b0c0-43d4-8094-a8d4fcc45ea4' date '05/24/2014' time '09:34:54' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.29' message 'another tweak to baseline for 3.0 along the way ...' id '62b6ed00-1316-4b21-9312-afdc45265fbf' date '05/23/2014' time '17:34:26' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.28' message 'attempting to get tODE to load in 3.0.x ... it''s been awhile' id '57fac765-63bc-4357-9906-9508dafa37d4' date '05/23/2014' time '17:27:16' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.27' message 'implement `bu remove` and adjust baseline to load Tode-GemStone-Server-Tests
- plus tests and man pages' id '6f056927-3535-4af3-8554-a86bfb28a123' date '05/13/2014' time '16:45:17' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.26' message 'initializeTools in baseline ... pick up loads from registration ... stub out `bu remove`' id '82c46cc6-fd1a-4b2a-bf4a-cb95baa3feb2' date '05/13/2014' time '16:24:01' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.25' message 'add #app3 and #app4 window locations positioned above #app1 and #app2
- created named window locations app3 and app4 for more options positioning "multi-pane functions"
- use the new named window locations for monticello browser functionality
- add date information to the "oneline" commit log displays
- arrange to call `TDTopezGemStoneClient initializeBounds` when Tode-Client-Common is loaded to ensure that we pick up new bounds in TDTopezClient class>>createBoundsDictionary' id 'af79e0e6-a1d3-4a88-a1c6-66f9340fbe51' date '05/13/2014' time '11:07:47' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.24' message 'fix typo' id '26b7c50e-0221-409a-b5f4-efeb047d57dd' date '05/05/2014' time '23:04:17' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.23' message '- fix up `eval` command ... different implementation between 2.4 and 3.x
- add Topez-Server-3x-Core package' id 'ca61cdf2-8418-4fe8-b718-da7214274d34' date '05/05/2014' time '22:16:34' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.22' message 'add Topez-Server-24x-Tests package with support for break command in 2.4' id '51f2d22c-cd45-448f-b4cc-2f703191f9e3' date '05/01/2014' time '04:07:58' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.21' message '- split TDBatchEditTool and friends into separate package ... this is a useful tool, but it needs to be re-written a bit before it becomes part of standard tool set ...' id '6965a4d8-bca2-4052-8dd0-33e3b1b46213' date '04/26/2014' time '08:26:22' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.20' message '- add packages Tode-GemStone-Server-Tests
- bu command tests' id '08fc820e-15b4-4b95-aa83-d12cc84e2ec1' date '04/20/2014' time '21:13:47' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.19' message 'new package added for 3.2 to differentiate between 3.2 and 3.2 methods' id '2cdc937f-8254-4c4b-8d44-ac797ee1f6c0' date '04/14/2014' time '13:13:42' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.18' message 'Issue #19: add Topez-Server-31x-Core package for Execblock>>blockSource ... porting to GemStone2.4 (again)' id '0276a661-fc9b-436b-a334-0877f969bc5f' date '01/20/2014' time '17:06:47' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.17' message 'split out GsProcess>>_localTrimStackToLevel: patch, since 3.2 has the correct implementation ... 3.1 needs patching' id '5b68c362-c2fa-4cb4-96e1-a0f1f0a1004a' date '01/11/2014' time '07:51:02' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.16' message 'slice off Topez-Server-Obsolete which contains TDLeafNodeBuilder and friends ... suspected to be obsolete (no refs) but want to do a two stage delete' id '8db5a30e-b477-4b23-bc58-d5cb0d08fa03' date '11/29/2013' time '11:37:12' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.15' message 'add a Pharo2.0 package' id '3ee26580-5ac3-4a58-9d71-08f595d945e3' date '10/04/2013' time '06:30:41' author 'dkh' ancestors ((name 'BaselineOfTode-.14' message 'implement support for Cypress repositories:
cym and cyp commands (save and diff)
sort mc dirty packages
new Topez-Server-CypressTools package
' id '6534b0c2-5a54-4d7a-a52b-36a7e173a6f7' date '08/31/2013' time '07:44:33' author '' ancestors ((name 'BaselineOfTode-dkh.13' message 'move postload doit to the platform packages...
' id 'a03d6bd4-8674-4ef5-ab5c-46963eb3fe93' date '06/06/2013' time '12:31:29' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.12' message 'Pharo client-only does not have TDStandardTool installed
' id '2944bf2a-70a6-4ee1-90e3-30b52253d631' date '06/06/2013' time '12:28:26' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.11' message 'have to create postLoadDoIt for tode to correctly initialize the tools...
' id '718a5bc8-0b56-478c-bb1f-7e81cfed7594' date '06/06/2013' time '11:40:18' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.10' message 'add Tode-Pharo-Server-Core
' id '33050721-4ad6-461f-9821-4907accd4a18' date '05/27/2013' time '17:51:31' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.9' message 'RB only required bu GemStone nly
' id '3cdda2f9-59bb-485b-a683-e28815b7520f' date '05/27/2013' time '17:44:51' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.8' message 'Topez-Server-Core should be loaded in pharo variant
' id '8a1ba06d-6676-4db5-8920-cbf8d9e927ae' date '05/27/2013' time '17:40:31' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.7' message 'add pharo packages
' id '079a57ea-d9b9-4534-a120-0c8e2708ca6e' date '05/26/2013' time '12:09:23' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.6' message 'fix up the dependencies ...
' id '7d3accd5-4a44-47b1-8fb6-3028c7cd0a58' date '05/26/2013' time '11:14:19' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.5' message 'fix baseline group defs
' id '672bf3f9-c838-45f4-84a0-b6e8ecd5b516' date '05/26/2013' time '10:39:44' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.4' message 'rename the groups
' id 'e447431d-58cc-4f86-ac31-6ac8f85350de' date '05/26/2013' time '10:37:06' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.3' message 'Issue #25 ... re-packagin in preparation for Pharo port
' id 'ee595605-8e70-43f0-9565-d7521f38c6e0' date '05/26/2013' time '10:30:42' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.2' message 'add beginnings of common tests and add initial client-side gci tests for use in running gci tests on Travis
' id '6fca6f75-7a3c-4425-9a91-a9c3d65ec71b' date '04/29/2013' time '12:36:11' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.1' message 'rename BaselineOfTopez to BaselineOfTode
' id '39251151-31b0-43ab-9f76-4f24e6c0abce' date '04/05/2013' time '12:09:59' author 'dkh' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())
\ No newline at end of file
+(name 'BaselineOfTode-dkh.61' message 'merged by GitFileTree-MergeDriver' id '266341ae-6a63-4cdb-8189-f1ea206d2a34' date '12 October 2015' time '7:58:31.951102 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.60' message 'With recent Ston work (https://github.com/GsDevKit/ston/issues/6) switch up baseline to same branch/tag for Ston ...' id '0c1b2fed-5bda-41a4-b839-3f0543e757f8' date '26 June 2015' time '3:52:43 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.59' message 'Issue #175: fix a typo and baseline error' id '5d0908d2-f245-4a9c-a372-3bc34fe8100c' date '25 June 2015' time '9:46:07 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.58' message 'Issue #175: major edit to start using the new protocol introduced in STON v0.9.? and pharo-0.9.1?. v0.9.1 and pharo-0.9.1 are on the gemstone_dev and pharo_dev branches so that travis tests can be run ... ' id '891b4809-310a-476d-b31e-89931ed46f6f' date '24 June 2015' time '5:23:18 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.57' message 'merged by GitFileTree-MergeDriver' id '01eb980e-bf27-4dbf-b9b5-07c545598068' date '22 June 2015' time '1:29:39 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.56' message 'Issue #175: use STON v0.9' id '274e6ce3-8977-474e-af14-57c15fbf95e1' date '22 June 2015' time '1:26:47 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.54' message 'starting to use gemstone_dev branch of STON which is the port of STON 0.9 to GemStone ... the tricky part is to change the encoding scheme' id 'f930d69f-f3cd-452e-aa11-3c6f2aa4964e' date '19 June 2015' time '3:05:15 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.53' message 'add Topez-Server-33x-Core package
+' id 'c89efa81-c3e9-4a43-b07c-949002f3c2e0' date '18 June 2015' time '4:34:24 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.52' message 'Fix a baseline error' id '5256f562-5a9b-4755-91e2-72cd7bc594f3' date '15 June 2015' time '11:22:43 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.51' message 'support the new profiling features in GemStone 3.3:
+ - new package and tool class (TDProfileTool33
+ - implement smalltalk api in TDProfileTool
+ - add options to selected TDProfileTool commands
+ - intial implementation of new 3.3 features' id '871c2c68-874a-4855-bbb8-f821d7faefc3' date '11 June 2015' time '10:06:21 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.50' message 'fix baseline error' id 'c5c58ea0-7632-4426-8c4d-67ccd72fec96' date '12 April 2015' time '9:17:02 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.49' message 'add TDServerBlockWorkspace ... needed to keep the session alive while doing work ... ''shell'' workspace variable holds onto the shell for the desired session ... close window, closes session ... Roassal menu opens a TDServerBlockWorkspace' id 'ba054e53-3d58-4df0-a347-c36484315a11' date '12 April 2015' time '8:31:48 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.48' message 'Tode-Client-Roassal2 package is still needed ... workspac e needed to hold onto the shell instance ... login/logout sematics and window management ...' id 'dbc42612-b98c-4638-b495-6d559eac8807' date '12 April 2015' time '7:39:45 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.46' message 'new package Tode-Client-Roassal2 for obvious reasons' id '332a6ea7-7d88-4713-8bf3-51451509f84f' date '9 April 2015' time '6:29:29 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.45' message 'fix up the Roassal2 ref' id '18365e6a-de9b-460d-9ba2-4a0918c0a443' date '9 April 2015' time '4:46:13 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.44' message 'add Roassal and pharo4.0 support (experimental Pharo4.0)' id '2aa0d825-4018-4b99-9148-47ccba3c12f9' date '9 April 2015' time '4:36:42 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.43' message 'Switch Ston repository to GsDevKit/Ston' id '1199f608-e91f-49c1-8c85-bdccbf4a6404' date '21 November 2014' time '9:12:45 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.42' message 'fixing `bu` command for gmestone 2.4.x' id 'b881341f-1438-4a6f-bd7f-c2364816cd42' date '20 November 2014' time '11:24:37 am' author 'dkh' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(name 'BaselineOfTode-dkh.42' message 'Issue #174: use STON v0.5 for GemStone' id '8ccf1e71-ece2-4abc-b19a-0ccee48fb28b' date '19 June 2015' time '1:07:33 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.41' message 'start plying with todo' id 'b4f97e31-bc87-420f-9cb6-f1be83d092e4' date '27 August 2014' time '2:05:34 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.40' message 'take gemstone 3.3 into account' id 'c2550d2d-a446-48c7-8c68-6c7ddba46c27' date '16 July 2014' time '2:12:30 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.39' message 'add direct Metacello repository... locks will be used to control which GLASS1 and Metacello repositories are used during install' id '0f710bb9-3514-4073-a597-890d79bc13c1' date '5 July 2014' time '11:13:54 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.38' message 'tODE depends directly on GLASS1' id '14cccb58-b409-4353-9bac-e434d3845884' date '5 July 2014' time '11:03:27 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.37' message 'get git log for unloaded git projects .... record FileTree dependendency ... bump up number of git log entries retrieved' id 'c984d8c6-ac20-4759-baab-d1bd4f9747d8' date '3 July 2014' time '5:44 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.36' message '- working on fixing disappearing comments for workspaces (comment
+ no statements)
+- adding RBWorkspaceNode as extenstion to RB AST...
+- clean up workspace code so that it''s possible for workspace to
+ correctly access temps and args for debugger context
+- debugger context browse class and browse full cleaned up' id '83f69515-5637-451f-ac5a-fa2701dd9cab' date '28 June 2014' time '3:58:17 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.35' message 'Issue #91: first cut at test browser tool ... hooked into `project list` at the moment ...
+
+- new package for some tests that I''m using for
+ testing the test browser ... ' id '43081ca8-25cf-4b71-9ac4-1712b47d7f79' date '25 June 2014' time '4:18:52 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.34' message 'restore bedit tool to standard build ... ABSOLUTELY needed for `cls rename` ...' id 'd3f0fbc6-fdb2-472d-91d5-5713a2fa21d7' date '8 June 2014' time '2:19:01 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.33' message 'no longer doing an initializeBounds during load' id 'b803b4cd-d114-4c94-a1f1-efdac33acc18' date '2 June 2014' time '7:58:28 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.32' message 'add Topez-Server-3x-DebugTools and Topez-Server-30x-DebugTools packages to properly handle the different methods needed for debugging in the different versions of GemStone 3.x' id '3ba0584c-7d1c-44b2-8fa4-9ba166cacc48' date '24 May 2014' time '10:20:32 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.31' message 'populate Topez-Server-30x-Core package' id '94f824af-236e-49bd-b294-549b10c4fbc5' date '24 May 2014' time '9:57:06 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.30' message 'Not all of the defs in Topez-Server-31x-Core package were appropriate for 3.0
+
+- move the defs appropriate for 3.0 to Topez-Server-3x-Core
+ (where they belonged in the first place)' id 'c7f3d9c1-b0c0-43d4-8094-a8d4fcc45ea4' date '24 May 2014' time '9:34:54 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.29' message 'another tweak to baseline for 3.0 along the way ...' id '62b6ed00-1316-4b21-9312-afdc45265fbf' date '23 May 2014' time '5:34:26 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.28' message 'attempting to get tODE to load in 3.0.x ... it''s been awhile' id '57fac765-63bc-4357-9906-9508dafa37d4' date '23 May 2014' time '5:27:16 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.27' message 'implement `bu remove` and adjust baseline to load Tode-GemStone-Server-Tests
+
+- plus tests and man pages' id '6f056927-3535-4af3-8554-a86bfb28a123' date '13 May 2014' time '4:45:17 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.26' message 'initializeTools in baseline ... pick up loads from registration ... stub out `bu remove`' id '82c46cc6-fd1a-4b2a-bf4a-cb95baa3feb2' date '13 May 2014' time '4:24:01 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.25' message 'add #app3 and #app4 window locations positioned above #app1 and #app2
+
+- created named window locations app3 and app4 for more options positioning "multi-pane functions"
+- use the new named window locations for monticello browser functionality
+- add date information to the "oneline" commit log displays
+- arrange to call `TDTopezGemStoneClient initializeBounds` when Tode-Client-Common is loaded to ensure that we pick up new bounds in TDTopezClient class>>createBoundsDictionary' id 'af79e0e6-a1d3-4a88-a1c6-66f9340fbe51' date '13 May 2014' time '11:07:47 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.24' message 'fix typo' id '26b7c50e-0221-409a-b5f4-efeb047d57dd' date '5 May 2014' time '11:04:17 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.23' message '- fix up `eval` command ... different implementation between 2.4 and 3.x
+- add Topez-Server-3x-Core package' id 'ca61cdf2-8418-4fe8-b718-da7214274d34' date '5 May 2014' time '10:16:34 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.22' message 'add Topez-Server-24x-Tests package with support for break command in 2.4' id '51f2d22c-cd45-448f-b4cc-2f703191f9e3' date '1 May 2014' time '4:07:58 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.21' message '- split TDBatchEditTool and friends into separate package ... this is a useful tool, but it needs to be re-written a bit before it becomes part of standard tool set ...' id '6965a4d8-bca2-4052-8dd0-33e3b1b46213' date '26 April 2014' time '8:26:22 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.20' message '- add packages Tode-GemStone-Server-Tests
+- bu command tests' id '08fc820e-15b4-4b95-aa83-d12cc84e2ec1' date '20 April 2014' time '9:13:47 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.19' message 'new package added for 3.2 to differentiate between 3.2 and 3.2 methods' id '2cdc937f-8254-4c4b-8d44-ac797ee1f6c0' date '14 April 2014' time '1:13:42 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.18' message 'Issue #19: add Topez-Server-31x-Core package for Execblock>>blockSource ... porting to GemStone2.4 (again)' id '0276a661-fc9b-436b-a334-0877f969bc5f' date '20 January 2014' time '5:06:47 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.17' message 'split out GsProcess>>_localTrimStackToLevel: patch, since 3.2 has the correct implementation ... 3.1 needs patching' id '5b68c362-c2fa-4cb4-96e1-a0f1f0a1004a' date '11 January 2014' time '7:51:02 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.16' message 'slice off Topez-Server-Obsolete which contains TDLeafNodeBuilder and friends ... suspected to be obsolete (no refs) but want to do a two stage delete' id '8db5a30e-b477-4b23-bc58-d5cb0d08fa03' date '29 November 2013' time '11:37:12 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.15' message 'add a Pharo2.0 package' id '3ee26580-5ac3-4a58-9d71-08f595d945e3' date '4 October 2013' time '6:30:41 am' author 'dkh' ancestors ((name 'BaselineOfTode-.14' message 'implement support for Cypress repositories:
+
+ cym and cyp commands (save and diff)
+ sort mc dirty packages
+
+new Topez-Server-CypressTools package
+' id '6534b0c2-5a54-4d7a-a52b-36a7e173a6f7' date '31 August 2013' time '7:44:33 am' author '' ancestors ((name 'BaselineOfTode-dkh.13' message 'move postload doit to the platform packages...
+' id 'a03d6bd4-8674-4ef5-ab5c-46963eb3fe93' date '6 June 2013' time '12:31:29 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.12' message 'Pharo client-only does not have TDStandardTool installed
+' id '2944bf2a-70a6-4ee1-90e3-30b52253d631' date '6 June 2013' time '12:28:26 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.11' message 'have to create postLoadDoIt for tode to correctly initialize the tools...
+' id '718a5bc8-0b56-478c-bb1f-7e81cfed7594' date '6 June 2013' time '11:40:18 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.10' message 'add Tode-Pharo-Server-Core
+' id '33050721-4ad6-461f-9821-4907accd4a18' date '27 May 2013' time '5:51:31 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.9' message 'RB only required bu GemStone nly
+' id '3cdda2f9-59bb-485b-a683-e28815b7520f' date '27 May 2013' time '5:44:51 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.8' message 'Topez-Server-Core should be loaded in pharo variant
+' id '8a1ba06d-6676-4db5-8920-cbf8d9e927ae' date '27 May 2013' time '5:40:31 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.7' message 'add pharo packages
+' id '079a57ea-d9b9-4534-a120-0c8e2708ca6e' date '26 May 2013' time '12:09:23 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.6' message 'fix up the dependencies ...
+' id '7d3accd5-4a44-47b1-8fb6-3028c7cd0a58' date '26 May 2013' time '11:14:19 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.5' message 'fix baseline group defs
+' id '672bf3f9-c838-45f4-84a0-b6e8ecd5b516' date '26 May 2013' time '10:39:44 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.4' message 'rename the groups
+' id 'e447431d-58cc-4f86-ac31-6ac8f85350de' date '26 May 2013' time '10:37:06 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.3' message 'Issue #25 ... re-packagin in preparation for Pharo port
+' id 'ee595605-8e70-43f0-9565-d7521f38c6e0' date '26 May 2013' time '10:30:42 am' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.2' message 'add beginnings of common tests and add initial client-side gci tests for use in running gci tests on Travis
+' id '6fca6f75-7a3c-4425-9a91-a9c3d65ec71b' date '29 April 2013' time '12:36:11 pm' author 'dkh' ancestors ((name 'BaselineOfTode-dkh.1' message 'rename BaselineOfTopez to BaselineOfTode
+' id '39251151-31b0-43ab-9f76-4f24e6c0abce' date '5 April 2013' time '12:09:59 pm' author 'dkh' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(name 'BaselineOfTode-dkh.43' message 'Issue #174: use STON v0.5 for pharo branch (dalehenrich/ston pharo-0.5 tag)' id '9452b4df-b82c-4fab-82a6-d1de9d5e3536' date '23 June 2015' time '2:40:15 pm' author 'dkh' ancestors ((id '8ccf1e71-ece2-4abc-b19a-0ccee48fb28b')) stepChildren ())) stepChildren ())
\ No newline at end of file
diff --git a/repository/GemTools-ClientPlatform.package/GciSession.extension/instance/nbPollForResult..st b/repository/GemTools-ClientPlatform.package/GciSession.extension/instance/nbPollForResult..st
index 051b75fa9..35fc85182 100644
--- a/repository/GemTools-ClientPlatform.package/GciSession.extension/instance/nbPollForResult..st
+++ b/repository/GemTools-ClientPlatform.package/GciSession.extension/instance/nbPollForResult..st
@@ -23,32 +23,33 @@ nbPollForResult: hardBreakSent
Transcript
cr;
show: 'interrupted: ' , hardBreakSent printString.
- GciUserInterrupt signal ] ] ].
+ GciUserInterrupt signal.
+ GciUserInterruptHandler
+ reset;
+ arm ] ] ].
^ assoc value ]
on: GciUserInterrupt
do: [ :ex |
Transcript
cr;
show: 'interrupt signalled'.
- false
+ debuggerChoice := UIManager default
+ chooseFrom: #('Interrupt GemStone/S' 'Interrupt Client' 'Ignore Interrupt')
+ title: 'User Interrupt Detected'.
+ debuggerChoice = 2
ifTrue: [
- debuggerChoice := UIManager default
- chooseFrom: #('Interrupt GemStone/S' 'Interrupt Squeak' 'Ignore Interrupt')
- title: 'User Interrupt Detected'.
- debuggerChoice = 2
- ifTrue: [
- [
- "interrupte Squeak"
- terminated := true.
- Processor activeProcess debugWithTitle: 'User Interrupt'.
- terminated := false ]
- ensure: [
- terminated
- ifTrue: [ [ self terminateCurrentNbCall ] fork ] ] ].
- debuggerChoice = 3
- ifTrue: [
- "Ignore interrupt"
- ex resume ] ].
+ [
+ "interrupte client"
+ terminated := true.
+ Processor activeProcess debugWithTitle: 'User Interrupt'.
+ terminated := false ]
+ ensure: [
+ terminated
+ ifTrue: [ [ self terminateCurrentNbCall ] fork ] ] ].
+ debuggerChoice = 3
+ ifTrue: [
+ "Ignore interrupt"
+ ex resume ].
self hardBreak. "Interrupt GemStone/S"
Transcript
cr;
diff --git a/repository/GemTools-ClientPlatform.package/GciSession.extension/instance/nbPollForResult.st b/repository/GemTools-ClientPlatform.package/GciSession.extension/instance/nbPollForResult.st
index 30e70fd76..473d8f51c 100644
--- a/repository/GemTools-ClientPlatform.package/GciSession.extension/instance/nbPollForResult.st
+++ b/repository/GemTools-ClientPlatform.package/GciSession.extension/instance/nbPollForResult.st
@@ -1,4 +1,7 @@
*gemtools-clientplatform
nbPollForResult
- GciUserInterruptHandler reset.
- ^self nbPollForResult: false
+ GciUserInterruptHandler
+ reset;
+ arm.
+ [ ^ self nbPollForResult: false ]
+ ensure: [ GciUserInterruptHandler disarm ]
\ No newline at end of file
diff --git a/repository/GemTools-ClientPlatform.package/GciSession.extension/methodProperties.json b/repository/GemTools-ClientPlatform.package/GciSession.extension/methodProperties.json
index d3878ae89..46d0766ac 100644
--- a/repository/GemTools-ClientPlatform.package/GciSession.extension/methodProperties.json
+++ b/repository/GemTools-ClientPlatform.package/GciSession.extension/methodProperties.json
@@ -2,5 +2,5 @@
"class" : {
},
"instance" : {
- "nbPollForResult" : "dkh 12/18/2013 08:46",
- "nbPollForResult:" : "dkh 12/18/2013 08:46" } }
+ "nbPollForResult" : "dkh 12/27/2014 20:46",
+ "nbPollForResult:" : "dkh 12/27/2014 21:11" } }
diff --git a/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/class/arm.st b/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/class/arm.st
new file mode 100644
index 000000000..e1c6f0f62
--- /dev/null
+++ b/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/class/arm.st
@@ -0,0 +1,3 @@
+as yet unclassified
+arm
+ Armed := true
\ No newline at end of file
diff --git a/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/class/disarm.st b/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/class/disarm.st
new file mode 100644
index 000000000..80109ad4b
--- /dev/null
+++ b/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/class/disarm.st
@@ -0,0 +1,3 @@
+as yet unclassified
+disarm
+ Armed := false
\ No newline at end of file
diff --git a/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/class/initialize.st b/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/class/initialize.st
index c9ed59d10..6da1ed9ee 100644
--- a/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/class/initialize.st
+++ b/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/class/initialize.st
@@ -2,5 +2,6 @@ as yet unclassified
initialize
"self initialize"
+ self install.
Smalltalk addToStartUpList: self.
self startUp: true
\ No newline at end of file
diff --git a/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/class/install.st b/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/class/install.st
index 18a4aec22..879de85cc 100644
--- a/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/class/install.st
+++ b/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/class/install.st
@@ -1,5 +1,9 @@
as yet unclassified
install
- "self install"
+ "self install"
- self new registerIn: InputEventFetcher default
\ No newline at end of file
+ InputEventFetcher default eventHandlers copy
+ do: [ :handler |
+ (handler isKindOf: UserInterruptHandler)
+ ifTrue: [ handler unregister ] ].
+ self new registerIn: InputEventFetcher default
\ No newline at end of file
diff --git a/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/class/reset.st b/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/class/reset.st
index 42377d392..aaaff17de 100644
--- a/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/class/reset.st
+++ b/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/class/reset.st
@@ -1,3 +1,6 @@
as yet unclassified
reset
- Interrupted := false
\ No newline at end of file
+ "self reset"
+
+ Interrupted := false.
+ Armed := false
\ No newline at end of file
diff --git a/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/instance/handleUserInterrupt.st b/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/instance/handleUserInterrupt.st
index fd213060f..00eb73a84 100644
--- a/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/instance/handleUserInterrupt.st
+++ b/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/instance/handleUserInterrupt.st
@@ -1,7 +1,8 @@
private
handleUserInterrupt
- "This will be called from the event-fetcher process.
+ "This will be called from the event-fetcher process.
Assume no system-vital processes have a lower priority than this, and are thus ok to interrupt"
- Interrupted := true.
- "super handleUserInterrupt"
\ No newline at end of file
+ Interrupted := true.
+ Armed
+ ifFalse: [ super handleUserInterrupt ]
\ No newline at end of file
diff --git a/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/methodProperties.json b/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/methodProperties.json
index e94693e60..88a6b0af3 100644
--- a/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/methodProperties.json
+++ b/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/methodProperties.json
@@ -1,9 +1,11 @@
{
"class" : {
- "initialize" : "dkh 12/17/2013 21:57",
- "install" : "dkh 3/25/2013 21:24",
+ "arm" : "dkh 12/27/2014 20:46",
+ "disarm" : "dkh 12/27/2014 20:31",
+ "initialize" : "dkh 12/27/2014 20:44",
+ "install" : "dkh 12/27/2014 20:37",
"interrupted" : "dkh 3/26/2013 07:57",
- "reset" : "dkh 3/26/2013 07:58",
+ "reset" : "dkh 12/27/2014 20:45",
"startUp:" : "dkh 12/17/2013 22:25" },
"instance" : {
- "handleUserInterrupt" : "dkh 12/17/2013 22:19" } }
+ "handleUserInterrupt" : "dkh 12/27/2014 20:41" } }
diff --git a/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/properties.json b/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/properties.json
index 0aa56a240..d8f548886 100644
--- a/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/properties.json
+++ b/repository/GemTools-ClientPlatform.package/GciUserInterruptHandler.class/properties.json
@@ -3,6 +3,7 @@
"classinstvars" : [
],
"classvars" : [
+ "Armed",
"Interrupted" ],
"commentStamp" : "",
"instvars" : [
diff --git a/repository/GemTools-ClientPlatform.package/monticello.meta/version b/repository/GemTools-ClientPlatform.package/monticello.meta/version
index 61ff8cd10..6d99904b6 100644
--- a/repository/GemTools-ClientPlatform.package/monticello.meta/version
+++ b/repository/GemTools-ClientPlatform.package/monticello.meta/version
@@ -1 +1 @@
-(name 'GemTools-ClientPlatform-dkh.12' message 'Issue #62: tweak interrupt handler reset logic' id 'ef5c5262-2d2a-4755-998b-9c7ab6e93326' date '18 December 2013' time '8:47:23.88 am' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.11' message 'fine tune the interrupt handling/initialization logic' id '19f95bff-e74b-42bd-9153-6e1ce6e37533' date '17 December 2013' time '10:25:53.776 pm' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.10' message 'get rid of the 1/2 second per round trip delay...' id 'f0738a9c-373c-4229-94ce-c4731a72cc2d' date '16 December 2013' time '8:16:28.231 pm' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.9' message 'take out some of the unnecessary logging' id '181a223d-b4c4-4010-915c-1fee7b060825' date '16 December 2013' time '3:11:53.505 pm' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.8' message 'Issue #62: gearing up to address this problem . some GCI tracing and a little refactoring ...' id '38b26f85-0cf4-48a1-b30b-29695de4c27f' date '16 December 2013' time '2:26:01.638 pm' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.7' message 'put worldDisplay in a block ... smooth performance' id '7ecd9007-672a-43ca-9a71-95733a08108f' date '28 March 2013' time '8:07:16.273 pm' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.6' message 'don''t need to be flashing wildly ... an update per second will do' id '06fabb47-de32-44d2-86b0-c400d630eba4' date '26 March 2013' time '10:33:25.322 am' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.5' message 'interrupt logic is functional ...' id 'c5734b32-b510-4cd6-868a-f4bed1ed46c4' date '26 March 2013' time '8:05:23.37 am' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.4' message 'getting started on userinterrupt handler ... not quite working correctly ... methinks there are two interrupt handlers installed (yeah that makes sense) ... also the GciInterrupt class is only wrapping the VERY SHORT sleep ... and not wrapping the larger loop ...' id '65ad6149-a9c8-4d0e-801f-08ad2b4e72da' date '25 March 2013' time '9:37:22.15 pm' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.3' message 'enable World displayWorldSafely during nbSleep: so that transcript updates are visible as they happen' id '64ea6f93-060b-4200-b8b5-530d3bed4264' date '25 March 2013' time '8:58:19.622 pm' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.2' message 'make lint happy' id '08000000-1508-120f-1508-120f14000000' date '29 October 2012' time '11:10:27.62 am' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.1' message 'initial version' id '43ea8521-ba5e-4699-9a78-d9c6d060291c' date '26 September 2012' time '3:19:01 pm' author 'dkh' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())
\ No newline at end of file
+(name 'GemTools-ClientPlatform-dkh.14' message 'tweak the process interrupt logic ...' id '1dfa5eed-e58b-4ba7-9cae-ec689de9ee54' date '27 December 2014' time '9:12:14.664842 pm' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.13' message 'straighten out client process iterrupt logic (FINALLY!)' id '81a58fa5-da79-4665-8d10-20a037f15064' date '27 December 2014' time '9:03:36.204042 pm' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.12' message 'Issue #62: tweak interrupt handler reset logic' id 'ef5c5262-2d2a-4755-998b-9c7ab6e93326' date '18 December 2013' time '8:47:23.88 am' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.11' message 'fine tune the interrupt handling/initialization logic' id '19f95bff-e74b-42bd-9153-6e1ce6e37533' date '17 December 2013' time '10:25:53.776 pm' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.10' message 'get rid of the 1/2 second per round trip delay...' id 'f0738a9c-373c-4229-94ce-c4731a72cc2d' date '16 December 2013' time '8:16:28.231 pm' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.9' message 'take out some of the unnecessary logging' id '181a223d-b4c4-4010-915c-1fee7b060825' date '16 December 2013' time '3:11:53.505 pm' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.8' message 'Issue #62: gearing up to address this problem . some GCI tracing and a little refactoring ...' id '38b26f85-0cf4-48a1-b30b-29695de4c27f' date '16 December 2013' time '2:26:01.638 pm' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.7' message 'put worldDisplay in a block ... smooth performance' id '7ecd9007-672a-43ca-9a71-95733a08108f' date '28 March 2013' time '8:07:16.273 pm' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.6' message 'don''t need to be flashing wildly ... an update per second will do' id '06fabb47-de32-44d2-86b0-c400d630eba4' date '26 March 2013' time '10:33:25.322 am' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.5' message 'interrupt logic is functional ...' id 'c5734b32-b510-4cd6-868a-f4bed1ed46c4' date '26 March 2013' time '8:05:23.37 am' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.4' message 'getting started on userinterrupt handler ... not quite working correctly ... methinks there are two interrupt handlers installed (yeah that makes sense) ... also the GciInterrupt class is only wrapping the VERY SHORT sleep ... and not wrapping the larger loop ...' id '65ad6149-a9c8-4d0e-801f-08ad2b4e72da' date '25 March 2013' time '9:37:22.15 pm' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.3' message 'enable World displayWorldSafely during nbSleep: so that transcript updates are visible as they happen' id '64ea6f93-060b-4200-b8b5-530d3bed4264' date '25 March 2013' time '8:58:19.622 pm' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.2' message 'make lint happy' id '08000000-1508-120f-1508-120f14000000' date '29 October 2012' time '11:10:27.62 am' author 'dkh' ancestors ((name 'GemTools-ClientPlatform-dkh.1' message 'initial version' id '43ea8521-ba5e-4699-9a78-d9c6d060291c' date '26 September 2012' time '3:19:01 pm' author 'dkh' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())
\ No newline at end of file
diff --git a/repository/GemTools-ClientSession.package/GciSession.class/instance/getNbResult.st b/repository/GemTools-ClientSession.package/GciSession.class/instance/getNbResult.st
index 4b3ab5f83..44240b4be 100644
--- a/repository/GemTools-ClientSession.package/GciSession.class/instance/getNbResult.st
+++ b/repository/GemTools-ClientSession.package/GciSession.class/instance/getNbResult.st
@@ -30,6 +30,8 @@ getNbResult
ifTrue: [
(actionArgs at: 1) == #'debug'
ifTrue: [ ^ self debuggerRequested: (actionArgs at: 2) ].
+ (actionArgs at: 1) == #'logStack'
+ ifTrue: [ ^ self logStackRequested: (actionArgs at: 2) ].
(actionArgs at: 1) == #'gciMainTerminated'
ifTrue: [
^ actionArgs at: 2 ].
diff --git a/repository/GemTools-ClientSession.package/GciSession.class/instance/logStackRequested..st b/repository/GemTools-ClientSession.package/GciSession.class/instance/logStackRequested..st
new file mode 100644
index 000000000..95d6a938d
--- /dev/null
+++ b/repository/GemTools-ClientSession.package/GciSession.class/instance/logStackRequested..st
@@ -0,0 +1,3 @@
+private gci calls
+logStackRequested: result
+ ^ result
\ No newline at end of file
diff --git a/repository/GemTools-ClientSession.package/GciSession.class/methodProperties.json b/repository/GemTools-ClientSession.package/GciSession.class/methodProperties.json
index 1e69e3397..d9c3adc96 100644
--- a/repository/GemTools-ClientSession.package/GciSession.class/methodProperties.json
+++ b/repository/GemTools-ClientSession.package/GciSession.class/methodProperties.json
@@ -25,7 +25,7 @@
"gemNRS:" : "JGF 1/31/2007 14:57",
"gemType" : "JGF 4/2/2007 15:38",
"getAndClearLastError" : "dkh 10/1/2007 13:47",
- "getNbResult" : "dkh 1/11/2014 16:08",
+ "getNbResult" : "dkh 3/16/2015 15:59",
"getNbResultAsBoolean" : "JGF 4/6/2007 15:00",
"getNbResultAsOop" : "dkh 3/29/2013 13:54",
"getNbResultAsString" : "dkh 3/29/2013 13:51",
@@ -37,6 +37,7 @@
"isCallInProgress" : "dkh 1/5/2013 11:39",
"isValid" : "dkh 8/16/2007 13:39",
"library" : "JGF 4/2/2007 11:37",
+ "logStackRequested:" : "dkh 3/16/2015 15:48",
"login:" : "jgf 4/2/2008 13:39",
"login:osUser:osPassword:" : "dkh 1/10/2013 08:12",
"logout" : "dkh 5/5/2013 09:03",
diff --git a/repository/GemTools-ClientSession.package/monticello.meta/version b/repository/GemTools-ClientSession.package/monticello.meta/version
index 83e8949ea..c1fcaf1e0 100644
--- a/repository/GemTools-ClientSession.package/monticello.meta/version
+++ b/repository/GemTools-ClientSession.package/monticello.meta/version
@@ -1 +1 @@
-(name 'GemTools-ClientSession-dkh.62' message 'converting to use TDSessionDescription instead of OGCustomSessionDescription.
- TDSessionDescription is passed to server so that
the fields (backupDirectory, serverGitRoot
serverTodeHome) can be specified in the session
description and used on the server
- for now server will request the session description
to make upgrading easier (if client updated before
server, server won''t know what to do with the
session description)' id '47424c90-e743-47cd-a0f8-6dca14e7dba3' date '28 May 2014' time '7:23:55.835 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.61' message 'add some client-side error handling for closing windows when the sesssion has disconnected' id '1c3e36b7-4def-4f52-9897-6a2ebf1313ff' date '7 May 2014' time '8:24:11.083 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.60' message 'checkpoint:
- fine tune session description handling
- todeHome will be image level global to simplify
doits ...
- define 4 workspace windows for setting up client
side environment ... part of getting started
experience
- fine tune window properties handling
- testLogin: and testWindowLayout: and `script` command
are start of the batching facilities...' id '72a30bba-7759-446f-8e48-8dfb9a419800' date '23 March 2014' time '11:43:19.801 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.59' message 'checkpoint ... eliminating the need to any custom workspace in Pharo image ...just console workspace:
- add OBCustomSessionDescription class>>seaside with default session
- `help` writeup
- `whatsNew` command
- `sessionDescription` command (restored)
- `script` command
- `TDShell open` support' id '75b78733-a40f-4e45-86bd-82a2dd878184' date '22 March 2014' time '6:49:38.586 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.58' message 'checkpoint:
- support creating and using serialized session descriptions
- cleanup built-in support
- add `builtIns` command
- start work on improving the `getting started` experience
- start work on `help` and `updateClient` commands' id '97533bee-2320-46d5-a713-0c32ca01f238' date '22 March 2014' time '12:57:40.57 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.57' message 'clean up ... attempting to step over ''Transcript show''' id '47586912-6542-4771-928f-bbab4c36b13b' date '11 January 2014' time '4:27:26.24 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.56' message 'Issue #62: gearing up to address this problem . some GCI tracing and a little refactoring ...' id 'ad1d7949-1518-4a4b-8ccc-d68de0d35bdc' date '16 December 2013' time '2:26:14.43 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.55' message 'update OGCustomSessionDescription so that editTemplate includes the new fields added for tODE...' id 'd8831a3e-fd66-416e-b14d-cbbc689cbd1b' date '8 December 2013' time '3:03:08.893 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.54' message 'add tODE built-in commmand `installTode` that performs install/upgrade against remote GemStone repository' id 'ae771e10-5c42-4aa6-a30d-b3cf372ae49c' date '12 November 2013' time '10:38:20.063 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.53' message 'clean up some issues involving terminating processes correctly when debugger is closed ' id '270cc438-a2b7-4b34-b0a7-af0dd6da7341' date '15 July 2013' time '2:26:36.231 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.52' message 'need to terminate the process when we abort error handler' id '44cada4e-f65e-4289-b2e6-bb96c52da349' date '13 July 2013' time '1:03:07.638 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.51' message 'improve logout behavior after image restart' id 'edf49b9c-c312-47bd-a4d3-b256dff1d229' date '5 May 2013' time '9:06:47.759 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.50' message 'better error handling when remote stone/gem is gone' id 'fee7d2b9-0dce-4e75-85bd-ae85495a4e3a' date '2 April 2013' time '9:33:57.792 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.49' message 'continue needs to allow break points to fire' id 'be827a26-3ea6-48c6-a68a-55b4f65c38fb' date '1 April 2013' time '9:26:05.712 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.48' message 'some more tweaks and bugfixes' id 'c0bad742-5f34-4945-887b-fe84680fd5a6' date '1 April 2013' time '7:31:00.907 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.47' message 'removed dependence upon the proxy errors/notifications' id '0c36962b-c505-426d-a74e-2faada3192aa' date '29 March 2013' time '2:15:26.281 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.46' message 'interrupt logic is functional ...' id 'ab3382e6-a04f-4b2d-89b8-7c719d9a4594' date '26 March 2013' time '8:05:35.093 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.45' message 'define sessions for use on my mac to connect to office stones (3.1.0.1, r_ 3.1.0.3 and k_ 3.2.0)
' id 'a1486017-13a4-451b-970c-befbdbdc3563' date '14 March 2013' time '3:17:24.588 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.44' message 'add gemstoneVersion gciLibraryName adornmentColor to OGCustomSessionDescription ... the implication is that we can now connect to multiple gemstone versions from same image (not at same time .... need to exit one shell and launch another for it to work) ... still pretty nice capability ... see sessionDescription* messages in TDTopezClient for examples ... simply need to copy the gci libraries into the image directory (on linux) ... not tested on mac ... yet
' id 'c9293166-4081-4232-b0e4-4fcd29c7dd8e' date '14 March 2013' time '12:12:48.652 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.43' message 'add environmentId to a bunch of calls ... although environmentId probably won''t help indirect development
' id 'aed6268e-89d4-44aa-b7f3-d58d7ca25ba2' date '24 February 2013' time '9:52:59.888 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.42' message 'open debugger when DEBUG button pressed
' id 'f0346628-1bf1-43ba-9bd5-366ec034808c' date '4 February 2013' time '3:03:23.512 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.41' message 'missed a spot
' id '024b2818-4e19-4098-af34-ec88b179d7b9' date '27 January 2013' time '9:17:54.314 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.40' message 'getting started on handler for keyboard events ... convert all gci messages sends to symbols for easy access by tools
' id 'a83f8b55-4aed-4d2d-8871-550cf82147a5' date '27 January 2013' time '9:14:21.173 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.39' message 'clean up some minor window interactivity issues
' id 'fb245bb3-aa88-4810-9330-ba9db0319e2d' date '26 January 2013' time '10:01:43.582 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.38' message 'eliminate all of the extraneous transcript logging
' id 'e7753c52-33d5-44d2-ad9a-5ea75c8867f5' date '26 January 2013' time '9:39:06.732 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.37' message 'add show GsCursor logic
' id '9e1ba505-d065-4963-adc1-386dfaf2c066' date '10 January 2013' time '8:31:58.35 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.36' message 'TDTopezServer>>reifyExceptionArgsForOopList:classNamesForOopList: serializes the exception args in there entirety
' id '9467f890-03dd-4e64-b1ee-c89e58158023' date '6 January 2013' time '7:58:14.515 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.35' message 'get rid of some halts
' id '78c6f3b7-d3c8-4a09-8c2d-8670d90c8d70' date '5 January 2013' time '4:59:35.778 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.34' message 'first order optimization for client forwarders appears to be functional (still scads of logging/debugging stuff)
' id 'f2a6d9aa-ac47-4693-9374-0f57ab430df4' date '5 January 2013' time '4:22:44.164 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.33' message 'checkpoint ... rediscovered GciSession>>terminateCurrentNbCall which is working like a charm ... apparently
' id '33fe594b-b678-400c-b8fd-dd8dd2323c88' date '5 January 2013' time '2:19:59.824 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.32' message 'add a mutex to GciLibrary and protect all api calls with the mutex to avoid concurrent api calls because of SHOUT ... looks like the concurrent calls are finally cleaned up ... still suspicious about the ifCurtailed: handling in getNbResult itself
' id '578ed6d6-15f9-435c-a91c-dc0d80e9fc95' date '5 January 2013' time '1:37:13 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.31' message 'checkpoint ... need to focus on avoiding concurrent gci calls
' id '5a0c11ca-1bf4-4948-aa8d-e98bc8438c20' date '5 January 2013' time '11:20:30.082 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.30' message 'checkpoint ... progress reducing round trips getting err/forwarder args ... with side trip handling interupted gci calls (SHOUT) ...
' id '68efaf94-1490-4cb3-8b42-df3a1f663df6' date '5 January 2013' time '10:00:49.674 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.29' message 'checkpoint ... support for optimizing error/forwarder round trips
' id '856b8ba5-f4ba-4ccd-b2cd-2b18a3c750fa' date '4 January 2013' time '8:04:50.271 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.28' message 'checkpoint add GciSession>>executeStringExpectingStringNB: to eliminate overhead of GciLibrary>>localFor:
' id '12b5a987-0735-464e-ac09-7c6a22703b85' date '3 January 2013' time '7:53:37.784 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.27' message 'checkpoint ... additional gci logging code
' id '57005579-7513-4d0d-8bd7-5fa88fbec7ca' date '3 January 2013' time '1:17:55.854 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.26' message 'checkpoint ... a bunch of gci call logging and a handful of round trip optimizations ... more on the way
' id 'e96bd033-f9c3-4226-b515-d2a84975a7d9' date '3 January 2013' time '12:40:57.054 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.25' message 'instead of terminating process, just return Aborted as string as result
' id '1cfb1f5b-526e-4839-8143-978c34f78fe5' date '30 December 2012' time '7:18:59.839 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.24' message 'checkpoint ... beginnings of error handling rework:
1. Proceed, Abort, Debug dialog upon error (all errors) basically functional
2. Proceed continues from halt/breakpoint(not confirmed?)
3. Abort terminates the process ... but doesn''t give new prompt
4. Debug returns the error, but doesn''t bring up debugger
5. Debug comes up when we get "error" command error, which should be their
own TopezNotification type
' id 'b84bec10-6ac5-43fc-98f4-2097b06665dc' date '28 December 2012' time '8:58:54.79 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.23' message 'reimplement continue to be straight continue method ... not continueWith
' id 'da1c9e52-496c-489c-bfd9-a4e1ca4aaff9' date '23 December 2012' time '8:00:45.457 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.22' message 'create /home/.window object whose contents represents the server element associated with the active window
' id '08000000-1508-ba15-1508-ba1514000000' date '27 November 2012' time '4:15:29.874 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.21' message 'reinstate support for client forwarders
' id '3a67fb35-ac80-4b45-afe0-0df55adf311a' date '18 November 2012' time '9:45:49.143 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.20' message 'support for TZGsBlockSend and TZGsMessageSend which I think will be useful going forward
' id '9f03700c-73ab-406d-8478-8decabc999ed' date '14 November 2012' time '5:56:18.17 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.19' message '`logout` and `close` commands added. address class name gc issue for gemstone.' id 'f93b6627-f5cd-4ea9-848f-01975b8e43e9' date '14 October 2012' time '9:25:12.077 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.18' message 'implement `set project`' id 'ba020b63-639a-468b-8d30-f2b00fcd79f1' date '7 October 2012' time '4:17:16.789 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.17' message 'clean up oop handling a bit' id '87bd6b8a-3569-4a49-816f-71cb6155ee0f' date '30 September 2012' time '5:33:02.054 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.16' message 'frame definition is starting to look good' id '3345e776-da65-42cf-bb40-94d560a3aaf5' date '30 September 2012' time '4:33:48.177 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.15' message 'initial stack support' id '746ec252-3d0b-4847-9e1c-e6f72a172b1d' date '30 September 2012' time '2:20:37.046 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.14' message 'checkpoint step:
stepOver is working and we''re getting the same frame summary information that topaz currently prints when a breakpoint is hit ... need to turn that into smalltalk code that returns a proxy object ...' id '6247736a-c04a-4d0e-921c-8821f373c949' date '29 September 2012' time '7:20:57.093 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.13' message 'successful step and handling breakpoints' id '53f144b8-4f15-4a62-9793-745eb2c9f4fc' date '29 September 2012' time '5:09:01.106 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.12' message 'implement method compilation' id '1e646cf7-f5fd-4f14-9aa5-bb0d44f5b301' date '29 September 2012' time '2:20:35.733 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.11' message 'checkpoint in step work ... start working through class/method definitions ... easier to construct tests' id '4fbe2802-d642-4d9e-b93f-879ee625fec6' date '29 September 2012' time '10:51:23.448 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.10' message 'remove abort commit ... executing smalltalk means I get real objects back and real errors thrown' id '08000000-1508-7017-1508-701714000000' date '28 September 2012' time '4:09:14.114 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.9' message 'halt/continue functional' id '08000000-1508-9c0b-1508-9c0b14000000' date '28 September 2012' time '3:30:03.01 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.8' message 'initial handling of error for debugger is working' id '08000000-1508-8a1c-1508-8a1c14000000' date '28 September 2012' time '10:14:36.51 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.7' message 'checkpoint in handling errors' id 'a6e47194-6a0f-44fc-8b05-ebb4e35d18b8' date '28 September 2012' time '8:35:48.178 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.6' message 'remove cursor manipulation' id '7d995951-038f-4bf4-8e68-39138b61a72c' date '28 September 2012' time '7:17:39.365 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.5' message 'strip out unused instance and class variables' id '08000000-1508-9e0f-1508-9e0f14000000' date '26 September 2012' time '1:55:53 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.4' message 'remove obviously unnecessary methods' id '08000000-1508-ee13-1508-ee1314000000' date '26 September 2012' time '1:48:35.66 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.3' message 'session descriptions are useful' id '8d6dca31-7718-4d39-8492-3b788e465f82' date '26 September 2012' time '11:49:21 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.2' message 'strip to bare essentials' id 'c6751575-cbdc-4803-b3f5-5d8a454cb816' date '26 September 2012' time '11:31:43 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.1' message 'split GciSession out .... ' id '65c8e9a4-f0c1-4d42-be2a-03547169a3a9' date '26 September 2012' time '11:26:56 am' author 'dkh' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())
\ No newline at end of file
+(name 'GemTools-ClientSession-dkh.63' message 'Add #logStack as error handling option ... triggered when running in a headless client .... ' id 'd8c5c3b3-3f10-4d5b-9f6d-2f16659a6318' date '16 March 2015' time '4:49:01.762344 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.62' message 'converting to use TDSessionDescription instead of OGCustomSessionDescription.
- TDSessionDescription is passed to server so that
the fields (backupDirectory, serverGitRoot
serverTodeHome) can be specified in the session
description and used on the server
- for now server will request the session description
to make upgrading easier (if client updated before
server, server won''t know what to do with the
session description)' id '47424c90-e743-47cd-a0f8-6dca14e7dba3' date '28 May 2014' time '7:23:55.835 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.61' message 'add some client-side error handling for closing windows when the sesssion has disconnected' id '1c3e36b7-4def-4f52-9897-6a2ebf1313ff' date '7 May 2014' time '8:24:11.083 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.60' message 'checkpoint:
- fine tune session description handling
- todeHome will be image level global to simplify
doits ...
- define 4 workspace windows for setting up client
side environment ... part of getting started
experience
- fine tune window properties handling
- testLogin: and testWindowLayout: and `script` command
are start of the batching facilities...' id '72a30bba-7759-446f-8e48-8dfb9a419800' date '23 March 2014' time '11:43:19.801 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.59' message 'checkpoint ... eliminating the need to any custom workspace in Pharo image ...just console workspace:
- add OBCustomSessionDescription class>>seaside with default session
- `help` writeup
- `whatsNew` command
- `sessionDescription` command (restored)
- `script` command
- `TDShell open` support' id '75b78733-a40f-4e45-86bd-82a2dd878184' date '22 March 2014' time '6:49:38.586 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.58' message 'checkpoint:
- support creating and using serialized session descriptions
- cleanup built-in support
- add `builtIns` command
- start work on improving the `getting started` experience
- start work on `help` and `updateClient` commands' id '97533bee-2320-46d5-a713-0c32ca01f238' date '22 March 2014' time '12:57:40.57 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.57' message 'clean up ... attempting to step over ''Transcript show''' id '47586912-6542-4771-928f-bbab4c36b13b' date '11 January 2014' time '4:27:26.24 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.56' message 'Issue #62: gearing up to address this problem . some GCI tracing and a little refactoring ...' id 'ad1d7949-1518-4a4b-8ccc-d68de0d35bdc' date '16 December 2013' time '2:26:14.43 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.55' message 'update OGCustomSessionDescription so that editTemplate includes the new fields added for tODE...' id 'd8831a3e-fd66-416e-b14d-cbbc689cbd1b' date '8 December 2013' time '3:03:08.893 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.54' message 'add tODE built-in commmand `installTode` that performs install/upgrade against remote GemStone repository' id 'ae771e10-5c42-4aa6-a30d-b3cf372ae49c' date '12 November 2013' time '10:38:20.063 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.53' message 'clean up some issues involving terminating processes correctly when debugger is closed ' id '270cc438-a2b7-4b34-b0a7-af0dd6da7341' date '15 July 2013' time '2:26:36.231 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.52' message 'need to terminate the process when we abort error handler' id '44cada4e-f65e-4289-b2e6-bb96c52da349' date '13 July 2013' time '1:03:07.638 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.51' message 'improve logout behavior after image restart' id 'edf49b9c-c312-47bd-a4d3-b256dff1d229' date '5 May 2013' time '9:06:47.759 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.50' message 'better error handling when remote stone/gem is gone' id 'fee7d2b9-0dce-4e75-85bd-ae85495a4e3a' date '2 April 2013' time '9:33:57.792 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.49' message 'continue needs to allow break points to fire' id 'be827a26-3ea6-48c6-a68a-55b4f65c38fb' date '1 April 2013' time '9:26:05.712 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.48' message 'some more tweaks and bugfixes' id 'c0bad742-5f34-4945-887b-fe84680fd5a6' date '1 April 2013' time '7:31:00.907 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.47' message 'removed dependence upon the proxy errors/notifications' id '0c36962b-c505-426d-a74e-2faada3192aa' date '29 March 2013' time '2:15:26.281 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.46' message 'interrupt logic is functional ...' id 'ab3382e6-a04f-4b2d-89b8-7c719d9a4594' date '26 March 2013' time '8:05:35.093 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.45' message 'define sessions for use on my mac to connect to office stones (3.1.0.1, r_ 3.1.0.3 and k_ 3.2.0)
' id 'a1486017-13a4-451b-970c-befbdbdc3563' date '14 March 2013' time '3:17:24.588 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.44' message 'add gemstoneVersion gciLibraryName adornmentColor to OGCustomSessionDescription ... the implication is that we can now connect to multiple gemstone versions from same image (not at same time .... need to exit one shell and launch another for it to work) ... still pretty nice capability ... see sessionDescription* messages in TDTopezClient for examples ... simply need to copy the gci libraries into the image directory (on linux) ... not tested on mac ... yet
' id 'c9293166-4081-4232-b0e4-4fcd29c7dd8e' date '14 March 2013' time '12:12:48.652 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.43' message 'add environmentId to a bunch of calls ... although environmentId probably won''t help indirect development
' id 'aed6268e-89d4-44aa-b7f3-d58d7ca25ba2' date '24 February 2013' time '9:52:59.888 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.42' message 'open debugger when DEBUG button pressed
' id 'f0346628-1bf1-43ba-9bd5-366ec034808c' date '4 February 2013' time '3:03:23.512 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.41' message 'missed a spot
' id '024b2818-4e19-4098-af34-ec88b179d7b9' date '27 January 2013' time '9:17:54.314 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.40' message 'getting started on handler for keyboard events ... convert all gci messages sends to symbols for easy access by tools
' id 'a83f8b55-4aed-4d2d-8871-550cf82147a5' date '27 January 2013' time '9:14:21.173 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.39' message 'clean up some minor window interactivity issues
' id 'fb245bb3-aa88-4810-9330-ba9db0319e2d' date '26 January 2013' time '10:01:43.582 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.38' message 'eliminate all of the extraneous transcript logging
' id 'e7753c52-33d5-44d2-ad9a-5ea75c8867f5' date '26 January 2013' time '9:39:06.732 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.37' message 'add show GsCursor logic
' id '9e1ba505-d065-4963-adc1-386dfaf2c066' date '10 January 2013' time '8:31:58.35 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.36' message 'TDTopezServer>>reifyExceptionArgsForOopList:classNamesForOopList: serializes the exception args in there entirety
' id '9467f890-03dd-4e64-b1ee-c89e58158023' date '6 January 2013' time '7:58:14.515 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.35' message 'get rid of some halts
' id '78c6f3b7-d3c8-4a09-8c2d-8670d90c8d70' date '5 January 2013' time '4:59:35.778 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.34' message 'first order optimization for client forwarders appears to be functional (still scads of logging/debugging stuff)
' id 'f2a6d9aa-ac47-4693-9374-0f57ab430df4' date '5 January 2013' time '4:22:44.164 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.33' message 'checkpoint ... rediscovered GciSession>>terminateCurrentNbCall which is working like a charm ... apparently
' id '33fe594b-b678-400c-b8fd-dd8dd2323c88' date '5 January 2013' time '2:19:59.824 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.32' message 'add a mutex to GciLibrary and protect all api calls with the mutex to avoid concurrent api calls because of SHOUT ... looks like the concurrent calls are finally cleaned up ... still suspicious about the ifCurtailed: handling in getNbResult itself
' id '578ed6d6-15f9-435c-a91c-dc0d80e9fc95' date '5 January 2013' time '1:37:13 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.31' message 'checkpoint ... need to focus on avoiding concurrent gci calls
' id '5a0c11ca-1bf4-4948-aa8d-e98bc8438c20' date '5 January 2013' time '11:20:30.082 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.30' message 'checkpoint ... progress reducing round trips getting err/forwarder args ... with side trip handling interupted gci calls (SHOUT) ...
' id '68efaf94-1490-4cb3-8b42-df3a1f663df6' date '5 January 2013' time '10:00:49.674 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.29' message 'checkpoint ... support for optimizing error/forwarder round trips
' id '856b8ba5-f4ba-4ccd-b2cd-2b18a3c750fa' date '4 January 2013' time '8:04:50.271 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.28' message 'checkpoint add GciSession>>executeStringExpectingStringNB: to eliminate overhead of GciLibrary>>localFor:
' id '12b5a987-0735-464e-ac09-7c6a22703b85' date '3 January 2013' time '7:53:37.784 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.27' message 'checkpoint ... additional gci logging code
' id '57005579-7513-4d0d-8bd7-5fa88fbec7ca' date '3 January 2013' time '1:17:55.854 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.26' message 'checkpoint ... a bunch of gci call logging and a handful of round trip optimizations ... more on the way
' id 'e96bd033-f9c3-4226-b515-d2a84975a7d9' date '3 January 2013' time '12:40:57.054 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.25' message 'instead of terminating process, just return Aborted as string as result
' id '1cfb1f5b-526e-4839-8143-978c34f78fe5' date '30 December 2012' time '7:18:59.839 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.24' message 'checkpoint ... beginnings of error handling rework:
1. Proceed, Abort, Debug dialog upon error (all errors) basically functional
2. Proceed continues from halt/breakpoint(not confirmed?)
3. Abort terminates the process ... but doesn''t give new prompt
4. Debug returns the error, but doesn''t bring up debugger
5. Debug comes up when we get "error" command error, which should be their
own TopezNotification type
' id 'b84bec10-6ac5-43fc-98f4-2097b06665dc' date '28 December 2012' time '8:58:54.79 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.23' message 'reimplement continue to be straight continue method ... not continueWith
' id 'da1c9e52-496c-489c-bfd9-a4e1ca4aaff9' date '23 December 2012' time '8:00:45.457 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.22' message 'create /home/.window object whose contents represents the server element associated with the active window
' id '08000000-1508-ba15-1508-ba1514000000' date '27 November 2012' time '4:15:29.874 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.21' message 'reinstate support for client forwarders
' id '3a67fb35-ac80-4b45-afe0-0df55adf311a' date '18 November 2012' time '9:45:49.143 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.20' message 'support for TZGsBlockSend and TZGsMessageSend which I think will be useful going forward
' id '9f03700c-73ab-406d-8478-8decabc999ed' date '14 November 2012' time '5:56:18.17 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.19' message '`logout` and `close` commands added. address class name gc issue for gemstone.' id 'f93b6627-f5cd-4ea9-848f-01975b8e43e9' date '14 October 2012' time '9:25:12.077 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.18' message 'implement `set project`' id 'ba020b63-639a-468b-8d30-f2b00fcd79f1' date '7 October 2012' time '4:17:16.789 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.17' message 'clean up oop handling a bit' id '87bd6b8a-3569-4a49-816f-71cb6155ee0f' date '30 September 2012' time '5:33:02.054 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.16' message 'frame definition is starting to look good' id '3345e776-da65-42cf-bb40-94d560a3aaf5' date '30 September 2012' time '4:33:48.177 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.15' message 'initial stack support' id '746ec252-3d0b-4847-9e1c-e6f72a172b1d' date '30 September 2012' time '2:20:37.046 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.14' message 'checkpoint step:
stepOver is working and we''re getting the same frame summary information that topaz currently prints when a breakpoint is hit ... need to turn that into smalltalk code that returns a proxy object ...' id '6247736a-c04a-4d0e-921c-8821f373c949' date '29 September 2012' time '7:20:57.093 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.13' message 'successful step and handling breakpoints' id '53f144b8-4f15-4a62-9793-745eb2c9f4fc' date '29 September 2012' time '5:09:01.106 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.12' message 'implement method compilation' id '1e646cf7-f5fd-4f14-9aa5-bb0d44f5b301' date '29 September 2012' time '2:20:35.733 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.11' message 'checkpoint in step work ... start working through class/method definitions ... easier to construct tests' id '4fbe2802-d642-4d9e-b93f-879ee625fec6' date '29 September 2012' time '10:51:23.448 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.10' message 'remove abort commit ... executing smalltalk means I get real objects back and real errors thrown' id '08000000-1508-7017-1508-701714000000' date '28 September 2012' time '4:09:14.114 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.9' message 'halt/continue functional' id '08000000-1508-9c0b-1508-9c0b14000000' date '28 September 2012' time '3:30:03.01 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.8' message 'initial handling of error for debugger is working' id '08000000-1508-8a1c-1508-8a1c14000000' date '28 September 2012' time '10:14:36.51 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.7' message 'checkpoint in handling errors' id 'a6e47194-6a0f-44fc-8b05-ebb4e35d18b8' date '28 September 2012' time '8:35:48.178 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.6' message 'remove cursor manipulation' id '7d995951-038f-4bf4-8e68-39138b61a72c' date '28 September 2012' time '7:17:39.365 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.5' message 'strip out unused instance and class variables' id '08000000-1508-9e0f-1508-9e0f14000000' date '26 September 2012' time '1:55:53 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.4' message 'remove obviously unnecessary methods' id '08000000-1508-ee13-1508-ee1314000000' date '26 September 2012' time '1:48:35.66 pm' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.3' message 'session descriptions are useful' id '8d6dca31-7718-4d39-8492-3b788e465f82' date '26 September 2012' time '11:49:21 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.2' message 'strip to bare essentials' id 'c6751575-cbdc-4803-b3f5-5d8a454cb816' date '26 September 2012' time '11:31:43 am' author 'dkh' ancestors ((name 'GemTools-ClientSession-dkh.1' message 'split GciSession out .... ' id '65c8e9a4-f0c1-4d42-be2a-03547169a3a9' date '26 September 2012' time '11:26:56 am' author 'dkh' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/String.extension/instance/convertTDEvaluateTokenResponseToText..st b/repository/Tode-Client-Common.package/String.extension/instance/convertTDEvaluateTokenResponseToText..st
new file mode 100644
index 000000000..2608a8c1a
--- /dev/null
+++ b/repository/Tode-Client-Common.package/String.extension/instance/convertTDEvaluateTokenResponseToText..st
@@ -0,0 +1,5 @@
+*Tode-Client-Common
+convertTDEvaluateTokenResponseToText: objectSerializer
+ "expected response is a String, but could be a TZProxyNotification"
+
+ ^ objectSerializer fromString: self
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/String.extension/methodProperties.json b/repository/Tode-Client-Common.package/String.extension/methodProperties.json
new file mode 100644
index 000000000..b7bce5a6f
--- /dev/null
+++ b/repository/Tode-Client-Common.package/String.extension/methodProperties.json
@@ -0,0 +1,5 @@
+{
+ "class" : {
+ },
+ "instance" : {
+ "convertTDEvaluateTokenResponseToText:" : "dkh 6/25/2015 17:06" } }
diff --git a/repository/Topez-Common-Core.package/String.extension/properties.json b/repository/Tode-Client-Common.package/String.extension/properties.json
similarity index 100%
rename from repository/Topez-Common-Core.package/String.extension/properties.json
rename to repository/Tode-Client-Common.package/String.extension/properties.json
diff --git a/repository/Tode-Client-Common.package/TDAbstractWindowProperties.class/class/import..st b/repository/Tode-Client-Common.package/TDAbstractWindowProperties.class/class/import..st
index e3b8b5e47..47d4f06a5 100644
--- a/repository/Tode-Client-Common.package/TDAbstractWindowProperties.class/class/import..st
+++ b/repository/Tode-Client-Common.package/TDAbstractWindowProperties.class/class/import..st
@@ -1,3 +1,3 @@
STON
import: windowLayoutFilename
- ^self importFrom: TDShell windowLayoutHome, windowLayoutFilename
\ No newline at end of file
+ ^ self importFrom: (TDShell lookupWindowLayout: windowLayoutFilename)
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDAbstractWindowProperties.class/class/importFrom..st b/repository/Tode-Client-Common.package/TDAbstractWindowProperties.class/class/importFrom..st
index d938d0c6f..43f6a111b 100644
--- a/repository/Tode-Client-Common.package/TDAbstractWindowProperties.class/class/importFrom..st
+++ b/repository/Tode-Client-Common.package/TDAbstractWindowProperties.class/class/importFrom..st
@@ -1,3 +1,5 @@
STON
importFrom: filepath
- FileStream readOnlyFileNamed: filepath do: [ :fileStream | ^STON fromStream: fileStream ].
+ FileStream
+ readOnlyFileNamed: filepath
+ do: [ :fileStream | ^ TodeObjectSerializer preferredSerializer fromString: fileStream contents ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDAbstractWindowProperties.class/instance/exportTo.extension..st b/repository/Tode-Client-Common.package/TDAbstractWindowProperties.class/instance/exportTo.extension..st
index e7ef0ff58..b86a46729 100644
--- a/repository/Tode-Client-Common.package/TDAbstractWindowProperties.class/instance/exportTo.extension..st
+++ b/repository/Tode-Client-Common.package/TDAbstractWindowProperties.class/instance/exportTo.extension..st
@@ -1,7 +1,6 @@
STON
exportTo: filepath extension: extension
- | stream |
- stream := FileStream forceNewFileNamed: filepath , extension.
- stream lineEndConvention: #'lf'.
- STON put: self onStreamPretty: stream.
- stream close
\ No newline at end of file
+ (filepath , extension) asFileReference
+ writeStreamDo: [ :stream |
+ stream lineEndConvention: #lf.
+ stream nextPutAll: (TodeObjectSerializer preferredSerializer toStringPretty: self) ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDAbstractWindowProperties.class/methodProperties.json b/repository/Tode-Client-Common.package/TDAbstractWindowProperties.class/methodProperties.json
index ff74702c7..7ce4a45c9 100644
--- a/repository/Tode-Client-Common.package/TDAbstractWindowProperties.class/methodProperties.json
+++ b/repository/Tode-Client-Common.package/TDAbstractWindowProperties.class/methodProperties.json
@@ -1,11 +1,11 @@
{
"class" : {
- "import:" : "dkh 5/31/2014 17:11",
- "importFrom:" : "dkh 5/31/2014 17:12",
+ "import:" : "dkh 3/11/2015 10:02",
+ "importFrom:" : "dkh 6/25/2015 16:57",
"install:" : "dkh 5/31/2014 17:11" },
"instance" : {
"caculateWindowBounds" : "dkh 5/31/2014 17:01",
"exportTo:" : "dkh 5/31/2014 16:55",
- "exportTo:extension:" : "dkh 5/31/2014 16:55",
+ "exportTo:extension:" : "dkh 6/25/2015 17:00",
"installOn:" : "dkh 6/2/2014 07:05",
"printOn:" : "dkh 6/2/2014 07:07" } }
diff --git a/repository/Tode-Client-Common.package/TDAlternateStretchWindowProperties.class/README.md b/repository/Tode-Client-Common.package/TDAlternateStretchWindowProperties.class/README.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/repository/Tode-Client-Common.package/TDAlternateStretchWindowProperties.class/instance/caculateWindowBounds.st b/repository/Tode-Client-Common.package/TDAlternateStretchWindowProperties.class/instance/caculateWindowBounds.st
new file mode 100644
index 000000000..d2f031ba9
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDAlternateStretchWindowProperties.class/instance/caculateWindowBounds.st
@@ -0,0 +1,75 @@
+window bounds
+caculateWindowBounds
+ | layoutExtent dict lw lo lh topHeight shellHeight browserHeight codeWidth shellExtent classCategories classes evaluator superclasses classDef instanceSelectors classSelectors configurations packages implementors app1 app2 app3 app4 context debugger inspector method codeHeight appExtent displayExtent debuggerWidth diff lce projectList transcript classicClassDef classicClassButtonBar classicProtocol |
+ displayExtent := Display usableArea extent.
+ layoutExtent := displayExtent - (2 @ 2 * margin).
+ lo := margin.
+ dict := Dictionary new.
+ debuggerWidth := codeWidth := layoutExtent x * codeWidthFactor.
+ lw := layoutExtent x // (5.5 + extraLists).
+ debuggerWidth := 2.75 * lw.
+ (diff := codeWidth - debuggerWidth) > 0
+ ifTrue: [
+ diff := diff / (5.5 + extraLists).
+ lw := lw + (diff // (4.5 + extraLists)).
+ false
+ ifTrue: [ debuggerWidth := layoutExtent x - (lw + codeWidth) ] ].
+ shellHeight := layoutExtent y * shellHeightFactor.
+ browserHeight := layoutExtent y - shellHeight.
+ topHeight := browserHeight * topHeightFactor.
+ lh := browserHeight // 2.
+ codeHeight := browserHeight - topHeight.
+ lce := lw @ lh.
+ shellExtent := codeWidth @ shellHeight.
+ appExtent := ((layoutExtent x - codeWidth) // 2) @ shellHeight.
+ classCategories := lo extent: lce.
+ classes := classCategories bottomLeft extent: lce.
+ evaluator := classes bottomLeft extent: (codeWidth * 0.80) @ shellHeight.
+ superclasses := classCategories topRight extent: lw @ topHeight.
+ classDef := superclasses topRight extent: (1.35 * lw) @ topHeight.
+ classicClassDef := superclasses topRight extent: (1.35 * lw) @ (topHeight * 0.65).
+ classicClassButtonBar := superclasses topRight + (0 @ (topHeight * 0.65)) extent: (1.35 * lw) @ (topHeight * 0.35).
+ instanceSelectors := classDef topRight extent: lw @ (topHeight + codeHeight).
+ classicProtocol := instanceSelectors.
+ classSelectors := instanceSelectors topRight extent: lw @ (topHeight + codeHeight).
+ configurations := lo extent: lw @ (lh // 2).
+ packages := configurations bottomLeft extent: lw @ (lh // 2).
+ method := superclasses bottomLeft extent: codeWidth @ codeHeight.
+ implementors := classDef bottomRight extent: debuggerWidth @ (codeHeight // 2).
+ inspector := evaluator topRight extent: shellExtent.
+ debugger := implementors bottomLeft extent: debuggerWidth @ (codeHeight // 2).
+ context := debugger bottomLeft extent: debuggerWidth @ shellExtent y.
+ app1 := evaluator topRight extent: appExtent.
+ app2 := app1 topRight extent: appExtent.
+ app3 := evaluator topRight - (0 @ appExtent y) extent: appExtent.
+ app4 := app3 topRight extent: appExtent.
+ projectList := app1.
+ transcript := projectList topRight + (0 @ (projectList height // 2))
+ extent: (layoutExtent x - projectList topRight x) @ (projectList height // 2).
+ dict
+ at: #classCategories put: classCategories;
+ at: #classes put: classes;
+ at: #evaluator put: evaluator;
+ at: #superclasses put: superclasses;
+ at: #classDef put: classDef;
+ at: #classicClassDef put: classicClassDef;
+ at: #classicClassButtonBar put: classicClassButtonBar;
+ at: #classicProtocol put: classicProtocol;
+ at: #instanceSelectors put: instanceSelectors;
+ at: #classSelectors put: classSelectors;
+ at: #configurations put: configurations;
+ at: #packages put: packages;
+ at: #implementors put: implementors;
+ at: #inspector put: inspector;
+ at: #method put: method;
+ at: #context put: context;
+ at: #debugger put: debugger;
+ at: #app1 put: app1;
+ at: #app2 put: app2;
+ at: #app3 put: app3;
+ at: #app4 put: app4;
+ at: #projectList put: projectList;
+ at: #workspace put: method;
+ at: #transcript put: transcript;
+ yourself.
+ ^ dict
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDAlternateStretchWindowProperties.class/methodProperties.json b/repository/Tode-Client-Common.package/TDAlternateStretchWindowProperties.class/methodProperties.json
new file mode 100644
index 000000000..1b355b90a
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDAlternateStretchWindowProperties.class/methodProperties.json
@@ -0,0 +1,5 @@
+{
+ "class" : {
+ },
+ "instance" : {
+ "caculateWindowBounds" : "dkh 8/31/2015 17:28" } }
diff --git a/repository/Tode-Client-Common.package/TDAlternateStretchWindowProperties.class/properties.json b/repository/Tode-Client-Common.package/TDAlternateStretchWindowProperties.class/properties.json
new file mode 100644
index 000000000..19d2127cd
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDAlternateStretchWindowProperties.class/properties.json
@@ -0,0 +1,14 @@
+{
+ "category" : "Tode-Client-Common",
+ "classinstvars" : [
+ ],
+ "classvars" : [
+ ],
+ "commentStamp" : "",
+ "instvars" : [
+ ],
+ "name" : "TDAlternateStretchWindowProperties",
+ "pools" : [
+ ],
+ "super" : "TDStandardWindowProperties",
+ "type" : "normal" }
diff --git a/repository/Tode-Client-Common.package/TDAlternateWindowProperties.class/instance/caculateWindowBounds.st b/repository/Tode-Client-Common.package/TDAlternateWindowProperties.class/instance/caculateWindowBounds.st
index cea836717..6d1ed9fd4 100644
--- a/repository/Tode-Client-Common.package/TDAlternateWindowProperties.class/instance/caculateWindowBounds.st
+++ b/repository/Tode-Client-Common.package/TDAlternateWindowProperties.class/instance/caculateWindowBounds.st
@@ -1,11 +1,11 @@
window bounds
caculateWindowBounds
- | layoutExtent dict lw lo lh topHeight shellHeight browserHeight codeWidth shellExtent classCategories classes evaluator superclasses classDef instanceSelectors classSelectors configurations packages implementors app1 app2 app3 app4 context debugger inspector method codeHeight appExtent displayExtent debuggerWidth diff lcw lce |
+ | layoutExtent dict lw lo lh topHeight shellHeight browserHeight codeWidth shellExtent classCategories classes evaluator superclasses classDef instanceSelectors classSelectors configurations packages implementors app1 app2 app3 app4 context debugger inspector method codeHeight appExtent displayExtent debuggerWidth diff lcw lce projectList transcript classicClassDef classicClassButtonBar classicProtocol |
displayExtent := Display usableArea extent.
layoutExtent := displayExtent - (2 @ 2 * margin).
lo := margin.
dict := Dictionary new.
- debuggerWidth := codeWidth := (layoutExtent x * codeWidthFactor) .
+ debuggerWidth := codeWidth := layoutExtent x * codeWidthFactor.
lcw := lw := layoutExtent x // (5.5 + extraLists).
debuggerWidth := layoutExtent x - (lw + codeWidth).
(diff := codeWidth - debuggerWidth) > 0
@@ -13,10 +13,10 @@ caculateWindowBounds
diff := diff / (5.5 + extraLists).
lcw := lw - diff.
lw := lw + (diff // (4.5 + extraLists)).
- debuggerWidth := layoutExtent x - (lcw + codeWidth). ].
- shellHeight := (layoutExtent y * shellHeightFactor) .
- browserHeight := (layoutExtent y - shellHeight) .
- topHeight := (browserHeight * topHeightFactor) .
+ debuggerWidth := layoutExtent x - (lcw + codeWidth) ].
+ shellHeight := layoutExtent y * shellHeightFactor.
+ browserHeight := layoutExtent y - shellHeight.
+ topHeight := browserHeight * topHeightFactor.
lh := browserHeight // 2.
codeHeight := browserHeight - topHeight.
lce := lcw @ lh.
@@ -26,13 +26,16 @@ caculateWindowBounds
classes := classCategories bottomLeft extent: lce.
evaluator := classes bottomLeft extent: shellExtent.
superclasses := classCategories topRight extent: lw @ topHeight.
- classDef := superclasses topRight extent: (1.5 * lw) @ topHeight.
+ classDef := superclasses topRight extent: (1.5 * lw) @ topHeight.
+ classicClassDef := superclasses topRight extent: (1.5 * lw) @ (topHeight * 0.65).
+ classicClassButtonBar := superclasses topRight + (0 @ (topHeight * 0.65)) extent: (1.5 * lw) @ (topHeight * 0.35).
instanceSelectors := classDef topRight extent: lw @ topHeight.
+ classicProtocol := instanceSelectors.
classSelectors := instanceSelectors topRight extent: lw @ topHeight.
configurations := lo extent: lw @ (lh // 2).
packages := configurations bottomLeft extent: lw @ (lh // 2).
method := superclasses bottomLeft extent: codeWidth @ codeHeight.
- implementors := method topRight extent: (2 * lw) @ (codeHeight //2).
+ implementors := method topRight extent: (2 * lw) @ (codeHeight // 2).
inspector := evaluator topRight extent: shellExtent.
debugger := method topRight extent: debuggerWidth @ codeHeight.
context := debugger bottomLeft extent: debuggerWidth @ shellExtent y.
@@ -40,12 +43,18 @@ caculateWindowBounds
app2 := app1 topRight extent: appExtent.
app3 := evaluator topRight - (0 @ appExtent y) extent: appExtent.
app4 := app3 topRight extent: appExtent.
+ projectList := app1.
+ transcript := projectList topRight + (0 @ (projectList height // 2))
+ extent: (layoutExtent x - projectList topRight x) @ (projectList height // 2).
dict
at: #classCategories put: classCategories;
at: #classes put: classes;
at: #evaluator put: evaluator;
at: #superclasses put: superclasses;
at: #classDef put: classDef;
+ at: #classicClassDef put: classicClassDef;
+ at: #classicClassButtonBar put: classicClassButtonBar;
+ at: #classicProtocol put: classicProtocol;
at: #instanceSelectors put: instanceSelectors;
at: #classSelectors put: classSelectors;
at: #configurations put: configurations;
@@ -59,5 +68,8 @@ caculateWindowBounds
at: #app2 put: app2;
at: #app3 put: app3;
at: #app4 put: app4;
+ at: #projectList put: projectList;
+ at: #workspace put: method;
+ at: #transcript put: transcript;
yourself.
^ dict
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDAlternateWindowProperties.class/methodProperties.json b/repository/Tode-Client-Common.package/TDAlternateWindowProperties.class/methodProperties.json
index 4c8198459..60637e2ab 100644
--- a/repository/Tode-Client-Common.package/TDAlternateWindowProperties.class/methodProperties.json
+++ b/repository/Tode-Client-Common.package/TDAlternateWindowProperties.class/methodProperties.json
@@ -2,4 +2,4 @@
"class" : {
},
"instance" : {
- "caculateWindowBounds" : "dkh 6/1/2014 15:43" } }
+ "caculateWindowBounds" : "dkh 8/31/2015 17:39" } }
diff --git a/repository/Tode-Client-Common.package/TDJigsawWindowProperties.class/README.md b/repository/Tode-Client-Common.package/TDJigsawWindowProperties.class/README.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/repository/Tode-Client-Common.package/TDJigsawWindowProperties.class/instance/caculateWindowBounds.st b/repository/Tode-Client-Common.package/TDJigsawWindowProperties.class/instance/caculateWindowBounds.st
new file mode 100644
index 000000000..cd1edf1dd
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDJigsawWindowProperties.class/instance/caculateWindowBounds.st
@@ -0,0 +1,76 @@
+window bounds
+caculateWindowBounds
+ | layoutExtent dict lw lo lh topHeight shellHeight browserHeight codeWidth shellExtent classCategories classes evaluator superclasses classDef instanceSelectors classSelectors configurations packages implementors app1 app2 app3 app4 context debugger inspector method codeHeight appExtent displayExtent debuggerWidth diff lce projectList workspace transcript classicClassDef classicClassButtonBar classicProtocol |
+ displayExtent := Display usableArea extent.
+ layoutExtent := displayExtent - (2 @ 2 * margin).
+ lo := margin.
+ dict := Dictionary new.
+ debuggerWidth := codeWidth := layoutExtent x * codeWidthFactor.
+ lw := layoutExtent x // (5.5 + extraLists).
+ debuggerWidth := 2.75 * lw.
+ (diff := codeWidth - debuggerWidth) > 0
+ ifTrue: [
+ diff := diff / (5.5 + extraLists).
+ lw := lw + (diff // (4.5 + extraLists)).
+ false
+ ifTrue: [ debuggerWidth := layoutExtent x - (lw + codeWidth) ] ].
+ shellHeight := layoutExtent y * shellHeightFactor.
+ browserHeight := layoutExtent y - shellHeight.
+ topHeight := browserHeight * topHeightFactor.
+ lh := browserHeight // 2.
+ codeHeight := browserHeight - topHeight.
+ lce := lw @ lh.
+ shellExtent := codeWidth @ shellHeight.
+ evaluator := margin x @ (lh * 2) extent: (codeWidth * 0.80) @ shellHeight.
+ superclasses := lo extent: lw @ topHeight.
+ classDef := superclasses topRight extent: (1.35 * lw) @ topHeight.
+ classicClassDef := superclasses topRight extent: (1.35 * lw) @ (topHeight * 0.65).
+ classicClassButtonBar := superclasses topRight + (0 @ (topHeight * 0.65)) extent: (1.35 * lw) @ (topHeight * 0.35).
+ classicProtocol := classDef topRight extent: lw @ topHeight.
+ instanceSelectors := classDef topRight extent: lw @ (lh * 2).
+ classSelectors := instanceSelectors topRight extent: lw @ (lh * 2).
+ method := superclasses bottomLeft extent: (instanceSelectors topRight x - margin x) @ codeHeight.
+ implementors := classDef bottomRight extent: debuggerWidth @ (codeHeight // 2).
+ inspector := evaluator topRight extent: shellExtent.
+ debugger := instanceSelectors bottomRight x @ implementors bottomLeft y extent: debuggerWidth @ (codeHeight // 2).
+ context := debugger bottomLeft extent: debuggerWidth @ shellExtent y.
+ classCategories := classSelectors topRight extent: lw @ topHeight.
+ classes := classCategories topRight extent: lw @ topHeight.
+ configurations := classSelectors topRight extent: lw @ topHeight.
+ packages := configurations bottomLeft extent: lw @ topHeight.
+ appExtent := ((layoutExtent x - method bottomRight x) // 2) @ shellHeight.
+ projectList := evaluator topRight corner: classSelectors bottomRight + (0 @ shellHeight).
+ workspace := classCategories bottomLeft corner: classes bottomRight + (0 @ topHeight).
+ app1 := method bottomRight - (0 @ appExtent y) extent: appExtent.
+ app2 := app1 topRight extent: appExtent.
+ app3 := method bottomRight extent: appExtent.
+ app4 := app3 topRight extent: appExtent.
+ transcript := projectList topRight + (0 @ (projectList height // 2))
+ extent: (layoutExtent x - projectList topRight x) @ (projectList height // 2).
+ dict
+ at: #classCategories put: classCategories;
+ at: #classes put: classes;
+ at: #evaluator put: evaluator;
+ at: #superclasses put: superclasses;
+ at: #classDef put: classDef;
+ at: #classicClassDef put: classicClassDef;
+ at: #classicClassButtonBar put: classicClassButtonBar;
+ at: #classicProtocol put: classicProtocol;
+ at: #instanceSelectors put: instanceSelectors;
+ at: #classSelectors put: classSelectors;
+ at: #configurations put: configurations;
+ at: #packages put: packages;
+ at: #implementors put: implementors;
+ at: #inspector put: inspector;
+ at: #method put: method;
+ at: #context put: context;
+ at: #debugger put: debugger;
+ at: #app1 put: app1;
+ at: #app2 put: app2;
+ at: #app3 put: app3;
+ at: #app4 put: app4;
+ at: #projectList put: projectList;
+ at: #workspace put: workspace;
+ at: #transcript put: transcript;
+ yourself.
+ ^ dict
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDJigsawWindowProperties.class/methodProperties.json b/repository/Tode-Client-Common.package/TDJigsawWindowProperties.class/methodProperties.json
new file mode 100644
index 000000000..7ae374052
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDJigsawWindowProperties.class/methodProperties.json
@@ -0,0 +1,5 @@
+{
+ "class" : {
+ },
+ "instance" : {
+ "caculateWindowBounds" : "dkh 8/31/2015 17:22" } }
diff --git a/repository/Tode-Client-Common.package/TDJigsawWindowProperties.class/properties.json b/repository/Tode-Client-Common.package/TDJigsawWindowProperties.class/properties.json
new file mode 100644
index 000000000..940fbd568
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDJigsawWindowProperties.class/properties.json
@@ -0,0 +1,14 @@
+{
+ "category" : "Tode-Client-Common",
+ "classinstvars" : [
+ ],
+ "classvars" : [
+ ],
+ "commentStamp" : "",
+ "instvars" : [
+ ],
+ "name" : "TDJigsawWindowProperties",
+ "pools" : [
+ ],
+ "super" : "TDStandardWindowProperties",
+ "type" : "normal" }
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/cleanForDeploy.st b/repository/Tode-Client-Common.package/TDShell.class/class/cleanForDeploy.st
index b80f4ece2..778857646 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/class/cleanForDeploy.st
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/cleanForDeploy.st
@@ -21,4 +21,3 @@ cleanForDeploy
MCDirectoryRepository defaultDirectoryName: nil.
MCGitHubRepository flushDownloadCache.
self resetWorldMenu.
- WebEditionRoot := nil
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/clientScriptsFiles..st b/repository/Tode-Client-Common.package/TDShell.class/class/clientScriptsFiles..st
new file mode 100644
index 000000000..3f64f8a0d
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/clientScriptsFiles..st
@@ -0,0 +1,16 @@
+home
+clientScriptsFiles: stoneName
+ self useTodeSys
+ ifTrue: [
+ | map |
+ map := Dictionary new.
+ {(self todeSysStonePath: stoneName).
+ (self todeSysLocalClientScriptsPath).
+ (self todeSysDefaultClientScriptsPath)}
+ do: [ :rootPath |
+ | reference |
+ reference := rootPath asFileReference.
+ reference exists
+ ifTrue: [ reference files do: [ :fileRef | map at: fileRef basename put: fileRef ] ] ].
+ ^ map values ].
+ ^ self todeRoot , '/' , self clientScriptsPath asFileReference files
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/clientScriptsHome.st b/repository/Tode-Client-Common.package/TDShell.class/class/clientScriptsHome.st
deleted file mode 100644
index f204d4f20..000000000
--- a/repository/Tode-Client-Common.package/TDShell.class/class/clientScriptsHome.st
+++ /dev/null
@@ -1,3 +0,0 @@
-home
-clientScriptsHome
- ^ self todeRoot , '/client/scripts/'
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/clientScriptsPath.st b/repository/Tode-Client-Common.package/TDShell.class/class/clientScriptsPath.st
new file mode 100644
index 000000000..60b43d264
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/clientScriptsPath.st
@@ -0,0 +1,3 @@
+home-private
+clientScriptsPath
+ ^ 'client/scripts/'
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/currentShell..st b/repository/Tode-Client-Common.package/TDShell.class/class/currentShell..st
new file mode 100644
index 000000000..6bd5ca553
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/currentShell..st
@@ -0,0 +1,3 @@
+accessing
+currentShell: aTDShell
+ currentShell := aTDShell
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/currentShell.st b/repository/Tode-Client-Common.package/TDShell.class/class/currentShell.st
new file mode 100644
index 000000000..0cb4985ac
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/currentShell.st
@@ -0,0 +1,3 @@
+accessing
+currentShell
+ ^ currentShell
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/devKitRoot..st b/repository/Tode-Client-Common.package/TDShell.class/class/devKitRoot..st
index d6e1fa3bd..e65a94de6 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/class/devKitRoot..st
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/devKitRoot..st
@@ -1,4 +1,4 @@
-home
+home-private
devKitRoot: aString
DevKitRoot := aString.
TodePath := '/tode/'.
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/forSessionNamed..st b/repository/Tode-Client-Common.package/TDShell.class/class/forSessionNamed..st
new file mode 100644
index 000000000..55333a8e0
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/forSessionNamed..st
@@ -0,0 +1,8 @@
+instance creation
+forSessionNamed: aSessionName
+ | sessionDescription |
+ sessionDescription := TDSessionDescription importFrom: self todeSysLocalSessionDescriptionPath , aSessionName.
+ ^ self new
+ sessionDescription: sessionDescription;
+ batchMode: true;
+ yourself
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/imageWorkspaceHome.st b/repository/Tode-Client-Common.package/TDShell.class/class/imageWorkspaceHome.st
deleted file mode 100644
index 0fa61059d..000000000
--- a/repository/Tode-Client-Common.package/TDShell.class/class/imageWorkspaceHome.st
+++ /dev/null
@@ -1,3 +0,0 @@
-home
-imageWorkspaceHome
- ^ self todeRoot , '/client/image/'
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/importSessionDescriptionFrom.for..st b/repository/Tode-Client-Common.package/TDShell.class/class/importSessionDescriptionFrom.for..st
index f713d8e86..c5fa84270 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/class/importSessionDescriptionFrom.for..st
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/importSessionDescriptionFrom.for..st
@@ -9,20 +9,33 @@ importSessionDescriptionFrom: file for: aBuilder
show: 'Error importing session description from: ' , file fullName printString , ': ' , ex description.
^ self ].
(aBuilder item: sessionDescription name asSymbol)
- parent: #'tODE Shell';
- action: [ TDShell openOnSessionDescription: sessionDescription ].
+ parent: #'Open Shell';
+ action: [
+ | window |
+ window := TDShell openOnSessionDescription: sessionDescription.
+ currentShell := window model cliShell ].
+ (aBuilder item: sessionDescription name asSymbol)
+ parent: #'Project List';
+ action: [
+ | window |
+ window := TDShell openOnSessionDescription: sessionDescription.
+ currentShell := window model cliShell.
+ currentShell ifNil: [ ^ self ].
+ currentShell evaluate: 'project list' ].
(aBuilder item: sessionDescription name asSymbol)
- parent: #'tODE Edit';
+ parent: #'Workspace';
+ action: [
+ | window |
+ window := TDShell openOnSessionDescription: sessionDescription.
+ currentShell := window model cliShell.
+ currentShell ifNil: [ ^ self ].
+ currentShell evaluate: 'ws' ].
+ (aBuilder item: sessionDescription name asSymbol)
+ parent: #'Edit Description';
action: [ self new openWorkspace: sessionDescription editTemplate styling: true label: sessionDescription name ].
(aBuilder item: sessionDescription name asSymbol)
- parent: #'tODE Test Login';
+ parent: #'Test Login';
action: [
| answer |
answer := TDShell testLoginForSessionDescription: sessionDescription.
- self new openWorkspace: answer label: 'tODE testLogin: ' , sessionDescription name ].
- (aBuilder item: sessionDescription name asSymbol)
- parent: #'tODE Install';
- action: [ self openSessionDescription: sessionDescription evaluate: 'script --script=installTode' ].
- (aBuilder item: sessionDescription name asSymbol)
- parent: #'tODE Update';
- action: [ self openSessionDescription: sessionDescription evaluate: 'script --script=updateTode' ]
\ No newline at end of file
+ self new openWorkspace: answer label: 'testLogin: ' , sessionDescription name ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/lookupClientScripts.stoneName..st b/repository/Tode-Client-Common.package/TDShell.class/class/lookupClientScripts.stoneName..st
new file mode 100644
index 000000000..112a109f0
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/lookupClientScripts.stoneName..st
@@ -0,0 +1,16 @@
+home
+lookupClientScripts: scriptFilename stoneName: stoneName
+ self useTodeSys
+ ifTrue: [
+ {(self todeSysStonePath: stoneName).
+ (self todeSysLocalClientScriptsPath).
+ (self todeSysDefaultClientScriptsPath)}
+ do: [ :rootPath |
+ | path |
+ path := rootPath , scriptFilename.
+ path asFileReference exists
+ ifTrue: [ ^ path ] ].
+ self
+ error:
+ 'The script ' , scriptFilename printString , ' was not found in the stone|local|default/client/scripts directories' ].
+ ^ self todeRoot , '/' , self clientScriptsPath , scriptFilename
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/lookupPharoScript..st b/repository/Tode-Client-Common.package/TDShell.class/class/lookupPharoScript..st
new file mode 100644
index 000000000..f4d12a98a
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/lookupPharoScript..st
@@ -0,0 +1,10 @@
+as yet unclassified
+lookupPharoScript: scriptFilename
+ {(self todeSysLocalPharoPath).
+ (self todeSysDefaultPharoPath)}
+ do: [ :rootPath |
+ | path |
+ path := rootPath , scriptFilename.
+ path asFileReference exists
+ ifTrue: [ ^ path ] ].
+ self error: 'The script ' , scriptFilename printString , ' was not found in the local|default/pharo directories'
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/lookupServerScripts..st b/repository/Tode-Client-Common.package/TDShell.class/class/lookupServerScripts..st
new file mode 100644
index 000000000..165956f53
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/lookupServerScripts..st
@@ -0,0 +1,14 @@
+home
+lookupServerScripts: scriptFilename
+ self useTodeSys
+ ifTrue: [
+ {(self todeSysLocalServerScriptsPath).
+ (self todeSysDefaultServerScriptsPath)}
+ do: [ :rootPath |
+ | path |
+ path := rootPath , scriptFilename.
+ path asFileReference exists
+ ifTrue: [ ^ path ] ].
+ self
+ error: 'The script ' , scriptFilename printString , ' was not found in the local|default/server/scripts directories' ].
+ ^ self todeRoot , '/' , self serverScriptsPath , scriptFilename
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/lookupWindowLayout..st b/repository/Tode-Client-Common.package/TDShell.class/class/lookupWindowLayout..st
new file mode 100644
index 000000000..79413e456
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/lookupWindowLayout..st
@@ -0,0 +1,16 @@
+home
+lookupWindowLayout: windowLayoutFilename
+ self useTodeSys
+ ifTrue: [
+ {(self todeSysLocalWindowLayoutPath).
+ (self todeSysDefaultWindowLayoutPath)}
+ do: [ :rootPath |
+ | path |
+ path := rootPath , windowLayoutFilename.
+ path asFileReference exists
+ ifTrue: [ ^ path ] ].
+ self
+ error:
+ 'The window layout ' , windowLayoutFilename printString
+ , ' was not found in the local|default/client/windowLayout directories' ].
+ ^ self todeRoot , '/' , self windowLayoutPath , windowLayoutFilename
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/onServer.do..st b/repository/Tode-Client-Common.package/TDShell.class/class/onServer.do..st
new file mode 100644
index 000000000..27901060e
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/onServer.do..st
@@ -0,0 +1,6 @@
+server blocks
+onServer: sessionName do: aBlock
+ | shell |
+ shell := (Smalltalk at: #TDShell) forSessionNamed: sessionName.
+ [ shell onServerDo: aBlock ]
+ ensure: [ shell windowIsClosing ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/open..st b/repository/Tode-Client-Common.package/TDShell.class/class/open..st
index 47bf8a6fd..5d07d2013 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/class/open..st
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/open..st
@@ -1,3 +1,3 @@
instance creation
open: aSessionName
- ^ self openFrom: self sessionDescriptionHome, aSessionName
\ No newline at end of file
+ ^ self openFrom: self todeSysLocalSessionDescriptionPath, aSessionName
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/pharoPath.st b/repository/Tode-Client-Common.package/TDShell.class/class/pharoPath.st
new file mode 100644
index 000000000..dec8d9ba6
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/pharoPath.st
@@ -0,0 +1,3 @@
+as yet unclassified
+pharoPath
+ ^ 'pharo/'
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/pharoWorldMenuOn..st b/repository/Tode-Client-Common.package/TDShell.class/class/pharoWorldMenuOn..st
new file mode 100644
index 000000000..86ae344f5
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/pharoWorldMenuOn..st
@@ -0,0 +1,9 @@
+system menu
+pharoWorldMenuOn: aBuilder
+
+ (aBuilder item: #'Pharo World Menu')
+ parent: #Pharo;
+ order: 2;
+ target: self;
+ icon: (Smalltalk ui icons pharoIcon scaledToSize: 16 @ 16);
+ action: [ self restorePharoWorldMenu ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/resetWorldMenu.st b/repository/Tode-Client-Common.package/TDShell.class/class/resetWorldMenu.st
index 9f9c7c5cf..37b58d3bf 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/class/resetWorldMenu.st
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/resetWorldMenu.st
@@ -1,3 +1,11 @@
system menu
resetWorldMenu
+ "self resetWorldMenu"
+
+ WorldState
+ desktopMenuTitle: nil;
+ desktopMenuPragmaKeyword: nil.
+ WorldState
+ desktopMenuTitle: 'tODE';
+ desktopMenuPragmaKeyword: 'todeWorldMenu'.
World resetWorldMenu
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/resizeTranscript..st b/repository/Tode-Client-Common.package/TDShell.class/class/resizeTranscript..st
new file mode 100644
index 000000000..7f5d65038
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/resizeTranscript..st
@@ -0,0 +1,12 @@
+transcript
+resizeTranscript: transcriptBounds
+ (World systemWindows
+ detect: [ :each | each model = Transcript ]
+ ifNone: [
+ | oldTranscript |
+ oldTranscript := Transcript.
+ ThreadSafeTranscript install.
+ self topezClientClass notifier dependents do: [ :client | client remapTranscriptClientForwarderFrom: oldTranscript to: Transcript ].
+ Transcript open ])
+ extent: transcriptBounds extent;
+ position: transcriptBounds origin
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/restorePharoWorldMenu.st b/repository/Tode-Client-Common.package/TDShell.class/class/restorePharoWorldMenu.st
new file mode 100644
index 000000000..f33bc6eb6
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/restorePharoWorldMenu.st
@@ -0,0 +1,8 @@
+system menu
+restorePharoWorldMenu
+ "self restorePharoWorldMenu"
+
+ WorldState
+ desktopMenuTitle: nil;
+ desktopMenuPragmaKeyword: nil.
+ World resetWorldMenu
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/serverScriptsPath.st b/repository/Tode-Client-Common.package/TDShell.class/class/serverScriptsPath.st
new file mode 100644
index 000000000..47784fbb5
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/serverScriptsPath.st
@@ -0,0 +1,3 @@
+home-private
+serverScriptsPath
+ ^ 'server/scripts/'
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/sessionDescription.evaluate.debugMode..st b/repository/Tode-Client-Common.package/TDShell.class/class/sessionDescription.evaluate.debugMode..st
index f08bc1042..167c620ef 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/class/sessionDescription.evaluate.debugMode..st
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/sessionDescription.evaluate.debugMode..st
@@ -3,4 +3,5 @@ sessionDescription: sessionDescription evaluate: script debugMode: aBool
| shell |
shell := self sessionDescription: sessionDescription debugMode: aBool.
shell batchMode: true.
- ^ shell evaluate: script
\ No newline at end of file
+ [ ^ shell evaluate: script ]
+ ensure: [ shell logout ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/sessionDescriptionHome.st b/repository/Tode-Client-Common.package/TDShell.class/class/sessionDescriptionHome.st
deleted file mode 100644
index e622a2b22..000000000
--- a/repository/Tode-Client-Common.package/TDShell.class/class/sessionDescriptionHome.st
+++ /dev/null
@@ -1,3 +0,0 @@
-home
-sessionDescriptionHome
- ^ self todeRoot , '/client/descriptions/'
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/startUp..st b/repository/Tode-Client-Common.package/TDShell.class/class/startUp..st
index 40d55159b..834c56077 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/class/startUp..st
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/startUp..st
@@ -3,4 +3,7 @@ startUp: resuming
resuming
ifTrue: [
self resetWorldMenu.
- [MCGitHubRepository resetCacheDirectoryIfInvalid] on: Error do: [:ignored | ] ]
\ No newline at end of file
+ [ MCGitHubRepository resetCacheDirectoryIfInvalid ]
+ on: Error
+ do: [ :ignored | ].
+ currentShell := nil ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/testLogin..st b/repository/Tode-Client-Common.package/TDShell.class/class/testLogin..st
index b1f197a73..00ec325c7 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/class/testLogin..st
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/testLogin..st
@@ -1,5 +1,5 @@
testing
testLogin: aSessionName
| sessionDescription |
- sessionDescription := TDSessionDescription importFrom: self sessionDescriptionHome , aSessionName.
+ sessionDescription := TDSessionDescription importFrom: self todeSysLocalSessionDescriptionPath , aSessionName.
^ self testLoginForSessionDescription: sessionDescription
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/testWindowLayout..st b/repository/Tode-Client-Common.package/TDShell.class/class/testWindowLayout..st
index 440e94785..6c657812d 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/class/testWindowLayout..st
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/testWindowLayout..st
@@ -1,7 +1,7 @@
testing
testWindowLayout: aSessionName
| sessionDescription shell|
- sessionDescription := TDSessionDescription importFrom: self sessionDescriptionHome , aSessionName.
+ sessionDescription := TDSessionDescription importFrom: self todeSysLocalSessionDescriptionPath , aSessionName.
shell := self new.
shell openOnSessionDescription: sessionDescription.
shell evaluate: 'bin/halt'.
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeDefineDevKitRootMenuItemOn..st b/repository/Tode-Client-Common.package/TDShell.class/class/todeDefineDevKitRootMenuItemOn..st
index abca12094..38fff1ac5 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/class/todeDefineDevKitRootMenuItemOn..st
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeDefineDevKitRootMenuItemOn..st
@@ -1,11 +1,12 @@
system menu
todeDefineDevKitRootMenuItemOn: aBuilder
-
+
(aBuilder item: #'Define Dev Kit Root')
- parent: #tODE;
- order: 10.1;
+ parent: #Client;
+ order: 2.26;
action: [
| path |
path := UIManager default request: 'Enter gsDevKit path' initialAnswer: self devKitRoot.
path isEmptyOrNil
- ifFalse: [ self devKitRoot: path ] ]
\ No newline at end of file
+ ifFalse: [ self devKitRoot: path ] ];
+ withSeparatorAfter
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeDefineTodeHelpMenuItemOn..st b/repository/Tode-Client-Common.package/TDShell.class/class/todeDefineTodeHelpMenuItemOn..st
index 59fbfcb87..f2154d10b 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/class/todeDefineTodeHelpMenuItemOn..st
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeDefineTodeHelpMenuItemOn..st
@@ -1,7 +1,9 @@
system menu
todeDefineTodeHelpMenuItemOn: aBuilder
-
+
(aBuilder item: #'Help')
parent: #tODE;
order: 20.0;
- action: [self new help]
\ No newline at end of file
+ icon: (Smalltalk ui icons helpIcon);
+ action: [self new help];
+ withSeparatorAfter
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeDefineTodeRootMenuItemOn..st b/repository/Tode-Client-Common.package/TDShell.class/class/todeDefineTodeRootMenuItemOn..st
new file mode 100644
index 000000000..1e246c2de
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeDefineTodeRootMenuItemOn..st
@@ -0,0 +1,11 @@
+system menu
+todeDefineTodeRootMenuItemOn: aBuilder
+
+ (aBuilder item: #'Define tODE Root')
+ parent: #Client;
+ order: 2.25;
+ action: [
+ | path |
+ path := UIManager default request: 'Enter tODE root path' initialAnswer: self todeRoot.
+ path isEmptyOrNil
+ ifFalse: [ self todeRoot: path ] ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeDefineWebEditionRootMenuItemOn..st b/repository/Tode-Client-Common.package/TDShell.class/class/todeDefineWebEditionRootMenuItemOn..st
deleted file mode 100644
index e27b2f96d..000000000
--- a/repository/Tode-Client-Common.package/TDShell.class/class/todeDefineWebEditionRootMenuItemOn..st
+++ /dev/null
@@ -1,11 +0,0 @@
-system menu
-todeDefineWebEditionRootMenuItemOn: aBuilder
-
- (aBuilder item: #'Define Web Edition Root')
- parent: #tODE;
- order: 10.0;
- action: [
- | path |
- path := UIManager default request: 'Enter webEditionRoot path' initialAnswer: self webEditionRoot.
- path isEmptyOrNil
- ifFalse: [ self webEditionRoot: path ] ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeImageWorkspacesOn..st b/repository/Tode-Client-Common.package/TDShell.class/class/todeImageWorkspacesOn..st
deleted file mode 100644
index fd5185b96..000000000
--- a/repository/Tode-Client-Common.package/TDShell.class/class/todeImageWorkspacesOn..st
+++ /dev/null
@@ -1,19 +0,0 @@
-system menu
-todeImageWorkspacesOn: aBuilder
-
- | workspaceDir |
- workspaceDir := self imageWorkspaceHome asFileReference.
- workspaceDir exists
- ifTrue: [
- (aBuilder item: #'tODE Workspaces')
- parent: #tODE;
- order: 4.5;
- target: self.
- (workspaceDir files sorted: [ :a :b | a fullName <= b fullName ])
- do: [ :file |
- (aBuilder item: file basename asSymbol)
- parent: #'tODE Workspaces';
- action: [
- | contents |
- FileStream readOnlyFileNamed: file fullName do: [ :fileStream | contents := fileStream contents ].
- self new openWorkspace: contents styling: true label: file basename ] ] ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeMenuCommandOn..st b/repository/Tode-Client-Common.package/TDShell.class/class/todeMenuCommandOn..st
index 122786604..b3de4d634 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/class/todeMenuCommandOn..st
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeMenuCommandOn..st
@@ -1,34 +1,39 @@
system menu
todeMenuCommandOn: aBuilder
-
+
| sessionDescriptionDir |
- sessionDescriptionDir := self sessionDescriptionHome asFileReference.
+ sessionDescriptionDir := self todeSysLocalSessionDescriptionPath asFileReference.
sessionDescriptionDir exists
ifTrue: [
- (aBuilder item: #'tODE Shell')
- parent: #tODE;
+ (aBuilder item: #'Open Shell')
order: 1.0;
target: self;
- withSeparatorAfter.
- (aBuilder item: #'tODE Edit')
- parent: #tODE;
- order: 1.5;
+ icon: Smalltalk ui icons scriptManagerIcon;
+ enabled: currentShell isNil.
+ (aBuilder item: #'Project List')
+ parent: #'Open Tool';
+ order: 1.0;
target: self;
- withSeparatorAfter.
- (aBuilder item: #'tODE Test Login')
- parent: #tODE;
+ icon: Smalltalk ui icons configIcon;
+ enabled: currentShell isNil.
+ (aBuilder item: #'Workspace')
+ parent: #'Open Tool';
order: 2.0;
- target: self.
- (aBuilder item: #'tODE Install')
- parent: #tODE;
- order: 3.0;
- target: self.
- (aBuilder item: #'tODE Update')
- parent: #tODE;
- order: 4.0;
target: self;
+ icon: Smalltalk ui icons workspaceIcon;
+ enabled: currentShell isNil.
+ (aBuilder item: #'Test Login')
+ parent: #Client;
+ order: 2.3;
+ enabled: currentShell isNil;
+ target: self;
+ icon: Smalltalk ui icons smallOkIcon;
withSeparatorAfter.
- (sessionDescriptionDir files sorted: [ :a :b | a fullName <= b fullName ])
+ (aBuilder item: #'Edit Description')
+ parent: #Client;
+ order: 1.2;
+ target: self.
+ (sessionDescriptionDir files sorted: [ :a :b | a basename <= b basename ])
do: [ :file |
file basename = 'README.md'
ifFalse: [ self importSessionDescriptionFrom: file for: aBuilder ] ] ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeOn..st b/repository/Tode-Client-Common.package/TDShell.class/class/todeOn..st
index c42ed76e6..9eef287ea 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/class/todeOn..st
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeOn..st
@@ -1,8 +1,61 @@
system menu
todeOn: aBuilder
-
- (aBuilder item: #tODE)
- order: 0.1;
+
+ (aBuilder item: #'Open Tool')
+ order: 1.05;
target: self;
- icon: (UITheme current iconNamed: #toolsIcon);
- withSeparatorAfter
\ No newline at end of file
+ icon: Smalltalk ui icons toolsIcon;
+ enabled: currentShell isNil;
+ withSeparatorAfter.
+ (aBuilder item: #Tools)
+ order: 1.1;
+ target: self;
+ enabled: currentShell notNil;
+ icon: Smalltalk ui icons toolsIcon.
+ (aBuilder item: #Client)
+ order: 2.0;
+ target: self;
+ icon: Smalltalk ui icons toolsIcon.
+ (aBuilder item: #Pharo)
+ order: 2.2;
+ target: self;
+ icon: (Smalltalk ui icons pharoIcon scaledToSize: 16 @ 16);
+ withSeparatorAfter.
+ (aBuilder item: #'Update tODE Client')
+ parent: #Client;
+ order: 2.2;
+ target: self;
+ icon: Smalltalk ui icons smallUpdateIcon;
+ action: [
+ | shell |
+ shell := self openSessionDescription: TDSessionDescription seaside evaluate: 'updateClient'.
+ shell exit ];
+ withSeparatorAfter.
+ (aBuilder item: #'Save Image')
+ parent: #Client;
+ order: 3.0;
+ icon: Smalltalk ui icons smallSaveIcon;
+ action: [ Smalltalk saveSession ].
+ (aBuilder item: #'Save Image')
+ parent: #Pharo;
+ order: 0.5;
+ icon: Smalltalk ui icons smallSaveIcon;
+ action: [ Smalltalk saveSession ];
+ withSeparatorAfter.
+ (aBuilder item: #Settings)
+ parent: #Pharo;
+ order: 1;
+ icon: Smalltalk ui icons smallConfigurationIcon;
+ action: [ SettingBrowser open ].
+ (aBuilder item: #Transcript)
+ order: 19.0;
+ icon: Smalltalk ui icons transcriptIcon;
+ action: [
+ | bounds |
+ bounds := TDTopezGemStoneClient windowProperties caculateWindowBounds at: #transcript.
+ self resizeTranscript: bounds ].
+ (aBuilder item: #'Exit tODE Client')
+ order: 100;
+ target: self;
+ icon: Smalltalk ui icons smallQuitIcon;
+ action: [ Smalltalk snapshot: false andQuit: true ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todePath..st b/repository/Tode-Client-Common.package/TDShell.class/class/todePath..st
new file mode 100644
index 000000000..b74a3ff53
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todePath..st
@@ -0,0 +1,3 @@
+home-private
+todePath: aDiskPathString
+ TodePath := aDiskPathString
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todePath.st b/repository/Tode-Client-Common.package/TDShell.class/class/todePath.st
index 720e0c994..e0e859a62 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/class/todePath.st
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todePath.st
@@ -1,4 +1,4 @@
home
todePath
- TodePath ifNil: [ TodePath := '/dev/tode/' ].
+ TodePath ifNil: [ TodePath := '/tode/' ].
^ TodePath
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todePharoPath.st b/repository/Tode-Client-Common.package/TDShell.class/class/todePharoPath.st
new file mode 100644
index 000000000..d36d26020
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todePharoPath.st
@@ -0,0 +1,3 @@
+home
+todePharoPath
+ ^self devKitRoot , '/pharo/'
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeRefreshMenuMenuItemOn..st b/repository/Tode-Client-Common.package/TDShell.class/class/todeRefreshMenuMenuItemOn..st
deleted file mode 100644
index 9e6e18c56..000000000
--- a/repository/Tode-Client-Common.package/TDShell.class/class/todeRefreshMenuMenuItemOn..st
+++ /dev/null
@@ -1,8 +0,0 @@
-system menu
-todeRefreshMenuMenuItemOn: aBuilder
-
- (aBuilder item: #'Refresh tODE menu')
- parent: #tODE;
- order: 15.0;
- action: [ self resetWorldMenu ];
- withSeparatorAfter
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeRoot..st b/repository/Tode-Client-Common.package/TDShell.class/class/todeRoot..st
new file mode 100644
index 000000000..9cea10456
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeRoot..st
@@ -0,0 +1,4 @@
+home-private
+todeRoot: aString
+ TodeRoot := aString.
+ self resetWorldMenu
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeRoot.st b/repository/Tode-Client-Common.package/TDShell.class/class/todeRoot.st
index 95aeefbbd..e924adde8 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/class/todeRoot.st
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeRoot.st
@@ -1,5 +1,4 @@
home
todeRoot
- | root |
- root := DevKitRoot ifNil: [ self webEditionRoot ] ifNotNil: [ self devKitRoot ].
- ^ root , self todePath
\ No newline at end of file
+ TodeRoot ifNil: [ TodeRoot := self devKitRoot , self todePath ].
+ ^ TodeRoot
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeSessionMenuOn..st b/repository/Tode-Client-Common.package/TDShell.class/class/todeSessionMenuOn..st
new file mode 100644
index 000000000..3feb0b348
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeSessionMenuOn..st
@@ -0,0 +1,40 @@
+system menu
+todeSessionMenuOn: aBuilder
+
+ false ifTrue: [ (aBuilder item: #'Logout')
+ order: 1.21;
+ target: self;
+ icon: Smalltalk ui icons smallQuitIcon;
+ enabled: currentShell notNil;
+ action: [
+ currentShell ifNil: [ ^ self ].
+ currentShell logout ]].
+ (aBuilder item: #'Exit Shell')
+ order: 1.22;
+ target: self;
+ icon: Smalltalk ui icons smallQuitIcon;
+ enabled: currentShell notNil;
+ action: [
+ currentShell ifNil: [ ^ self ].
+ currentShell exit ];
+ withSeparatorAfter.
+ (aBuilder item: #Windows)
+ order: 1.2;
+ target: self;
+ enabled: currentShell notNil;
+ icon: Smalltalk ui icons smallWindowIcon.
+ (aBuilder item: #'Close all session windows')
+ parent: #Windows;
+ order: 1.0;
+ target: self;
+ action: [
+ currentShell ifNil: [ ^ self ].
+ currentShell close ].
+ (aBuilder item: #'Find a session window')
+ parent: #Windows;
+ order: 2.0;
+ target: self;
+ action: [
+ currentShell ifNil: [ ^ self ].
+ currentShell console controlShiftLKeyStroke ];
+ withSeparatorAfter.
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeSessionToolsMenuOn..st b/repository/Tode-Client-Common.package/TDShell.class/class/todeSessionToolsMenuOn..st
new file mode 100644
index 000000000..494ae7d0f
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeSessionToolsMenuOn..st
@@ -0,0 +1,116 @@
+system menu
+todeSessionToolsMenuOn: aBuilder
+
+ (aBuilder item: #'Backups [bu]')
+ parent: #Tools;
+ order: 0.5;
+ icon: Smalltalk ui icons smallExportIcon;
+ target: self.
+ (aBuilder item: #'List backups')
+ parent: #'Backups [bu]';
+ order: 1;
+ action: [ currentShell ifNotNil: [ currentShell evaluate: 'gemtool bu list' ] ].
+ (aBuilder item: #'Backup to...')
+ parent: #'Backups [bu]';
+ order: 2;
+ action: [ currentShell ifNotNil: [ currentShell evaluate: 'gemtool bu backup' ] ].
+ (aBuilder item: #'Restore from...')
+ parent: #'Backups [bu]';
+ order: 2;
+ action: [ currentShell ifNotNil: [ currentShell evaluate: 'gemtool bu restore' ] ].
+ (aBuilder item: #'Breakpoints [break]')
+ parent: #Tools;
+ order: 0.5;
+ target: self;
+ icon: Smalltalk ui icons breakpointIcon;
+ action: [ currentShell ifNotNil: [ currentShell evaluate: 'break list' ] ].
+ (aBuilder item: #'Mark For Collect [gs]')
+ parent: #Tools;
+ order: 0.5;
+ target: self;
+ icon: Smalltalk ui icons smallDeleteIcon;
+ action: [ currentShell ifNotNil: [ currentShell evaluate: 'gs mfc' ] ].
+ (aBuilder item: #'Object Log [ol]')
+ parent: #Tools;
+ order: 1.0;
+ target: self;
+ icon: Smalltalk ui icons smallObjectsIcon;
+ action: [ currentShell ifNotNil: [ currentShell evaluate: 'ol view' ] ].
+ (aBuilder item: #'Packages [mc]')
+ parent: #Tools;
+ order: 2.0;
+ target: self;
+ action: [ currentShell ifNotNil: [ currentShell evaluate: 'mc list' ] ].
+ (aBuilder item: #'Processes [ps]')
+ parent: #Tools;
+ order: 3.0;
+ target: self;
+ icon: Smalltalk ui icons processBrowserIcon;
+ action: [ currentShell ifNotNil: [ currentShell evaluate: 'ps list' ] ].
+ (aBuilder item: #'Profile [pf]')
+ parent: #Tools;
+ order: 3.5;
+ icon: Smalltalk ui icons smallProfileIcon;
+ target: self.
+ (aBuilder item: #start)
+ parent: #'Profile [pf]';
+ order: 1.0;
+ target: self;
+ action: [ currentShell ifNotNil: [ currentShell evaluate: 'pf start' ] ].
+ (aBuilder item: #stop)
+ parent: #'Profile [pf]';
+ order: 2.0;
+ target: self;
+ action: [ currentShell ifNotNil: [ currentShell evaluate: 'pf view' ] ].
+ (aBuilder item: #'Project List [project]')
+ parent: #Tools;
+ order: 4.0;
+ target: self;
+ icon: Smalltalk ui icons configIcon;
+ action: [ currentShell ifNotNil: [ currentShell evaluate: 'project list' ] ].
+ (aBuilder item: #'Repositories [mr]')
+ parent: #Tools;
+ order: 5.0;
+ target: self;
+ action: [ currentShell ifNotNil: [ currentShell evaluate: 'mr list' ] ].
+ (aBuilder item: #'Test Runner [test]')
+ parent: #Tools;
+ order: 6.0;
+ target: self;
+ icon: Smalltalk ui icons testRunnerIcon;
+ action: [ currentShell ifNotNil: [ currentShell evaluate: 'test image' ] ].
+ (aBuilder item: #'Workspace [ws]')
+ parent: #Tools;
+ order: 7.0;
+ target: self;
+ icon: Smalltalk ui icons workspaceIcon;
+ action: [ currentShell ifNotNil: [ currentShell evaluate: 'ws' ] ].
+ (aBuilder item: #'Find [browse]')
+ parent: #Tools;
+ order: 0.5;
+ target: self;
+ icon: Smalltalk ui icons smallFindIcon.
+ (aBuilder item: #'Class...')
+ parent: #'Find [browse]';
+ order: 1;
+ action: [ currentShell ifNotNil: [ currentShell evaluate: 'gemtool find class' ] ].
+ (aBuilder item: #'Hierarchy Browser...')
+ order: 2;
+ parent: #'Find [browse]';
+ action: [ currentShell ifNotNil: [ currentShell evaluate: 'gemtool find hierarchy' ] ].
+ (aBuilder item: #'Class References...')
+ order: 3;
+ parent: #'Find [browse]';
+ action: [ currentShell ifNotNil: [ currentShell evaluate: 'gemtool find references' ] ].
+ (aBuilder item: #'Method...')
+ order: 4;
+ parent: #'Find [browse]';
+ action: [ currentShell ifNotNil: [ currentShell evaluate: 'gemtool find method' ] ].
+ (aBuilder item: #'Senders...')
+ order: 5;
+ parent: #'Find [browse]';
+ action: [ currentShell ifNotNil: [ currentShell evaluate: 'gemtool find senders' ] ].
+ (aBuilder item: #'String...')
+ order: 6;
+ parent: #'Find [browse]';
+ action: [ currentShell ifNotNil: [ currentShell evaluate: 'gemtool find string' ] ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeSysDefaultClientScriptsPath.st b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysDefaultClientScriptsPath.st
new file mode 100644
index 000000000..fa1cf064c
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysDefaultClientScriptsPath.st
@@ -0,0 +1,3 @@
+home
+todeSysDefaultClientScriptsPath
+ ^self todeSysDefaultPath , self clientScriptsPath
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeSysDefaultPath.st b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysDefaultPath.st
new file mode 100644
index 000000000..c0c81bc42
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysDefaultPath.st
@@ -0,0 +1,3 @@
+home
+todeSysDefaultPath
+ ^self todeSysPath , '/default/'
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeSysDefaultPharoPath.st b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysDefaultPharoPath.st
new file mode 100644
index 000000000..8ee04d2cf
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysDefaultPharoPath.st
@@ -0,0 +1,3 @@
+as yet unclassified
+todeSysDefaultPharoPath
+ ^self todeSysDefaultPath , self pharoPath
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeSysDefaultServerScriptsPath.st b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysDefaultServerScriptsPath.st
new file mode 100644
index 000000000..d09b4e9c5
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysDefaultServerScriptsPath.st
@@ -0,0 +1,3 @@
+home
+todeSysDefaultServerScriptsPath
+ ^self todeSysDefaultPath , self serverScriptsPath
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeSysDefaultWindowLayoutPath.st b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysDefaultWindowLayoutPath.st
new file mode 100644
index 000000000..6d5a85fab
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysDefaultWindowLayoutPath.st
@@ -0,0 +1,3 @@
+home
+todeSysDefaultWindowLayoutPath
+ ^self todeSysDefaultPath , self windowLayoutPath
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeSysLocalClientScriptsPath.st b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysLocalClientScriptsPath.st
new file mode 100644
index 000000000..55c9a6397
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysLocalClientScriptsPath.st
@@ -0,0 +1,3 @@
+home
+todeSysLocalClientScriptsPath
+ ^self todeSysLocalPath , self clientScriptsPath
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeSysLocalPath.st b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysLocalPath.st
new file mode 100644
index 000000000..afdf3fead
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysLocalPath.st
@@ -0,0 +1,3 @@
+home
+todeSysLocalPath
+ ^self todeSysPath , '/local/'
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeSysLocalPharoPath.st b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysLocalPharoPath.st
new file mode 100644
index 000000000..c3c0b9e71
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysLocalPharoPath.st
@@ -0,0 +1,3 @@
+as yet unclassified
+todeSysLocalPharoPath
+ ^self todeSysLocalPath , self pharoPath
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeSysLocalServerScriptsPath.st b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysLocalServerScriptsPath.st
new file mode 100644
index 000000000..1ca2e93ee
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysLocalServerScriptsPath.st
@@ -0,0 +1,3 @@
+home
+todeSysLocalServerScriptsPath
+ ^self todeSysLocalPath , self serverScriptsPath
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeSysLocalSessionDescriptionPath.st b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysLocalSessionDescriptionPath.st
new file mode 100644
index 000000000..7d0c6e6f7
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysLocalSessionDescriptionPath.st
@@ -0,0 +1,7 @@
+home
+todeSysLocalSessionDescriptionPath
+ | clientDescriptionsPath |
+ clientDescriptionsPath := 'client/descriptions/'.
+ self useTodeSys
+ ifTrue: [ ^ self todeSysLocalPath , clientDescriptionsPath ].
+ ^ self todeRoot , '/' , clientDescriptionsPath
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeSysLocalWindowLayoutPath.st b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysLocalWindowLayoutPath.st
new file mode 100644
index 000000000..5df13ecec
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysLocalWindowLayoutPath.st
@@ -0,0 +1,3 @@
+home
+todeSysLocalWindowLayoutPath
+ ^self todeSysLocalPath , self windowLayoutPath
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeSysPath.st b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysPath.st
new file mode 100644
index 000000000..7a8c95bfb
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysPath.st
@@ -0,0 +1,3 @@
+home
+todeSysPath
+ ^self todeRoot , '/sys/'
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeSysStonePath..st b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysStonePath..st
new file mode 100644
index 000000000..22f2d50c6
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeSysStonePath..st
@@ -0,0 +1,3 @@
+home
+todeSysStonePath: stoneName
+ ^self todeSysPath , '/stones/' , stoneName, '/'
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeUpdateClientMenuItemOn..st b/repository/Tode-Client-Common.package/TDShell.class/class/todeUpdateClientMenuItemOn..st
deleted file mode 100644
index e6310c899..000000000
--- a/repository/Tode-Client-Common.package/TDShell.class/class/todeUpdateClientMenuItemOn..st
+++ /dev/null
@@ -1,10 +0,0 @@
-system menu
-todeUpdateClientMenuItemOn: aBuilder
-
- (aBuilder item: #'Update tODE client')
- parent: #tODE;
- order: 9.0;
- action: [
- | shell |
- shell := self openSessionDescription: TDSessionDescription seaside evaluate: 'script --script=updateClient'.
- shell exit ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeWindowPropertiesCommandOn..st b/repository/Tode-Client-Common.package/TDShell.class/class/todeWindowPropertiesCommandOn..st
index 3d67d7132..8d904a837 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/class/todeWindowPropertiesCommandOn..st
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeWindowPropertiesCommandOn..st
@@ -1,20 +1,37 @@
system menu
todeWindowPropertiesCommandOn: aBuilder
-
- | windowLayoutDir |
- windowLayoutDir := self windowLayoutHome asFileReference.
- windowLayoutDir exists
+
+ | windowLayoutFiles |
+ windowLayoutFiles := self windowLayoutFiles.
+ windowLayoutFiles notEmpty
ifTrue: [
- (aBuilder item: #'tODE Window Layout')
- parent: #tODE;
- order: 5.0;
+ (aBuilder item: #'Window Layout')
+ parent: #Client;
+ order: 1.1;
+ withSeparatorAfter.
+ (aBuilder item: #'Edit Window Layout')
+ parent: #Client;
+ order: 1.7;
target: self;
withSeparatorAfter.
- (windowLayoutDir files sorted: [ :a :b | a fullName <= b fullName ])
+ (windowLayoutFiles sorted: [ :a :b | a basename <= b basename ])
do: [ :file |
- (aBuilder item: file basename asSymbol)
- parent: #'tODE Window Layout';
- action: [
- | windowProperties |
- windowProperties := TDAbstractWindowProperties importFrom: file fullName.
- windowProperties installOn: TDTopezGemStoneClient ] ] ]
\ No newline at end of file
+ file basename = 'README.md'
+ ifFalse: [
+ (aBuilder item: file basename asSymbol)
+ parent: #'Window Layout';
+ action: [
+ | windowProperties transcriptBounds |
+ windowProperties := TDAbstractWindowProperties importFrom: file fullName.
+ windowProperties installOn: TDTopezGemStoneClient.
+ transcriptBounds := windowProperties caculateWindowBounds at: #transcript.
+ self resizeTranscript: transcriptBounds ].
+ (aBuilder item: file basename asSymbol)
+ parent: #'Edit Window Layout';
+ action: [
+ | windowProperties |
+ windowProperties := TDAbstractWindowProperties importFrom: file fullName.
+ self new
+ openWorkspace: (TDShell windowLayoutWorkspaceNamed: file basename for: windowProperties)
+ styling: false
+ label: file basename ] ] ] ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/todeWorldMenuOn..st b/repository/Tode-Client-Common.package/TDShell.class/class/todeWorldMenuOn..st
new file mode 100644
index 000000000..bfdf20a69
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/todeWorldMenuOn..st
@@ -0,0 +1,10 @@
+system menu
+todeWorldMenuOn: aBuilder
+
+ (aBuilder item: #'tODE World Menu')
+ order: 0.1;
+ target: self;
+ icon: (Smalltalk ui icons toolsIcon);
+ action: [ self resetWorldMenu ];
+ withSeparatorAfter
+
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/updateServerHome.st b/repository/Tode-Client-Common.package/TDShell.class/class/updateServerHome.st
deleted file mode 100644
index e415a9cc3..000000000
--- a/repository/Tode-Client-Common.package/TDShell.class/class/updateServerHome.st
+++ /dev/null
@@ -1,3 +0,0 @@
-home
-updateServerHome
- ^ self todeRoot , '/server/'
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/useTodeSys..st b/repository/Tode-Client-Common.package/TDShell.class/class/useTodeSys..st
new file mode 100644
index 000000000..6ded21333
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/useTodeSys..st
@@ -0,0 +1,3 @@
+home-private
+useTodeSys: aBool
+ UseTodeSys := aBool
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/useTodeSys.st b/repository/Tode-Client-Common.package/TDShell.class/class/useTodeSys.st
new file mode 100644
index 000000000..e1ba03573
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/useTodeSys.st
@@ -0,0 +1,4 @@
+accessing
+useTodeSys
+ UseTodeSys ifNil: [ UseTodeSys := true ].
+ ^ UseTodeSys
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/webEditionRoot..st b/repository/Tode-Client-Common.package/TDShell.class/class/webEditionRoot..st
deleted file mode 100644
index 80ddd542c..000000000
--- a/repository/Tode-Client-Common.package/TDShell.class/class/webEditionRoot..st
+++ /dev/null
@@ -1,5 +0,0 @@
-home
-webEditionRoot: aString
- WebEditionRoot := aString.
- TodePath := '/dev/tode/'.
- self resetWorldMenu
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/webEditionRoot.st b/repository/Tode-Client-Common.package/TDShell.class/class/webEditionRoot.st
deleted file mode 100644
index b53026f7d..000000000
--- a/repository/Tode-Client-Common.package/TDShell.class/class/webEditionRoot.st
+++ /dev/null
@@ -1,4 +0,0 @@
-home
-webEditionRoot
- WebEditionRoot ifNil: [ WebEditionRoot := '/opt/git/webEditionHome' ].
- ^ WebEditionRoot
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/windowLayoutFiles.st b/repository/Tode-Client-Common.package/TDShell.class/class/windowLayoutFiles.st
new file mode 100644
index 000000000..3ec149baa
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/windowLayoutFiles.st
@@ -0,0 +1,15 @@
+home
+windowLayoutFiles
+ self useTodeSys
+ ifTrue: [
+ | map |
+ map := Dictionary new.
+ {(self todeSysDefaultWindowLayoutPath).
+ (self todeSysLocalWindowLayoutPath)}
+ do: [ :rootPath |
+ | reference |
+ reference := rootPath asFileReference.
+ reference exists
+ ifTrue: [ reference files do: [ :fileRef | map at: fileRef basename put: fileRef ] ] ].
+ ^ map values ].
+ ^ self todeRoot , '/' , self windowLayoutPath asFileReference files
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/windowLayoutHome.st b/repository/Tode-Client-Common.package/TDShell.class/class/windowLayoutHome.st
deleted file mode 100644
index 0cdbbf191..000000000
--- a/repository/Tode-Client-Common.package/TDShell.class/class/windowLayoutHome.st
+++ /dev/null
@@ -1,3 +0,0 @@
-home
-windowLayoutHome
- ^ self todeRoot , '/client/windowLayout/'
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/windowLayoutPath.st b/repository/Tode-Client-Common.package/TDShell.class/class/windowLayoutPath.st
new file mode 100644
index 000000000..8dd40fd65
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/windowLayoutPath.st
@@ -0,0 +1,3 @@
+home-private
+windowLayoutPath
+ ^ 'client/windowLayout/'
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/class/windowLayoutWorkspaceNamed.for..st b/repository/Tode-Client-Common.package/TDShell.class/class/windowLayoutWorkspaceNamed.for..st
new file mode 100644
index 000000000..07b962f90
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/class/windowLayoutWorkspaceNamed.for..st
@@ -0,0 +1,12 @@
+accessing
+windowLayoutWorkspaceNamed: propertyName for: aWindowProperties
+ ^ '"Set the `sessionDescriptName`, then djust parameters to change proportions
+ or configuration of layout. "
+| layoutName layout sessionDescriptionName |
+
+layoutName := ', propertyName printString, '.
+sessionDescriptionName := ''gsDevKit''.
+layout := ' , aWindowProperties printString, '
+ layout exportTo: TDShell todeSysLocalWindowLayoutPath, layoutName.
+TDAbstractWindowProperties install: layoutName.
+TDShell testWindowLayout: sessionDescriptionName.'
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/accumulateText..st b/repository/Tode-Client-Common.package/TDShell.class/instance/accumulateText..st
index 60913b916..582331f11 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/instance/accumulateText..st
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/accumulateText..st
@@ -1,15 +1,15 @@
evaluator engine
accumulateText: line
- | actionArray result stream block |
- (line isNil or: [ line beginsWith: '%' ])
- ifFalse: [
- inputStream
- nextPutAll: line;
- cr.
- ^ '' ].
- block := self actionStack removeFirst.
- actionArray := self stateStack removeFirst.
- stream := inputStream.
- promptString := actionArray at: 2.
- inputStream := actionArray at: 1.
- ^ (block value: stream) convertTDEvaluateTokenResponseToText
\ No newline at end of file
+ | actionArray stream block |
+ (line isNil or: [ line beginsWith: '%' ])
+ ifFalse: [
+ inputStream
+ nextPutAll: line;
+ cr.
+ ^ '' ].
+ block := self actionStack removeFirst.
+ actionArray := self stateStack removeFirst.
+ stream := inputStream.
+ promptString := actionArray at: 2.
+ inputStream := actionArray at: 1.
+ ^ (block value: stream) convertTDEvaluateTokenResponseToText: self objectSerializer
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/builtInCommands.st b/repository/Tode-Client-Common.package/TDShell.class/instance/builtInCommands.st
index 330c03fda..6058f977a 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/instance/builtInCommands.st
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/builtInCommands.st
@@ -1,3 +1,3 @@
built-ins
builtInCommands
- ^ #('builtIns' 'close' 'collapse' 'debugMode' 'exit' 'expand' 'help' 'logout' 'restoreBackup' 'script' 'sessionDescription' 'testLogin' 'updateClient' 'updateServer' 'installServer' 'whatsNew')
\ No newline at end of file
+ ^ #('builtIns' 'close' 'collapse' 'debugMode' 'exit' 'expand' 'help' 'installServer' 'logout' 'restoreBackup' 'script' 'sessionDescription' 'testLogin' 'updateClient')
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/builtIns.st b/repository/Tode-Client-Common.package/TDShell.class/instance/builtIns.st
index 418a1077a..e18d0083e 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/instance/builtIns.st
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/builtIns.st
@@ -42,7 +42,7 @@ DESCRIPTION
----
tODE help.
- installServer
+installServer
-----------
Install tODE on the server. See `installServer -h` for more information.
@@ -90,14 +90,6 @@ DESCRIPTION
------------
Update the tODE client software. See `updateClient -h` for more information.
- updateServer
- -----------
- Update tODE on the server. See `updateServer -h` for more information.
-
- whatsNew
- --------
- Description of new features.
-
EXAMPLES
builtIns
close
@@ -111,9 +103,6 @@ EXAMPLES
sessionDescription -h
testLogin
updateClient -h
- updateServer -h
- whatsNew
-
'
label: 'Help for tODE built-in commands'.
^ 'EXAMPLES
@@ -129,5 +118,4 @@ EXAMPLES
sessionDescription -h
testLogin
updateClient -h
- whatsNew
'
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/close.st b/repository/Tode-Client-Common.package/TDShell.class/instance/close.st
index 7397cbc50..824506208 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/instance/close.st
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/close.st
@@ -3,5 +3,5 @@ close
"close all windows"
windowStatus ifNil: [ ^ nil ].
- windowStatus close.
+ self deferFlushEventNotificationDuring: [ windowStatus close ].
^ nil
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/console.st b/repository/Tode-Client-Common.package/TDShell.class/instance/console.st
index 0efef5348..11b68263b 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/instance/console.st
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/console.st
@@ -1,3 +1,11 @@
stash
console
- ^ console
\ No newline at end of file
+ false
+ ifTrue: [
+ console
+ ifNil: [
+ console := TodeConsole todeConsole: self.
+ shellWindow := console openAsMorphLabel: self shellId asString , ': ' , self label welcome: true.
+ shellWindow activate.
+ self windowRegistration ] ].
+ ^ console
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/deferFlushEventNotificationDuring..st b/repository/Tode-Client-Common.package/TDShell.class/instance/deferFlushEventNotificationDuring..st
new file mode 100644
index 000000000..da5378d10
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/deferFlushEventNotificationDuring..st
@@ -0,0 +1,13 @@
+built-ins
+deferFlushEventNotificationDuring: aBlock
+ "defer flushEventCache until all windows are closed."
+
+ | shouldFlushEventCache |
+ shouldFlushEventCache := false.
+ aBlock
+ on: TDShouldFlushEventCacheNotification
+ do: [ :ex |
+ shouldFlushEventCache := true.
+ ex resume: false ].
+ shouldFlushEventCache
+ ifTrue: [ self topezClient flushEventCache ].
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/evaluate..st b/repository/Tode-Client-Common.package/TDShell.class/instance/evaluate..st
index 629a3f031..0fa44bd8a 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/instance/evaluate..st
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/evaluate..st
@@ -1,17 +1,18 @@
evaluator engine
evaluate: aString
[
- | line stream result |
- stream := aString readStream.
- [
- line := stream nextLine.
- line ~~ nil ]
- whileTrue: [
+ | result |
+ TDCommandLine
+ fromStream: aString readStream
+ selectLine: [ :line |
self actionStack notEmpty
- ifTrue: [ result := self accumulateText: line ]
+ ifTrue: [
+ result := self accumulateText: line.
+ false "do not create or evaluate command for this line" ]
ifFalse: [
self addToHistory: line.
- TDCommandLine line: line forEachCommand: [ :command | result := self evaluateCommand: command ] ] ].
+ true "create and evaluate the command for this line" ] ]
+ forEachCommand: [ :command | result := self evaluateCommand: command ].
^ result ]
on: Error , TDRestoreFromBackupComplete , GsTopezCommandErrorNotification
do: [ :ex |
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/evaluateCommand..st b/repository/Tode-Client-Common.package/TDShell.class/instance/evaluateCommand..st
index bd780c5fd..91e70efa6 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/instance/evaluateCommand..st
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/evaluateCommand..st
@@ -6,4 +6,5 @@ evaluateCommand: command
ifTrue: [ ^ '' ].
(self builtInCommands includes: command command)
ifTrue: [ ^ self executeBuiltIn: command ].
- ^ (self topezClient evaluateCommand: command batchMode: self batchMode) convertTDEvaluateTokenResponseToText
\ No newline at end of file
+ ^ (self topezClient evaluateCommand: command batchMode: self batchMode)
+ convertTDEvaluateTokenResponseToText: self objectSerializer
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/evaluateSTONSmalltalk..st b/repository/Tode-Client-Common.package/TDShell.class/instance/evaluateSTONSmalltalk..st
new file mode 100644
index 000000000..b73ec2fb8
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/evaluateSTONSmalltalk..st
@@ -0,0 +1,3 @@
+evaluator engine
+evaluateSTONSmalltalk: aString
+ ^ self topezClient evaluateSTONSmalltalk: aString batchMode: self batchMode
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/evaluateSTONSmalltalk.variableBindings..st b/repository/Tode-Client-Common.package/TDShell.class/instance/evaluateSTONSmalltalk.variableBindings..st
new file mode 100644
index 000000000..7af521857
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/evaluateSTONSmalltalk.variableBindings..st
@@ -0,0 +1,3 @@
+evaluator engine
+evaluateSTONSmalltalk: smalltalkSource variableBindings: variableBindings
+ ^ self topezClient evaluateSTONSmalltalk: smalltalkSource variableBindings: variableBindings batchMode: self batchMode
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/executeBuiltIn..st b/repository/Tode-Client-Common.package/TDShell.class/instance/executeBuiltIn..st
index 61ecf96a4..f9401dc9b 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/instance/executeBuiltIn..st
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/executeBuiltIn..st
@@ -5,21 +5,18 @@ executeBuiltIn: command
^ cmd = 'installServer'
ifTrue: [ self executeInstallServer: command ]
ifFalse: [
- cmd = 'updateServer'
- ifTrue: [ self executeUpdateServer: command ]
+ cmd = 'restoreBackup'
+ ifTrue: [ self executeRestoreBackup: command ]
ifFalse: [
- cmd = 'restoreBackup'
- ifTrue: [ self executeRestoreBackup: command ]
+ cmd = 'script'
+ ifTrue: [ self executeScript: command ]
ifFalse: [
- cmd = 'script'
- ifTrue: [ self executeScript: command ]
+ cmd = 'sessionDescription'
+ ifTrue: [ self executeSessionDescription: command ]
ifFalse: [
- cmd = 'sessionDescription'
- ifTrue: [ self executeSessionDescription: command ]
+ cmd = 'updateClient'
+ ifTrue: [ self executeUpdateClient: command ]
ifFalse: [
- cmd = 'updateClient'
- ifTrue: [ self executeUpdateClient: command ]
- ifFalse: [
- cmd = 'debugMode'
- ifTrue: [ self executeDebugMode: command ]
- ifFalse: [ self perform: cmd asSymbol ] ] ] ] ] ] ]
\ No newline at end of file
+ cmd = 'debugMode'
+ ifTrue: [ self executeDebugMode: command ]
+ ifFalse: [ self perform: cmd asSymbol ] ] ] ] ] ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/executeInstallServer..st b/repository/Tode-Client-Common.package/TDShell.class/instance/executeInstallServer..st
index 9eeeb8bfc..9a28c04cf 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/instance/executeInstallServer..st
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/executeInstallServer..st
@@ -1,69 +1,43 @@
built-ins
executeInstallServer: command
- | options |
- command
- getOptsMixedLongShort:
- {#('help' $h #none).
- #('clientScriptPath' nil #required).
- #('force' $f #none).
- #('serverScriptPath' nil #required).
- #('topaz' $t #none)}
- optionsAndArguments: [ :opts :args | options := opts ].
- options
- at: 'help'
- ifAbsent: [
- | forceGLASSInstall scriptDirectory |
- options at: 'force' ifPresent: [ :ignored | forceGLASSInstall := true ] ifAbsent: [ forceGLASSInstall := false ].
- scriptDirectory := self scriptDirectoryFrom: options.
- options
- at: 'topaz'
- ifPresent: [ ^ self topezClient installTodeTopazScript: forceGLASSInstall scriptDirectory: scriptDirectory ].
- ^ self topezClient installTode: forceGLASSInstall scriptDirectory: scriptDirectory ]
- ifPresent: [ :ignored |
- ^ (TDMultiLineText new
- prompt: 'Help for ' , command command;
- template:
- 'NAME
- installServer - install tODE on the server
-
-SYNOPSIS
- installServer [-h|--help]
- installServer [-t|--topaz] --serverScriptPath=
- installServer [-t|--topaz] --clientScriptPath=
- installServer
-
-DESCRIPTION
- With no arguments, install tODE into a "seaside extent" (an extent with GLASS already installed).
- The standard installation involves the following steps:
- 1. upgrade GLASS to 1.0-beta9.1
- 2. install Metacello from github://dalehenrich/metacello-work:master/repository
- 3. install GLASS1 from github://glassdb/glass:master/repository
- 4. install Tode from github://dalehenrich/tode:master/repository
- If tODE has already been installed, step 1 is skipped and the remaining steps are performed.
-
- For each of the steps, installServer executes a Smalltalk script that is loaded from a directory
- on disk. If neither --clientScriptPath nor --serverScriptPath is specified then installServer expects
- to find a directory called `updateServer` as a sibling to the `repository` directory from which the
- BaselineOfTode has been installed on the client system.
-
- If --clientScriptPath is specified, the scripts will be loaded from the specified directory on
- the client system. If is a relative path, the path will be appended
- to TDShell class>>serverScriptsHome.
-
- If --serverScriptPath is specified, the scripts will be loaded from the specified directory on
- the server system - where the stone and gems are executing. If is a
- relative path, the path will be appended to TDShell class>>serverScriptsHome.
-
- If --topaz is present, instead of executing the install script, it is returned as a topaz script.
-
-EXAMPLES
- installServer -h
- installServer
- installServer --clientScriptPath=installTode
- installServer --clientScriptPath=/opt/git/tode/installTode
- installServer --serverScriptPath=install
- installServer --serverScriptPath=/opt/git/todeHome/install
- installServer --topaz --clientScriptPath=/opt/git/tode/installTode
-
-')
- interact ]
+ | options |
+ command
+ getOptsMixedLongShort:
+ {#('help' $h #'none').
+ #('scriptPath' nil #'required')}
+ optionsAndArguments: [ :opts :args | options := opts ].
+ options
+ at: 'help'
+ ifAbsent: [ ^ self topezClient installTode: options ]
+ ifPresent: [ :ignored |
+ ^ (TDMultiLineText new
+ prompt: 'Help for ' , command command;
+ template: 'NAME
+ installServer - install tODE on the server
+
+ SYNOPSIS
+ installServer [-h|--help]
+ installServer [--scriptPath=]
+
+ DESCRIPTION
+ Install tODE into a $GEMSTONE/bin/extent0.seaside.dbf extent. The installation involves the following steps:
+ 1. upgrade GLASS (file name `upgradeGLASS.ws`)
+ 2. install Metacello (file name `installMetacello.ws`)
+ 3. install GLASS1 (file name `installGLASS1.ws`)
+ 4. install Tode (file name `installTode.ws`)
+ If tODE has already been installed, step 1 is skipped and the remaining steps are performed.
+
+ For each of the steps, installServer executes a Smalltalk script that is loaded from a file
+ on disk.
+
+ With no arguments specified, each file will be located by looking for the file in the following directories:
+ $GS_HOME/tode/sys/local/server/scripts
+ $GS_HOME/tode/sys/default/server/scripts
+
+ If --scriptPath is specified, then each of the files is expected to be found in that directory.
+
+ EXAMPLES
+ installServer -h
+ installServer
+ installServer --scriptPath=/opt/git/tode/installTode
+ ') interact ]
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/executeScript..st b/repository/Tode-Client-Common.package/TDShell.class/instance/executeScript..st
index 3c8c00445..95b0c0640 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/instance/executeScript..st
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/executeScript..st
@@ -1,12 +1,21 @@
built-ins
executeScript: command
- | options |
+ | options arguments |
command
getOptsMixedLongShort:
{#('help' $h #none).
- #('script' nil #required).
- #('list' nil #required)}
- optionsAndArguments: [ :opts :args | options := opts ].
+ #('edit' nil #none).
+ #('list' nil #optional).
+ #('script' nil #required)}
+ optionsAndArguments: [ :opts :args |
+ options := opts.
+ arguments := args ].
+ options
+ at: 'script'
+ ifAbsent: [
+ "backwards compat for `script --script=` form"
+ arguments size = 1
+ ifTrue: [ options at: 'script' put: (arguments at: 1) ] ].
options
at: 'help'
ifAbsent: [
@@ -16,26 +25,32 @@ executeScript: command
| commands filepath |
filepath := filename.
(filename beginsWith: '/')
- ifFalse: [ filepath := TDShell clientScriptsHome , filename ].
+ ifFalse: [ filepath := TDShell lookupClientScripts: filename stoneName: self stoneName ].
FileStream readOnlyFileNamed: filepath do: [ :fileStream | commands := fileStream contents ].
- ^ self evaluate: commands ].
- options
- at: 'list'
- ifPresent: [ :dirname |
- | dir fileNames dirPath |
- dirPath := dirname.
- dirPath ifNil: [ dirPath := TDShell clientScriptsHome ].
- dir := MCFileTreeFileUtils current directoryFromPath: dirPath.
- fileNames := WriteStream on: String new.
- dir entries
- do: [ :entry |
- fileNames
- nextPutAll: entry name;
- cr ].
- ^ fileNames contents ].
- ^ 'must specify an option:
+ options
+ at: 'edit'
+ ifPresent: [ :ignored |
+ self openWorkspace: commands styling: false label: filepath.
+ ^ '' ]
+ ifAbsent: [ ^ self evaluate: commands ] ]
+ ifAbsent: [
+ options
+ at: 'list'
+ ifPresent: [ :dirname |
+ | files fileNames |
+ files := dirname
+ ifNotNil: [ dirname asFileReference files ]
+ ifNil: [ TDShell clientScriptsFiles: self stoneName ].
+ fileNames := WriteStream on: String new.
+ files
+ do: [ :fileRef |
+ fileNames
+ nextPutAll: fileRef basename;
+ cr ].
+ ^ fileNames contents ] ].
+ ^ 'must specify an option or argument:
script -h
- script --script=installTode
+ script installTode
script --list' ]
ifPresent: [ :ignored |
^ (TDMultiLineText new
@@ -45,14 +60,17 @@ executeScript: command
script - run sequence of commands from client
SYNOPSIS
- script [-h|--help] [--script=] [--list[=]]
+ script [-h|--help] ( [--edit ] | --list[=] )
DESCRIPTION
Executes scripts stored in a directory on the client. Useful for scripts involving
installation of tODE or that may do one or more `logout` commands.
- With the --script option, the commands in the specified file are executed. If the
- is a relative path, the path is appended to TDShell
- class>>clientScriptsHome
+ With no options, the commands in the file are executed. If the
+ < is a relative path, the path is appended to TDShell
+ class>>clientScriptsHome.
+
+ With the --edit option, a workspace is brought up on the contents of the .
+ file.
With the --list option, the files in the specified directory are listed. If the
is not specified, the files in TDShell class>>clientScriptsHome are
@@ -62,6 +80,7 @@ EXAMPLES
script -h
script --list
script --list=/opt/git/todeHome/client/scripts
- script --script=installTode
- script --script=/opt/git/todeHome/client/scripts/installTode
+ script installTode
+ script --edit installTode
+ script /opt/git/todeHome/client/scripts/installTode
') interact ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/executeUpdateClient..st b/repository/Tode-Client-Common.package/TDShell.class/instance/executeUpdateClient..st
index 7f8aca562..3a275131a 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/instance/executeUpdateClient..st
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/executeUpdateClient..st
@@ -1,48 +1,18 @@
built-ins
executeUpdateClient: command
| options |
- command
- getOptsMixedLongShort:
- {#('help' $h #none).
- #('clientRepo' nil #required).
- #('lock' nil #none)}
- optionsAndArguments: [ :opts :args | options := opts ].
+ command getOptsMixedLongShort: {#('help' $h #none)} optionsAndArguments: [ :opts :args | options := opts ].
options
at: 'help'
ifAbsent: [
- options
- at: 'clientRepo'
- ifPresent: [ :todeRepository |
- | result |
- [
- Metacello new
- baseline: 'Tode';
- repository: todeRepository;
- get.
- options
- at: 'lock'
- ifPresent: [ :ignored |
- Metacello new
- baseline: 'Tode';
- repository: todeRepository;
- lock ].
- result := Metacello new
- baseline: 'Tode';
- repository: todeRepository;
- onConflict: [ :ex | ex allow ];
- load: 'GemStone Dev' ]
- on: Warning
- do: [ :ex |
- Transcript
- cr;
- show: 'WARNING: ' , ex description.
- ex pass ].
- self class resetWorldMenu.
- ^ result printString ].
- ^ 'Must specify options:
- updateClient --help
- updateClient --clientRepo=github://dalehenrich/tode:master
- updateClient --clientRepo=filetree:///opt/git/tode/repository' ]
+ | filePath todeLoadSource |
+ filePath := self class lookupPharoScript: 'todeLoad.st'.
+ filePath asFileReference readStreamDo: [ :fileStream | todeLoadSource := fileStream contents ].
+ Compiler evaluate: todeLoadSource.
+ false
+ ifTrue: [ Smalltalk snapshot: true andQuit: false ].
+ self class resetWorldMenu.
+ ^ 'Client updated' ]
ifPresent: [ :ignored |
^ (TDMultiLineText new
prompt: 'Help for ' , command command;
@@ -52,15 +22,11 @@ executeUpdateClient: command
SYNOPSIS
updateClient --help
- updateClient --clientRepo=
-
-DESCRIPTION
- Update the tODE software on the client.
- --clientRepo option specifies the repository form which tODE will be loaded.
+DESCRIPTION
+ Update the Metacello and tODE software on the client, using the todeLoad.st file in $GS_HOME/tode/sys/default|local/pharo.
EXAMPLES
updateClient --help
- updateClient --clientRepo=github://dalehenrich/tode:master
- updateClient --clientRepo=filetree:///opt/git/tode/repository
+ updateClient
') interact ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/executeUpdateServer..st b/repository/Tode-Client-Common.package/TDShell.class/instance/executeUpdateServer..st
deleted file mode 100644
index b7b9ca0ff..000000000
--- a/repository/Tode-Client-Common.package/TDShell.class/instance/executeUpdateServer..st
+++ /dev/null
@@ -1,54 +0,0 @@
-built-ins
-executeUpdateServer: command
- | options |
- command
- getOptsMixedLongShort:
- {#('help' $h #none).
- #('clientScriptPath' nil #required).
- #('serverScriptPath' nil #required)}
- optionsAndArguments: [ :opts :args | options := opts ].
- options
- at: 'help'
- ifAbsent: [
- | forceGLASSInstall scriptDirectory |
- options at: 'force' ifPresent: [ :ignored | forceGLASSInstall := true ] ifAbsent: [ forceGLASSInstall := false ].
- scriptDirectory := self scriptDirectoryFrom: options.
- ^ self topezClient installUpdateTode: forceGLASSInstall scriptDirectory: scriptDirectory ]
- ifPresent: [ :ignored |
- ^ (TDMultiLineText new
- prompt: 'Help for ' , command command;
- template:
- 'NAME
- updateServer - install tODE on the server
-
-SYNOPSIS
- updateServer [-h|--help]
- updateServer --serverScriptPath=
- updateServer -clientScriptPath=
- updateServer
-
-DESCRIPTION
- With no arguments, update an already installed tODE to the latest version.
-
- updateServer executes a Smalltalk script that is loaded from a directory
- on disk. If neither --clientScriptPath nor --serverScriptPath is specified then updateServer expects
- to find a directory called `updateServer` as a sibling to the `repository` directory from which the
- BaselineOfTode has been installed on the client system.
-
- If --clientScriptPath is specified, the scripts will be loaded from the specified directory on
- the client system. If is a relative path, the path will be appended
- to TDShell class>>serverScriptsHome.
-
- If --serverScriptPath is specified, the scripts will be loaded from the specified directory on
- the server system - where the stone and gems are executing. If is a
- relative path, the path will be appended to TDShell class>>serverScriptsHome.
-
-EXAMPLES
- updateServer -h
- updateServer
- updateServer --clientScriptPath=installTode
- updateServer --clientScriptPath=/opt/git/tode/installTode
- updateServer --serverScriptPath=install
- updateServer --serverScriptPath=/opt/git/todeHome/install
-
-') interact ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/exit.st b/repository/Tode-Client-Common.package/TDShell.class/instance/exit.st
index 8f3cd7403..025f019c5 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/instance/exit.st
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/exit.st
@@ -1,4 +1,8 @@
built-ins
exit
- shellWindow delete.
+ self logout.
+ self class currentShell: nil.
+ shellWindow ifNotNil: [ shellWindow delete ].
+ shellWindow := nil.
+ console := nil.
^ nil
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/exportClassToServer..st b/repository/Tode-Client-Common.package/TDShell.class/instance/exportClassToServer..st
new file mode 100644
index 000000000..a56a00fb4
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/exportClassToServer..st
@@ -0,0 +1,28 @@
+server blocks
+exportClassToServer: clientClass
+ | classDefinition className classComment |
+ className := clientClass name asString.
+ classDefinition := clientClass definition.
+ self
+ onServerDo: [
+ classDefinition evaluate.
+ nil "don't try returning a class to client" ].
+ classComment := clientClass comment.
+ self
+ onServerDo: [
+ (Smalltalk at: className) comment: classComment.
+ nil "don't try returning a class to client" ].
+ clientClass
+ selectorsDo: [ :selector |
+ self
+ exportMethodToServer: clientClass
+ source: (clientClass sourceCodeAt: selector)
+ protocol: (clientClass organization categoryOfElement: selector)
+ isMeta: false ].
+ clientClass class
+ selectorsDo: [ :selector |
+ self
+ exportMethodToServer: clientClass class
+ source: (clientClass class sourceCodeAt: selector)
+ protocol: (clientClass class organization categoryOfElement: selector)
+ isMeta: true ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/exportMethodToServer.source.protocol.isMeta..st b/repository/Tode-Client-Common.package/TDShell.class/instance/exportMethodToServer.source.protocol.isMeta..st
new file mode 100644
index 000000000..0785e4fd1
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/exportMethodToServer.source.protocol.isMeta..st
@@ -0,0 +1,15 @@
+server blocks
+exportMethodToServer: clientClass source: source protocol: protocol isMeta: aBool
+ | className methodSource methodProtocol isMeta |
+ className := clientClass name.
+ methodSource := source.
+ methodProtocol := protocol.
+ isMeta := aBool.
+ self
+ onServerDo: [
+ | cls |
+ cls := Smalltalk at: className.
+ isMeta
+ ifTrue: [ cls := cls class ].
+ cls compile: methodSource classified: methodProtocol.
+ nil ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/filetreeUtilityClass.st b/repository/Tode-Client-Common.package/TDShell.class/instance/filetreeUtilityClass.st
deleted file mode 100644
index 07117d86e..000000000
--- a/repository/Tode-Client-Common.package/TDShell.class/instance/filetreeUtilityClass.st
+++ /dev/null
@@ -1,3 +0,0 @@
-evaluator engine
-filetreeUtilityClass
- ^ MCFileTreeFileUtils current
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/help.st b/repository/Tode-Client-Common.package/TDShell.class/instance/help.st
index 565f7abd2..ab1d3f669 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/instance/help.st
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/help.st
@@ -4,205 +4,12 @@ help
Thank you for trying tODE.
--------------------------
-Before getting started, you should clone a copy of the todeHome repository
-from github:
+The best way to get going with tODE is to follow the instructions on the
+gsDevKitHome project site[1] for installing and setting up GemStone.
- git clone git@github.com:dalehenrich/todeHome.git
+Then take a look at "Getting Started with tODE"[2].
-You will want to have a clone of todeHome on both the server machine and your
-client machine, if they are on different hosts. You should also plan on
-"taking ownership" of the todeHome repository as you progress in your usage of
-tODE you will be customizing the contents of this repository quite a bit.
-
-For the purposes of this document we will assume that the location of the
-clone on both machines is:
-
- /opt/git/todeHome
-
-If you have cloned the repository to a different location, the you should
-execute the following in a Pharo workspace:
-
- TDShell todeHome: ''''.
-
-I. Start your stone and netldi
-------------------------------
- If you do not already have a stone running, you should start your stone and
- the netldi process.
-
- If you''re not sure how to start a stone, please follow the instructions
- (https://github.com/dalehenrich/tode/blob/master/README.md) for getting
- started with GemStone.
-
-II. Define a session description
--------------------------------
- Use the following expressions to define and test your session description
- (this expression can also be found in the `session setup` workspace:
-
- (OGCustomSessionDescription new
- name: ''glass'';
- gemstoneVersion: ''3.2.0'';
- adornmentColor: nil;
- stoneHost: ''localhost'';
- stoneName: ''seaside'';
- gemHost: ''localhost'';
- netLDI: ''50377'';
- gemTask: ''gemnetobject'';
- userId: ''DataCurator'';
- password: ''swordfish'';
- osUserId: '''';
- osPassword: '''';
- backupDirectory: '''';
- dataDirectory: '''';
- yourself) exportTo: TDShell sessionDescriptionHome.
- TDShell testLogin: ''glass''.
-
- Pay special attention to the `gemstoneVersion`, `stoneHost`, `gemHost`,
- `stoneName` and `netLDI` fields. The `gemstoneVersion` string should have a
- minimum of 3 fields, i.e., ''3.2.0''. Normally the `stoneHost` and `gemHost`
- will be the same. Use the port number for your netldi process for the
- `netLDI` field.
-
- If you have a session description that you are using with GemTools you can
- copy over the corresponding fields.
-
- The #exportTo: message, saves the session description to a location in
- todeHome. The #testLogin: message attempts a login using the namedsession
- description. The result of the #testLogin: message provides clues that can be
- used to fine tune the definition of the session description.
-
- When you see a message like the following, you have successfully connected to
- your stone:
-
- Stone : !@foos#server!j_gs64stone
- Stone host : foos
- GemStone version : 3.2.0
- cpu kind : x86_64
- GLASS version : >=1.0-beta.9.1 [ConfigurationOfGLASS]
- Metacello version: >=1.0-beta.32.1 [ConfigurationOfMetacello]
- GLASS1 not installed
- Tode not installed
-
- Once you''ve created your own session description, you can use the following
- expression to launch your tODE console from a Pharo workspace:
-
- TDShell open: ''glass''
-
- Finally, when you''ve settled on an acceptable session description, it is a
- good idea to commit your changes to your todeHome repository.
-
-
-III. Install/Update tODE on server
----------------------------------
- The `updateServer` command will install/upgrade tODE on your server.
-
- If you have a todeHome repository on your client machine (the machine upon
- which you are running Pharo) you can use the following command to
- install/upgrade tODE on the server:
-
- updateServer --clientScriptPath=/opt/git/todeHome/server/scripts
-
- The standard scripts are based on loading code from github, but you chould be
- able to customize the scripts to reference local copies of the various
- projects as needed.
-
- All of the scripts are executed on the server, so any file system paths
- should be relative to the server file system.
-
- After installation is complete, the `testLogin` should return something like
- the following:
-
- Stone : !@foos#server!j_gs64stone
- Stone host : foos
- GemStone version : 3.2.0
- cpu kind : x86_64
- GLASS version : >=1.0-beta.9.1 [ConfigurationOfGLASS]
- Metacello version: >=1.0-beta.32.1 [ConfigurationOfMetacello]
- GLASS1:
- repository: /opt/git/glass/repository
- Tode:
- repository: /opt/git/tode/repository
-
- For additional information about using the `updateServer` command use the
- `--help` option:
-
- updateServer --help
-
-IV. Backup and restore
----------------------
- Once you have installed tODE on the server, you can start using tODE, by
- simply typing commands at the command prompt in the console window.
-
- The first command that you should use after finishing your install is the
- `bu` command:
-
- bu backup tode.dbf
-
- The above command makes a backup of your repository in a file named
- `tode.dbf` in the backup directory specified in your session description.
- If no directory is specified in your session description, the backup is
- stored in the `$GEMSTONE/seaside/data/backups` directory.
-
- You can restore from a backup with this command:
-
- bu restore tode.dbf
-
- The `bu` command is executed by tODE code running in the server. For
- additional information about the server-side `bu` command use the `--help`
- option or the `man` command:
-
- man bu
- bu --help
-
- If tODE has not been installed yet, you can restore from backup by using
- the `restoreBackup` command, which is a client-side built-in command. For
- additional information about using the `restoreBackup`, use the `--help`
- option:
-
- restoreBackup --help
-
- For a list of the client-side built-in commands use the `builtIns` command
- (also a client-side built-in).
-
-V. Mounting /home
----------------------
- Objects in tODE are shared by serializing the objects to disk using STON
- (https://github.com/glassdb/ston). One gains access to these shared objects
- on disk, by using the `mount` command. The todeHome repository comes with a
- pre-defined set of objects that can be accessed by executing the following
- commands:
-
- mount /opt/git/todeHome/home /
- logout
- bu backup home.dbf
-
- The `logout` command is necessary because `/home` is a special directory
- structure that needs to be reset after being redefined and `logout` is a
- temporary workaround. The `bu` command is used to make a backup of the
- repository now that you''ve defined `/home`.
-
-VI. Client-side scripts
-------------------------
- If you find that you are frequently executing sequences of commands
- involving the logout command or client built-in commands, you can execute
- client-side scripts using the`script` command.
-
- For example, the following sequence of commands is a convenent script for
- updating both the client and server:
-
- updateClient --clientRepo=filetree:///opt/git/tode/repository
- updateServer --clientScriptPath=/opt/git/todeHome/server/scripts
- bu backup tode.dbf
-
- With the `script` command you can save the above commands in a file named
- `/opt/git/todeHome/client/scripts/updateTode` and invoke the script using
- the following:
-
- script --script=/opt/git/todeHome/client/scripts/updateTode
-
- If you use a relative path for the script, the argument will be appended
- to `TDShell clientScriptHome` which is based upon `TDShell todeHome` which
- you should have already defined:
-
- script --script=updateTode
+[1] https://github.com/GsDevKit/gsDevKitHome#open-source-development-kit-for-gemstones-64-bit-
+[2] https://github.com/dalehenrich/tode/blob/master/docs/GettingStarted.md#getting-started-with-tode
' label: 'Help for tODE'.
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/label.st b/repository/Tode-Client-Common.package/TDShell.class/instance/label.st
index 75a9b012d..a708c74cf 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/instance/label.st
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/label.st
@@ -1,5 +1,4 @@
stash
label
- | sessionDescription |
- sessionDescription := self topezClient sessionDescription.
- ^ 'GemStone Shell: ' , self sessionName , ' (' , sessionDescription stoneName , ':' , sessionDescription netLDI , ')'
\ No newline at end of file
+ ^ 'GemStone ', self sessionDescription gemstoneVersion, ' Shell: ' , self sessionName , ' (' , self sessionDescription stoneName , ':'
+ , self sessionDescription netLDI , ')'
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/logout.st b/repository/Tode-Client-Common.package/TDShell.class/instance/logout.st
index c861f6017..0b51d32e0 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/instance/logout.st
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/logout.st
@@ -4,7 +4,7 @@ logout
| tpz |
self close.
- tpz := self topezClient.
+ tpz := topezClient.
tpz ifNil: [ ^ nil ].
topezClient := nil.
tpz logout.
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/objectSerializer.st b/repository/Tode-Client-Common.package/TDShell.class/instance/objectSerializer.st
new file mode 100644
index 000000000..4be4ffcb4
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/objectSerializer.st
@@ -0,0 +1,3 @@
+accessing
+objectSerializer
+ ^ self topez objectSerializer
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/onServerDo..st b/repository/Tode-Client-Common.package/TDShell.class/instance/onServerDo..st
new file mode 100644
index 000000000..98eb8893e
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/onServerDo..st
@@ -0,0 +1,36 @@
+server blocks
+onServerDo: aBlock
+ | blockAst outerContext variableBindings blockScopes blockScope serverSource stonString |
+ aBlock numArgs > 0
+ ifTrue: [ self error: 'only zeroArg blocks may be executed on the server' ].
+ outerContext := aBlock outerContext.
+ outerContext hasInstVarRef
+ ifTrue: [ self error: 'cannot reference instance variables in server block' ].
+ blockAst := aBlock sourceNode.
+ blockScopes := (OCScopesCollector new visitNode: blockAst) scopes.
+ blockScope := blockScopes at: 1.
+ variableBindings := Dictionary new.
+ blockScope copiedVars
+ do: [ :tempVar |
+ | val tempName index |
+ tempVar isStoringTempVector
+ ifTrue: [
+ tempVar tempVectorForTempStoringIt
+ do: [ :tempVectorVars |
+
+ tempName := tempVectorVars name.
+ index := aBlock asContext tempNames indexOf: tempName.
+ index > 0
+ ifTrue: [
+ val := aBlock asContext namedTempAt: index.
+ variableBindings at: tempName put: val ] ] ]
+ ifFalse: [
+ tempName := tempVar name.
+ index := outerContext tempNames indexOf: tempName.
+ index > 0
+ ifTrue: [
+ val := outerContext namedTempAt: index.
+ variableBindings at: tempName put: val ] ] ].
+ serverSource := aBlock sourceNode body formattedCode.
+ stonString := self evaluateSTONSmalltalk: serverSource variableBindings: variableBindings.
+ ^ self objectSerializer fromString: stonString
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/quit.st b/repository/Tode-Client-Common.package/TDShell.class/instance/quit.st
new file mode 100644
index 000000000..f6bdd2d4c
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/quit.st
@@ -0,0 +1,6 @@
+accessing
+quit
+ "use when tdShell is NOT associated with a window .. ensure that all associated windows closed and
+ that session terminated."
+
+ ^ self windowIsClosing
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/scriptDirectoryFrom..st b/repository/Tode-Client-Common.package/TDShell.class/instance/scriptDirectoryFrom..st
deleted file mode 100644
index cc865d563..000000000
--- a/repository/Tode-Client-Common.package/TDShell.class/instance/scriptDirectoryFrom..st
+++ /dev/null
@@ -1,20 +0,0 @@
-built-ins
-scriptDirectoryFrom: options
- options
- at: 'clientScriptPath'
- ifPresent: [ :dirname |
- | path |
- path := dirname.
- (dirname beginsWith: '/')
- ifFalse: [ path := TDShell updateServerHome , dirname ].
- ^ self filetreeUtilityClass directoryFromPath: path ]
- ifAbsent: [
- options
- at: 'serverScriptPath'
- ifPresent: [ :dirname |
- | path |
- path := dirname.
- (dirname beginsWith: '/')
- ifFalse: [ path := TDShell updateServerHome , dirname ].
- ^ self filetreeUtilityClass directoryFromPath: path ]
- ifAbsent: [ ^self scriptDirectoryFromBaselineOfTode ]]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/scriptDirectoryFromBaselineOfTode.st b/repository/Tode-Client-Common.package/TDShell.class/instance/scriptDirectoryFromBaselineOfTode.st
deleted file mode 100644
index a4c52019b..000000000
--- a/repository/Tode-Client-Common.package/TDShell.class/instance/scriptDirectoryFromBaselineOfTode.st
+++ /dev/null
@@ -1,10 +0,0 @@
-evaluator engine
-scriptDirectoryFromBaselineOfTode
- | wc fileTreeRepo repoDir fileTreeRepoPath fileTreeRepoDir |
- wc := MCWorkingCopy registry detect: [ :mgr | mgr packageName = 'BaselineOfTode' ].
- fileTreeRepo := (wc repositoryGroup repositories reject: [ :repo | MCCacheRepository default = repo ])
- detect: [ :repo | repo isKindOf: MCFileTreeRepository ].
- fileTreeRepoPath := self filetreeUtilityClass directoryPathString: fileTreeRepo directory.
- fileTreeRepoDir := self filetreeUtilityClass directoryFromPath: fileTreeRepoPath.
- repoDir := self filetreeUtilityClass parentDirectoryOf: fileTreeRepoDir.
- ^ self filetreeUtilityClass directoryFromPath: 'installTode' relativeTo: repoDir
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/shellWindow..st b/repository/Tode-Client-Common.package/TDShell.class/instance/shellWindow..st
new file mode 100644
index 000000000..686745588
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/shellWindow..st
@@ -0,0 +1,3 @@
+accessing
+shellWindow: aWindow
+ shellWindow := aWindow
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/stoneName.st b/repository/Tode-Client-Common.package/TDShell.class/instance/stoneName.st
new file mode 100644
index 000000000..3276b0dc9
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/stoneName.st
@@ -0,0 +1,3 @@
+accessing
+stoneName
+ ^ self sessionDescription stoneName
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/whatsNew.st b/repository/Tode-Client-Common.package/TDShell.class/instance/whatsNew.st
deleted file mode 100644
index 7dc91a642..000000000
--- a/repository/Tode-Client-Common.package/TDShell.class/instance/whatsNew.st
+++ /dev/null
@@ -1,6 +0,0 @@
-built-ins
-whatsNew
- ^self openWorkspace: 'dkh 3/22/2014 18:03
--------------------
-It''s all new right now.
-' label: 'What''s new?'.
diff --git a/repository/Tode-Client-Common.package/TDShell.class/instance/windowIsClosing.st b/repository/Tode-Client-Common.package/TDShell.class/instance/windowIsClosing.st
index 50d00fe30..00d0ad32f 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/instance/windowIsClosing.st
+++ b/repository/Tode-Client-Common.package/TDShell.class/instance/windowIsClosing.st
@@ -1,10 +1,12 @@
accessing
windowIsClosing
- | status |
- windowStatus ifNil: [ ^ self ].
- windowStatus unregisterShellWindow: self shellWindow.
- status := windowStatus.
- windowStatus := nil.
- status windowIsClosing.
- status shellWindows isEmpty
- ifTrue: [ self logout ]
\ No newline at end of file
+ | status |
+ windowStatus ifNil: [ ^ self ].
+ self
+ deferFlushEventNotificationDuring: [
+ windowStatus unregisterShellWindow: self shellWindow.
+ status := windowStatus.
+ windowStatus := nil.
+ status close ].
+ status shellWindows isEmpty
+ ifTrue: [ self exit ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDShell.class/methodProperties.json b/repository/Tode-Client-Common.package/TDShell.class/methodProperties.json
index 9295afc62..3c06084a2 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/methodProperties.json
+++ b/repository/Tode-Client-Common.package/TDShell.class/methodProperties.json
@@ -1,7 +1,10 @@
{
"class" : {
- "cleanForDeploy" : "dkh 6/15/2014 09:51",
- "clientScriptsHome" : "dkh 7/20/2014 10:05",
+ "cleanForDeploy" : "dkh 11/14/2014 10:38",
+ "clientScriptsFiles:" : "dkh 3/26/2015 11:12",
+ "clientScriptsPath" : "dkh 3/11/2015 11:34",
+ "currentShell" : "dkh 3/21/2015 11:13",
+ "currentShell:" : "dkh 3/21/2015 13:06",
"debugMode" : "dkh 11/19/2012 14:41",
"debugMode:" : "dkh 11/19/2012 14:41",
"defaultAdornmentColor" : "dkh 2/23/2013 09:22",
@@ -9,41 +12,67 @@
"devKitRoot:" : "dkh 7/20/2014 10:10",
"enableDebugger" : "dkh 11/19/2012 14:41",
"enableDebugger:" : "dkh 11/19/2012 14:41",
- "imageWorkspaceHome" : "dkh 7/20/2014 10:06",
- "importSessionDescriptionFrom:for:" : "dkh 7/7/2014 21:18",
+ "forSessionNamed:" : "dkh 4/15/2015 14:47",
+ "importSessionDescriptionFrom:for:" : "dkh 4/12/2015 11:33",
"initialize" : "dkh 6/1/2014 19:06",
+ "lookupClientScripts:stoneName:" : "dkh 3/11/2015 15:54",
+ "lookupPharoScript:" : "dkh 8/16/2015 11:30",
+ "lookupServerScripts:" : "dkh 3/11/2015 15:54",
+ "lookupWindowLayout:" : "dkh 3/11/2015 15:56",
+ "onServer:do:" : "dkh 4/15/2015 10:40",
"open" : "dkh 5/28/2014 07:15",
- "open:" : "dkh 3/23/2014 10:26",
+ "open:" : "dkh 3/11/2015 11:16",
"openFrom:" : "dkh 5/28/2014 07:15",
"openOnSessionDescription:" : "dkh 4/12/2014 08:43",
"openSessionDescription:evaluate:" : "dkh 4/13/2014 08:30",
- "resetWorldMenu" : "dkh 4/30/2014 15:55",
+ "pharoPath" : "dkh 8/16/2015 11:28",
+ "pharoWorldMenuOn:" : "dkh 3/25/2015 08:37",
+ "resetWorldMenu" : "dkh 3/21/2015 09:20",
+ "resizeTranscript:" : "dkh 4/4/2015 16:50",
+ "restorePharoWorldMenu" : "dkh 3/21/2015 09:21",
+ "serverScriptsPath" : "dkh 3/11/2015 12:22",
"sessionDescription:" : "dkh 7/19/2014 07:28",
"sessionDescription:debugMode:" : "dkh 7/25/2014 16:46",
"sessionDescription:evaluate:" : "dkh 7/25/2014 10:17",
- "sessionDescription:evaluate:debugMode:" : "dkh 7/25/2014 16:47",
- "sessionDescriptionHome" : "dkh 7/20/2014 10:06",
- "startUp:" : "dkh 6/3/2014 20:12",
- "testLogin:" : "dkh 5/28/2014 07:15",
+ "sessionDescription:evaluate:debugMode:" : "dkh 2/21/2015 10:35",
+ "startUp:" : "dkh 3/21/2015 20:02",
+ "testLogin:" : "dkh 3/11/2015 11:16",
"testLoginForSessionDescription:" : "dkh 4/12/2014 08:51",
- "testWindowLayout:" : "dkh 5/28/2014 07:15",
- "todeDefineDevKitRootMenuItemOn:" : "dkh 7/20/2014 10:27",
- "todeDefineTodeHelpMenuItemOn:" : "dkh 4/13/2014 08:52",
- "todeDefineWebEditionRootMenuItemOn:" : "dkh 6/1/2014 09:18",
- "todeImageWorkspacesOn:" : "dkh 6/1/2014 09:26",
- "todeMenuCommandOn:" : "dkh 7/28/2014 17:41",
- "todeOn:" : "dkh 4/30/2014 15:54",
- "todePath" : "dkh 7/20/2014 10:04",
- "todeRefreshMenuMenuItemOn:" : "dkh 5/1/2014 14:19",
- "todeRoot" : "dkh 7/21/2014 10:47",
- "todeUpdateClientMenuItemOn:" : "dkh 5/28/2014 07:15",
- "todeWindowPropertiesCommandOn:" : "dkh 6/2/2014 06:59",
- "updateServerHome" : "dkh 7/20/2014 10:06",
- "webEditionRoot" : "dkh 6/1/2014 09:45",
- "webEditionRoot:" : "dkh 7/20/2014 10:03",
- "windowLayoutHome" : "dkh 7/20/2014 10:06" },
+ "testWindowLayout:" : "dkh 3/11/2015 11:16",
+ "todeDefineDevKitRootMenuItemOn:" : "dkh 4/4/2015 17:21",
+ "todeDefineTodeHelpMenuItemOn:" : "dkh 3/21/2015 09:50",
+ "todeDefineTodeRootMenuItemOn:" : "dkh 4/4/2015 17:21",
+ "todeMenuCommandOn:" : "dkh 4/12/2015 11:33",
+ "todeOn:" : "dkh 4/4/2015 17:22",
+ "todePath" : "dkh 11/14/2014 10:58",
+ "todePath:" : "dkh 11/14/2014 10:58",
+ "todePharoPath" : "dkh 3/11/2015 14:03",
+ "todeRoot" : "dkh 2/3/2015 23:08",
+ "todeRoot:" : "dkh 2/3/2015 23:26",
+ "todeSessionMenuOn:" : "dkh 3/25/2015 08:42",
+ "todeSessionToolsMenuOn:" : "dkh 3/21/2015 15:45",
+ "todeSysDefaultClientScriptsPath" : "dkh 3/11/2015 15:51",
+ "todeSysDefaultPath" : "dkh 11/14/2014 10:59",
+ "todeSysDefaultPharoPath" : "dkh 8/16/2015 11:29",
+ "todeSysDefaultServerScriptsPath" : "dkh 3/11/2015 12:24",
+ "todeSysDefaultWindowLayoutPath" : "dkh 3/11/2015 09:58",
+ "todeSysLocalClientScriptsPath" : "dkh 3/11/2015 15:51",
+ "todeSysLocalPath" : "dkh 11/14/2014 10:59",
+ "todeSysLocalPharoPath" : "dkh 8/16/2015 11:29",
+ "todeSysLocalServerScriptsPath" : "dkh 3/11/2015 12:23",
+ "todeSysLocalSessionDescriptionPath" : "dkh 3/11/2015 11:24",
+ "todeSysLocalWindowLayoutPath" : "dkh 3/11/2015 09:58",
+ "todeSysPath" : "dkh 11/14/2014 11:46",
+ "todeSysStonePath:" : "dkh 3/10/2015 20:36",
+ "todeWindowPropertiesCommandOn:" : "dkh 4/9/2015 18:58",
+ "todeWorldMenuOn:" : "dkh 3/21/2015 09:51",
+ "useTodeSys" : "dkh 11/14/2014 11:18",
+ "useTodeSys:" : "dkh 11/14/2014 11:18",
+ "windowLayoutFiles" : "dkh 3/11/2015 11:39",
+ "windowLayoutPath" : "dkh 3/11/2015 09:57",
+ "windowLayoutWorkspaceNamed:for:" : "dkh 3/11/2015 14:42" },
"instance" : {
- "accumulateText:" : "dkh 5/15/2013 16:10",
+ "accumulateText:" : "dkh 6/25/2015 17:08",
"accumulateTextAndDo:" : "dkh 5/15/2013 16:01",
"accumulateTextAndServerDo:" : "dkh 3/29/2013 15:06",
"actionStack" : "dkh 11/19/2012 14:41",
@@ -54,64 +83,69 @@
"autoCommitEnabled" : "dkh 5/27/2014 11:31",
"batchMode" : "dkh 7/25/2014 16:41",
"batchMode:" : "dkh 7/25/2014 16:40",
- "builtInCommands" : "dkh 6/19/2014 11:52",
- "builtIns" : "dkh 6/19/2014 11:52",
- "close" : "dkh 3/22/2014 12:50",
+ "builtInCommands" : "dkh 3/25/2015 21:30",
+ "builtIns" : "dkh 3/25/2015 21:38",
+ "close" : "dkh 9/1/2015 09:17",
"collapse" : "dkh 3/22/2014 12:50",
- "console" : "dkh 5/16/2013 20:41",
+ "console" : "dkh 4/17/2015 11:20",
"debugMode" : "dkh 8/6/2014 09:36",
"debugMode:" : "dkh 7/25/2014 07:45",
+ "deferFlushEventNotificationDuring:" : "dkh 9/1/2015 09:16",
"displaySessionDescription" : "dkh 3/22/2014 13:16",
"doEndOfFile" : "dkh 11/19/2012 14:41",
"editSessionDescription" : "dkh 3/23/2014 10:01",
- "evaluate:" : "dkh 7/25/2014 07:46",
- "evaluateCommand:" : "dkh 7/25/2014 16:41",
+ "evaluate:" : "dkh 12/17/2014 16:47",
+ "evaluateCommand:" : "dkh 6/25/2015 17:07",
+ "evaluateSTONSmalltalk:" : "dkh 4/11/2015 07:06",
+ "evaluateSTONSmalltalk:variableBindings:" : "dkh 4/11/2015 11:36",
"evaluateSmalltalk:" : "dkh 7/26/2014 10:32",
"exception:" : "dkh 11/19/2012 15:34",
- "executeBuiltIn:" : "dkh 6/19/2014 12:26",
+ "executeBuiltIn:" : "dkh 3/25/2015 21:31",
"executeDebugMode:" : "dkh 8/6/2014 09:41",
- "executeInstallServer:" : "dkh 6/19/2014 12:35",
+ "executeInstallServer:" : "dkh 3/25/2015 21:36",
"executeRestoreBackup:" : "dkh 1/5/2014 14:03",
- "executeScript:" : "dkh 3/23/2014 14:22",
+ "executeScript:" : "dkh 3/26/2015 11:20",
"executeSessionDescription:" : "dkh 5/28/2014 07:15",
- "executeUpdateClient:" : "dkh 7/22/2014 13:42",
- "executeUpdateServer:" : "dkh 6/19/2014 12:34",
- "exit" : "dkh 3/23/2014 11:04",
+ "executeUpdateClient:" : "dkh 8/16/2015 11:48",
+ "exit" : "dkh 4/17/2015 06:30",
"expand" : "dkh 3/22/2014 12:51",
- "filetreeUtilityClass" : "dkh 12/8/2013 17:41",
+ "exportClassToServer:" : "dkh 4/15/2015 13:31",
+ "exportMethodToServer:source:protocol:isMeta:" : "dkh 4/15/2015 13:30",
"filterAndForwardEvent:" : "dkh 11/19/2012 14:41",
- "help" : "dkh 3/23/2014 15:18",
+ "help" : "dkh 3/25/2015 09:17",
"history" : "dkh 3/28/2013 19:58",
"history:" : "dkh 3/27/2013 15:43",
"initialize" : "dkh 3/27/2013 15:47",
"installHistoryEntry:windowMorph:" : "dkh 3/27/2013 16:04",
- "label" : "dkh 12/16/2013 15:07",
- "logout" : "dkh 3/22/2014 12:50",
+ "label" : "dkh 7/7/2015 16:28",
+ "logout" : "dkh 2/21/2015 11:07",
"nextHistory" : "dkh 3/27/2013 17:12",
- "openOnSessionDescription:" : "dkh 7/19/2014 07:27",
+ "objectSerializer" : "dkh 6/25/2015 16:57",
+ "onServerDo:" : "dkh 6/25/2015 16:54",
+ "openOnSessionDescription:" : "dkh 4/17/2015 11:19",
"openWorkspace:label:" : "dkh 6/1/2014 09:25",
"openWorkspace:styling:label:" : "dkh 6/1/2014 09:27",
"postCopy" : "dkh 1/15/2013 11:27",
"previousHistory" : "dkh 3/27/2013 17:11",
"promptString" : "dkh 2/21/2013 18:27",
+ "quit" : "dkh 4/15/2015 11:26",
"resetStack" : "dkh 5/15/2013 16:21",
- "scriptDirectoryFrom:" : "dkh 6/19/2014 12:34",
- "scriptDirectoryFromBaselineOfTode" : "dkh 12/8/2013 17:40",
"session" : "dkh 3/29/2013 15:06",
"sessionDescription" : "dkh 3/22/2014 10:23",
"sessionDescription:" : "dkh 7/19/2014 07:25",
"sessionName" : "dkh 2/23/2013 07:19",
"shellId" : "dkh 1/15/2013 11:26",
"shellWindow" : "dkh 11/19/2012 15:05",
+ "shellWindow:" : "dkh 4/10/2015 14:13",
"spawn:adornmentColor:" : "dkh 6/2/2014 06:45",
"spawnWindow" : "dkh 3/24/2014 18:06",
"stateStack" : "dkh 5/15/2013 16:00",
+ "stoneName" : "dkh 11/14/2014 11:02",
"tabCompletion:" : "dkh 3/28/2013 07:41",
"testLogin" : "dkh 12/8/2013 09:25",
"topez" : "dkh 12/21/2012 12:43",
"topezClient" : "dkh 2/23/2013 07:36",
- "whatsNew" : "dkh 3/22/2014 18:04",
- "windowIsClosing" : "dkh 1/15/2013 12:02",
+ "windowIsClosing" : "dkh 9/1/2015 09:18",
"windowLabel" : "dkh 3/22/2014 14:27",
"windowRegistration" : "dkh 12/21/2012 10:10",
"windowStatus" : "dkh 1/15/2013 12:02" } }
diff --git a/repository/Tode-Client-Common.package/TDShell.class/properties.json b/repository/Tode-Client-Common.package/TDShell.class/properties.json
index fb5098c25..d8136c901 100644
--- a/repository/Tode-Client-Common.package/TDShell.class/properties.json
+++ b/repository/Tode-Client-Common.package/TDShell.class/properties.json
@@ -1,15 +1,14 @@
{
"category" : "Tode-Client-Common",
"classinstvars" : [
- "commands",
- "subCommands",
- "rootNode" ],
+ "currentShell" ],
"classvars" : [
"DebugMode",
"DevKitRoot",
"EnableDebugger",
"TodePath",
- "WebEditionRoot" ],
+ "TodeRoot",
+ "UseTodeSys" ],
"commentStamp" : "",
"instvars" : [
"windowStatus",
diff --git a/repository/Tode-Client-Common.package/TDSmallWindowProperties.class/instance/caculateWindowBounds.st b/repository/Tode-Client-Common.package/TDSmallWindowProperties.class/instance/caculateWindowBounds.st
index 9946b119b..450e32018 100644
--- a/repository/Tode-Client-Common.package/TDSmallWindowProperties.class/instance/caculateWindowBounds.st
+++ b/repository/Tode-Client-Common.package/TDSmallWindowProperties.class/instance/caculateWindowBounds.st
@@ -1,6 +1,6 @@
window bounds
caculateWindowBounds
- | layoutExtent dict lw lo lh topHeight shellHeight browserHeight codeWidth shellExtent classCategories classes evaluator superclasses classDef instanceSelectors classSelectors configurations packages implementors app1 app2 app3 app4 context debugger inspector method codeHeight appExtent displayExtent debuggerWidth lcw lce |
+ | layoutExtent dict lw lo lh topHeight shellHeight browserHeight codeWidth shellExtent classCategories classes evaluator superclasses classDef instanceSelectors classSelectors configurations packages implementors app1 app2 app3 app4 context debugger inspector method codeHeight appExtent displayExtent debuggerWidth lcw lce projectList transcript classicClassDef classicClassButtonBar classicProtocol |
displayExtent := Display usableArea extent.
layoutExtent := displayExtent - (2 @ 2 * margin).
lo := margin.
@@ -19,7 +19,10 @@ caculateWindowBounds
method := superclasses bottomLeft extent: codeWidth @ codeHeight.
evaluator := method bottomLeft extent: shellExtent.
classDef := superclasses topRight extent: (1.5 * lw) @ topHeight.
+ classicClassDef := superclasses topRight extent: (1.5 * lw) @ (topHeight * 0.65).
+ classicClassButtonBar := superclasses topRight + (0 @ (topHeight * 0.65)) extent: (1.5 * lw) @ (topHeight * 0.35).
instanceSelectors := classDef topRight extent: lw @ topHeight.
+ classicProtocol := instanceSelectors.
classSelectors := instanceSelectors topRight extent: lw @ topHeight.
implementors := method topRight extent: shellExtent x @ codeHeight.
inspector := evaluator topRight extent: shellExtent.
@@ -29,10 +32,16 @@ caculateWindowBounds
app2 := evaluator topRight - (0 @ appExtent y) extent: appExtent.
app3 := evaluator topRight extent: appExtent.
app4 := evaluator topRight - (0 @ appExtent y) extent: appExtent.
+ projectList := app1.
+ transcript := projectList topRight + (0 @ (projectList height // 2))
+ extent: (layoutExtent x - projectList topRight x) @ (projectList height // 2).
dict
at: #evaluator put: evaluator;
at: #superclasses put: superclasses;
at: #classDef put: classDef;
+ at: #classicClassDef put: classicClassDef;
+ at: #classicClassButtonBar put: classicClassButtonBar;
+ at: #classicProtocol put: classicProtocol;
at: #instanceSelectors put: instanceSelectors;
at: #classSelectors put: classSelectors;
at: #implementors put: implementors;
@@ -44,6 +53,9 @@ caculateWindowBounds
at: #app2 put: app2;
at: #app3 put: app3;
at: #app4 put: app4;
+ at: #projectList put: projectList;
+ at: #workspace put: method;
+ at: #transcript put: transcript;
yourself.
classCategories := lo extent: lce.
classes := classCategories bottomLeft extent: lce.
diff --git a/repository/Tode-Client-Common.package/TDSmallWindowProperties.class/methodProperties.json b/repository/Tode-Client-Common.package/TDSmallWindowProperties.class/methodProperties.json
index 86051a34d..0e65b9341 100644
--- a/repository/Tode-Client-Common.package/TDSmallWindowProperties.class/methodProperties.json
+++ b/repository/Tode-Client-Common.package/TDSmallWindowProperties.class/methodProperties.json
@@ -2,4 +2,4 @@
"class" : {
},
"instance" : {
- "caculateWindowBounds" : "dkh 8/6/2014 20:44" } }
+ "caculateWindowBounds" : "dkh 8/31/2015 17:35" } }
diff --git a/repository/Tode-Client-Common.package/TDStandardWindowProperties.class/instance/caculateWindowBounds.st b/repository/Tode-Client-Common.package/TDStandardWindowProperties.class/instance/caculateWindowBounds.st
index 500ea3ce2..11abdb994 100644
--- a/repository/Tode-Client-Common.package/TDStandardWindowProperties.class/instance/caculateWindowBounds.st
+++ b/repository/Tode-Client-Common.package/TDStandardWindowProperties.class/instance/caculateWindowBounds.st
@@ -1,6 +1,6 @@
window bounds
caculateWindowBounds
- | layoutExtent dict lw lo lh topHeight shellHeight browserHeight codeWidth le shellExtent classCategories classes evaluator superclasses classDef instanceSelectors classSelectors configurations packages implementors app1 app2 app3 app4 context debugger inspector method codeHeight appExtent displayExtent debuggerWidth |
+ | layoutExtent dict lw lo lh topHeight shellHeight browserHeight codeWidth le shellExtent classCategories classes evaluator superclasses classDef instanceSelectors classSelectors configurations packages implementors app1 app2 app3 app4 context debugger inspector method codeHeight appExtent displayExtent debuggerWidth projectList transcript classicClassDef classicClassButtonBar classicProtocol |
displayExtent := Display usableArea extent.
layoutExtent := displayExtent - (2 @ 2 * margin).
lo := margin.
@@ -21,8 +21,11 @@ caculateWindowBounds
classes := classCategories bottomLeft extent: le.
evaluator := classes bottomLeft extent: shellExtent.
superclasses := classCategories topRight extent: lw @ topHeight.
- classDef := superclasses topRight extent: (codeWidth - lw) @ topHeight.
+ classDef := superclasses topRight extent: (codeWidth - lw) @ (topHeight * 0.65).
+ classicClassDef := superclasses topRight extent: (codeWidth - lw) @ (topHeight * 0.65).
+ classicClassButtonBar := superclasses topRight + (0 @ (topHeight * 0.65)) extent: (codeWidth - lw) @ (topHeight * 0.35).
instanceSelectors := classDef topRight extent: le.
+ classicProtocol := instanceSelectors.
classSelectors := instanceSelectors topRight extent: le.
configurations := lo extent: lw @ (lh // 2).
packages := configurations bottomLeft extent: lw @ (lh // 2).
@@ -35,12 +38,18 @@ caculateWindowBounds
app2 := app1 topRight extent: appExtent.
app3 := evaluator topRight - (0 @ lh) extent: appExtent.
app4 := app3 topRight extent: appExtent.
+ projectList := app1.
+ transcript := projectList topRight + (0 @ (projectList height // 2))
+ extent: (layoutExtent x - projectList topRight x) @ (projectList height // 2).
dict
at: #classCategories put: classCategories;
at: #classes put: classes;
at: #evaluator put: evaluator;
at: #superclasses put: superclasses;
at: #classDef put: classDef;
+ at: #classicClassDef put: classicClassDef;
+ at: #classicClassButtonBar put: classicClassButtonBar;
+ at: #classicProtocol put: classicProtocol;
at: #instanceSelectors put: instanceSelectors;
at: #classSelectors put: classSelectors;
at: #configurations put: configurations;
@@ -54,5 +63,8 @@ caculateWindowBounds
at: #app2 put: app2;
at: #app3 put: app3;
at: #app4 put: app4;
+ at: #projectList put: projectList;
+ at: #workspace put: method;
+ at: #transcript put: transcript;
yourself.
^ dict
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDStandardWindowProperties.class/methodProperties.json b/repository/Tode-Client-Common.package/TDStandardWindowProperties.class/methodProperties.json
index f807edfc4..d598fbe00 100644
--- a/repository/Tode-Client-Common.package/TDStandardWindowProperties.class/methodProperties.json
+++ b/repository/Tode-Client-Common.package/TDStandardWindowProperties.class/methodProperties.json
@@ -2,7 +2,7 @@
"class" : {
"standardOne" : "dkh 5/31/2014 18:09" },
"instance" : {
- "caculateWindowBounds" : "dkh 5/31/2014 17:51",
+ "caculateWindowBounds" : "dkh 8/31/2015 17:28",
"codeWidthFactor" : "dkh 5/31/2014 17:07",
"codeWidthFactor:" : "dkh 5/31/2014 17:07",
"extraLists" : "dkh 5/31/2014 17:07",
diff --git a/repository/Tode-Client-Common.package/TDTopezClient.class/instance/clearUserEditFlagFor..st b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/clearUserEditFlagFor..st
new file mode 100644
index 000000000..282be8add
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/clearUserEditFlagFor..st
@@ -0,0 +1,3 @@
+as yet unclassified
+clearUserEditFlagFor: aWindowId
+ self windowStatus clearUserEditFlagFor: aWindowId
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDTopezClient.class/instance/editElement.aspect.label.inWindow.at..st b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/editElement.aspect.label.inWindow.at..st
index 48219bc93..6633c69a6 100644
--- a/repository/Tode-Client-Common.package/TDTopezClient.class/instance/editElement.aspect.label.inWindow.at..st
+++ b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/editElement.aspect.label.inWindow.at..st
@@ -7,7 +7,16 @@ editElement: aClientElement aspect: aspectSelector label: labelString inWindow:
self currentWindowId: windowId.
label := labelString.
newWindow := (self windowStatus windowAt: windowId) isNil.
- (win := self editorWindowAt: windowId) model
+ win := self editorWindowAt: windowId.
+ newWindow
+ ifFalse: [
+ | morph |
+ morph := win model activeEditor morph.
+ morph canDiscardEdits
+ ifFalse: [
+ morph promptForCancel
+ ifTrue: [ ^ self ] ] ].
+ win model
perform: aspectSelector;
clientElement: aClientElement;
windowId: windowId;
diff --git a/repository/Tode-Client-Common.package/TDTopezClient.class/instance/editStonElement..st b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/editStonElement..st
index 0773b82a6..320a28b03 100644
--- a/repository/Tode-Client-Common.package/TDTopezClient.class/instance/editStonElement..st
+++ b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/editStonElement..st
@@ -1,6 +1,6 @@
as yet unclassified
editStonElement: aStonString
| clientElement |
- clientElement := STON fromString: aStonString.
+ clientElement := self objectSerializer fromString: aStonString.
clientElement topez: self.
^self editClientElement: clientElement
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDTopezClient.class/instance/eventCache.st b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/eventCache.st
new file mode 100644
index 000000000..ecd44f22f
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/eventCache.st
@@ -0,0 +1,4 @@
+client element caching
+eventCache
+ eventCache ifNil: [ eventCache := TDEventsCache new ].
+ ^ eventCache
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDTopezClient.class/instance/interactWith..st b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/interactWith..st
index bc7c3a536..6e0f7683f 100644
--- a/repository/Tode-Client-Common.package/TDTopezClient.class/instance/interactWith..st
+++ b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/interactWith..st
@@ -1,5 +1,5 @@
as yet unclassified
interactWith: aString
| interaction |
- interaction := STON fromString: aString.
- ^STON toString: interaction interact
\ No newline at end of file
+ interaction := self objectSerializer fromString: aString.
+ ^self objectSerializer toString: interaction interact
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDTopezClient.class/instance/logStack.st b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/logStack.st
new file mode 100644
index 000000000..c62d2157e
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/logStack.st
@@ -0,0 +1,3 @@
+as yet unclassified
+logStack
+ self logStackMessage value
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDTopezClient.class/instance/logStackMessage.st b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/logStackMessage.st
new file mode 100644
index 000000000..d775f2a2a
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/logStackMessage.st
@@ -0,0 +1,11 @@
+as yet unclassified
+logStackMessage
+ logStackMessage
+ ifNil: [
+ logStackMessage := TZGsMessageSend new
+ topez: self;
+ receiver: (self session asOopType: self topezServerOop);
+ selector: 'logExceptionStack';
+ arguments: #();
+ transform: #'raw' -> nil ].
+ ^ logStackMessage
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDTopezClient.class/instance/objectSerializer..st b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/objectSerializer..st
new file mode 100644
index 000000000..4c64316fd
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/objectSerializer..st
@@ -0,0 +1,3 @@
+as yet unclassified
+objectSerializer: aTodeObjectSerializer
+ objectSerializer := aTodeObjectSerializer
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDTopezClient.class/instance/objectSerializer.st b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/objectSerializer.st
new file mode 100644
index 000000000..ae97f815b
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/objectSerializer.st
@@ -0,0 +1,5 @@
+as yet unclassified
+objectSerializer
+ objectSerializer
+ ifNil: [ objectSerializer := TodeObjectSerializer serializeUsing: TodeObjectSerializer defaultProtocolSignatureArray ].
+ ^ objectSerializer
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDTopezClient.class/instance/remapTranscriptClientForwarderFrom.to..st b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/remapTranscriptClientForwarderFrom.to..st
new file mode 100644
index 000000000..266faad74
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/remapTranscriptClientForwarderFrom.to..st
@@ -0,0 +1,5 @@
+as yet unclassified
+remapTranscriptClientForwarderFrom: oldTranscript to: newTranscript
+ "noop"
+
+
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDTopezClient.class/instance/retireClientElement..st b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/retireClientElement..st
new file mode 100644
index 000000000..834cf5084
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/retireClientElement..st
@@ -0,0 +1,3 @@
+client element caching
+retireClientElement: clientElement
+ self eventCache listAt: #clientElementRetirees add: clientElement clientElementOop
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDTopezClient.class/instance/shellHistory.st b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/shellHistory.st
index b4631e251..44b4a171d 100644
--- a/repository/Tode-Client-Common.package/TDTopezClient.class/instance/shellHistory.st
+++ b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/shellHistory.st
@@ -1,3 +1,3 @@
as yet unclassified
shellHistory
- ^ STON toString: self shell history asArray
\ No newline at end of file
+ ^ self objectSerializer toString: self shell history asArray
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDTopezClient.class/instance/tabCompletionMessage.st b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/tabCompletionMessage.st
index d11bf7cff..764f262f5 100644
--- a/repository/Tode-Client-Common.package/TDTopezClient.class/instance/tabCompletionMessage.st
+++ b/repository/Tode-Client-Common.package/TDTopezClient.class/instance/tabCompletionMessage.st
@@ -7,5 +7,5 @@ tabCompletionMessage
receiver: (self session asOopType: self topezServerOop);
selector: 'tabCompletion:';
arguments: #();
- transform: #'native' -> nil ].
+ transform: #'ston' -> nil ].
^ tabCompletionMessage
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDTopezClient.class/methodProperties.json b/repository/Tode-Client-Common.package/TDTopezClient.class/methodProperties.json
index 424259e9b..72b2e542e 100644
--- a/repository/Tode-Client-Common.package/TDTopezClient.class/methodProperties.json
+++ b/repository/Tode-Client-Common.package/TDTopezClient.class/methodProperties.json
@@ -18,44 +18,52 @@
"adornmentColor" : "dkh 11/26/2012 15:16",
"autoCommitDisabled" : "dkh 2/21/2013 18:23",
"bounds" : "dkh 2/5/2013 07:57",
+ "clearUserEditFlagFor:" : "dkh 8/31/2015 17:01",
"currentWindowId:" : "dkh 1/26/2013 09:58",
"dbContinue:" : "dkh 1/11/2014 14:27",
"dbStep:forProcessOop:" : "dkh 1/11/2014 15:43",
"deleteWindowAt:" : "dkh 10/19/2013 11:19",
"editClientElement:" : "dkh 1/8/2014 22:00",
- "editElement:aspect:label:inWindow:at:" : "dkh 8/26/2014 06:12",
- "editStonElement:" : "dkh 1/8/2014 22:00",
+ "editElement:aspect:label:inWindow:at:" : "dkh 8/17/2015 16:25",
+ "editStonElement:" : "dkh 6/25/2015 16:41",
"editorWindowAt:" : "dkh 12/27/2012 08:59",
"environmentId" : "dkh 2/24/2013 07:11",
"evaluateTokenMessage" : "dkh 3/29/2013 15:07",
"evaluator" : "dkh 11/21/2012 16:02",
+ "eventCache" : "dkh 8/11/2015 16:15",
"exception:" : "dkh 3/29/2013 13:43",
"exception:context:" : "dkh 3/29/2013 14:08",
"executeRestoreFromBackupFromClient:" : "dkh 8/2/2013 11:52",
"handleDebugExceptionsDuring:" : "dkh 1/11/2014 14:27",
"informWarning:" : "dkh 7/25/2014 14:24",
- "interactWith:" : "dkh 10/20/2013 14:54",
+ "interactWith:" : "dkh 6/25/2015 16:41",
+ "logStack" : "dkh 3/16/2015 15:50",
+ "logStackMessage" : "dkh 3/16/2015 15:57",
"logout" : "dkh 8/26/2014 05:54",
"nextAvailableWindowId" : "dkh 11/26/2012 15:04",
+ "objectSerializer" : "dkh 6/25/2015 15:17",
+ "objectSerializer:" : "dkh 6/25/2015 15:18",
"openDebugger" : "dkh 2/4/2013 14:36",
"openDebuggerMessage" : "dkh 3/29/2013 15:07",
"postCopy" : "dkh 3/29/2013 15:17",
"proxyBehaviorClass" : "dkh 5/28/2013 13:27",
"refreshViewFor:" : "dkh 1/11/2014 08:09",
+ "remapTranscriptClientForwarderFrom:to:" : "dkh 4/4/2015 16:50",
"resetObjIn" : "dkh 12/15/2012 08:38",
"resetObjInMessage" : "dkh 3/29/2013 15:07",
+ "retireClientElement:" : "dkh 8/12/2015 12:54",
"setExceptionMessage" : "dkh 3/29/2013 15:06",
"setFindText:isRegex:" : "dkh 1/31/2014 07:44",
"shell" : "dkh 11/19/2012 15:30",
"shell:" : "dkh 11/19/2012 15:30",
- "shellHistory" : "dkh 3/28/2013 19:58",
+ "shellHistory" : "dkh 6/25/2015 16:41",
"shutdown" : "dkh 8/26/2014 05:54",
"spawnWindow" : "dkh 5/28/2013 14:20",
"spawnWindowFromServer" : "dkh 6/5/2013 05:21",
"status" : "dkh 11/26/2012 15:49",
"stylerClass" : "dkh 11/26/2012 15:12",
"tabCompletion:" : "dkh 3/28/2013 08:39",
- "tabCompletionMessage" : "dkh 3/29/2013 15:07",
+ "tabCompletionMessage" : "dkh 12/17/2014 19:04",
"update:" : "dkh 8/26/2014 06:07",
"windowActive:" : "dkh 11/27/2012 14:51",
"windowIdNamed:" : "dkh 11/26/2012 15:03",
diff --git a/repository/Tode-Client-Common.package/TDTopezClient.class/properties.json b/repository/Tode-Client-Common.package/TDTopezClient.class/properties.json
index aa0d63756..30f7daa56 100644
--- a/repository/Tode-Client-Common.package/TDTopezClient.class/properties.json
+++ b/repository/Tode-Client-Common.package/TDTopezClient.class/properties.json
@@ -17,7 +17,10 @@
"setExceptionMessage",
"resetObjInMessage",
"openDebuggerMessage",
- "tabCompletionMessage" ],
+ "logStackMessage",
+ "tabCompletionMessage",
+ "objectSerializer",
+ "eventCache" ],
"name" : "TDTopezClient",
"pools" : [
],
diff --git a/repository/Tode-Client-Common.package/TDWindowStatus.class/instance/clearUserEditFlagFor..st b/repository/Tode-Client-Common.package/TDWindowStatus.class/instance/clearUserEditFlagFor..st
new file mode 100644
index 000000000..9bc28e2ae
--- /dev/null
+++ b/repository/Tode-Client-Common.package/TDWindowStatus.class/instance/clearUserEditFlagFor..st
@@ -0,0 +1,3 @@
+accessing
+clearUserEditFlagFor: aWindowId
+ (self windowAt: aWindowId) model clearUserEditFlag
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDWindowStatus.class/instance/unregisterShellWindow..st b/repository/Tode-Client-Common.package/TDWindowStatus.class/instance/unregisterShellWindow..st
index 584b157f5..1278b1dff 100644
--- a/repository/Tode-Client-Common.package/TDWindowStatus.class/instance/unregisterShellWindow..st
+++ b/repository/Tode-Client-Common.package/TDWindowStatus.class/instance/unregisterShellWindow..st
@@ -1,16 +1,17 @@
accessing
unregisterShellWindow: aWindow
- | theShell index |
- theShell := aWindow model cliShell.
- self shellWindows remove: aWindow ifAbsent: [ ].
- index := windows indexOf: aWindow.
- index > 0
- ifTrue: [ windows at: index put: nil ].
- windows
- do: [ :window |
- window ~~ nil
- ifTrue: [
- (window ~~ aWindow and: [ window model topez shell == theShell ])
- ifTrue: [
- window model windowIsClosing.
- window delete ] ] ]
\ No newline at end of file
+ | theShell index |
+ aWindow ifNil: [ ^ self ].
+ theShell := aWindow model cliShell.
+ self shellWindows remove: aWindow ifAbsent: [ ].
+ index := windows indexOf: aWindow.
+ index > 0
+ ifTrue: [ windows at: index put: nil ].
+ windows
+ do: [ :window |
+ window ~~ nil
+ ifTrue: [
+ (window ~~ aWindow and: [ window model topez shell == theShell ])
+ ifTrue: [
+ window model windowIsClosing.
+ window delete ] ] ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDWindowStatus.class/instance/windowIsClosing.st b/repository/Tode-Client-Common.package/TDWindowStatus.class/instance/windowIsClosing.st
index 5c2747397..38f163e22 100644
--- a/repository/Tode-Client-Common.package/TDWindowStatus.class/instance/windowIsClosing.st
+++ b/repository/Tode-Client-Common.package/TDWindowStatus.class/instance/windowIsClosing.st
@@ -4,8 +4,5 @@ windowIsClosing
self shellWindows isEmpty not
ifTrue: [ ^ self ].
- (windows select: [ :each | each notNil ])
- do: [ :window |
- window model windowIsClosing.
- window delete ].
+ self close.
windows detect: [ :window | window notNil ] ifNone: [ ^ self ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Common.package/TDWindowStatus.class/methodProperties.json b/repository/Tode-Client-Common.package/TDWindowStatus.class/methodProperties.json
index 1476dbe78..69587d141 100644
--- a/repository/Tode-Client-Common.package/TDWindowStatus.class/methodProperties.json
+++ b/repository/Tode-Client-Common.package/TDWindowStatus.class/methodProperties.json
@@ -4,6 +4,7 @@
"instance" : {
"activeWindowIndex" : "dkh 11/27/2012 14:53",
"activeWindowModel" : "dkh 11/27/2012 15:47",
+ "clearUserEditFlagFor:" : "dkh 8/31/2015 17:02",
"close" : "dkh 12/27/2012 08:59",
"collapse" : "dkh 12/27/2012 08:59",
"deleteWindowAt:" : "dkh 10/19/2013 11:42",
@@ -18,10 +19,10 @@
"registerShellWindow:" : "dkh 12/21/2012 10:08",
"shellWindowCount" : "dkh 1/15/2013 11:24",
"shellWindows" : "dkh 12/21/2012 10:15",
- "unregisterShellWindow:" : "dkh 1/15/2013 11:56",
+ "unregisterShellWindow:" : "dkh 4/10/2015 14:02",
"windowActive:" : "dkh 1/26/2013 10:01",
"windowAt:" : "dkh 11/19/2012 14:54",
"windowAt:put:" : "dkh 11/27/2012 14:57",
"windowIdNamed:" : "dkh 11/19/2012 16:10",
- "windowIsClosing" : "dkh 12/21/2012 10:16",
+ "windowIsClosing" : "dkh 9/1/2015 09:03",
"windowNamesAndIds" : "dkh 11/19/2012 14:54" } }
diff --git a/repository/Tode-Client-Common.package/monticello.meta/version b/repository/Tode-Client-Common.package/monticello.meta/version
index 4811b6d83..a7f73b9dd 100644
--- a/repository/Tode-Client-Common.package/monticello.meta/version
+++ b/repository/Tode-Client-Common.package/monticello.meta/version
@@ -1 +1 @@
-(name 'Tode-Client-Common-dkh.117' message 'Issue #107: arrange to resize all existing windows when window layout is changed' id '62a19448-9daa-440a-be72-45462dd0a1f2' date '26 August 2014' time '6:25:06.483287 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.116' message 'use maximum space (and overlap) for all windows' id '4f197992-0667-4668-8274-ed5bbc7b3898' date '6 August 2014' time '8:46:54.95945 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.115' message 'browser and debugger layed out satisfactorily' id '39b06453-a688-4aa3-b7ec-369299da6b1e' date '6 August 2014' time '8:12:52.304612 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.113' message 'merged by GitFileTree-MergeDriver' id '2520f852-6709-46a2-94e7-ad61ca71decd' date '6 August 2014' time '6:04:02.659559 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.112' message 'Create TDSmallWindowProperties for presentations on non-HDI projectors' id '78795b35-e3c8-4b1a-b59a-1a46ceb39ff1' date '6 August 2014' time '5:56:24.38195 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.111' message 'ignore README.md in the client/descriptions directory; signal error when running headless and error occurs on server while running tODE command' id '2c20c20d-7e3e-4a70-9b49-2311ff6b5413' date '28 July 2014' time '7:57:51.009868 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.110' message 'make it possible to evaluate Smalltalk expressions on server ... side effects are more important that return value' id 'e0403b58-b3a0-43ef-8011-1598985ed6f5' date '26 July 2014' time '11:20:13.352127 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.109' message 'add batchMode to TDShell ... tode client will NOT swap out the Transcript client forwarder in batch mode ... ultimately provide a means for choosing whether Transcript output should show up in client or not' id 'd42aed90-335a-493a-baf0-6659ba55caf5' date '25 July 2014' time '4:54:39.004675 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.108' message 'clean up the client-side interaction when client is run in headless mode' id 'd31917fe-11e6-43b6-8fe2-b87686ba6752' date '25 July 2014' time '4:21:02.114664 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.107' message 'allow for turning on debugMode when running non-console evaluations' id '15449619-b69a-40a5-b20a-53ed2deab3db' date '25 July 2014' time '7:53:24.149103 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.106' message 'implement --lock option for updateClient builtin' id '7fbdb162-a3ae-4daf-b5e4-d81aeeea4248' date '22 July 2014' time '1:45:50.640014 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.105' message 'more parallel GsDevKit and Web Edition Root work... until web edition is retired ...' id '031b3ab7-8ff5-4727-a783-4717ae1a2ef5' date '21 July 2014' time '10:52:25.025737 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.104' message 'add "Define Dev Kit root'' tode menu item in parallel with the Web Edition Root ... until web edition is retired ...' id '6e084f23-67ea-4dfa-82b4-f3770cd1f335' date '20 July 2014' time '10:30:52.612798 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.103' message 'prepare for changes in gsDevKit structure' id '44c8aae4-e01e-4073-a455-cd6a4bc253cd' date '20 July 2014' time '10:19:04.566069 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.102' message 'add support fro evaluating a comand without opening a console window' id 'c09d3285-ef39-4995-9d17-6730f8133a50' date '19 July 2014' time '7:31:47.560831 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.101' message 'Issue #86: implemented `tODE Edit >> session description name` menu item ...' id '844c8347-b113-40b7-897d-c23b7fd9bcf8' date '7 July 2014' time '9:24:26.109 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.100' message 'fix Issue #93: log to transcript any import errors when importing session descriptions and carry on ...' id 'ae103139-73f1-4c9a-8a0b-d94e999bbd83' date '7 July 2014' time '8:35:19.214 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.99' message 'wrap messages at 80 characters' id '939a88a6-3684-4813-9998-d83625a6f7a1' date '7 July 2014' time '4:59:35.74 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.98' message 'fixes for installTode/updateTode scripts' id 'dcb3e66d-d87b-4481-8df3-5d85bc30e3e4' date '19 June 2014' time '12:37:03.105 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.97' message 'implement installServer client builtIn command. installServer installs GLASS1 and Metacello, etc. while updateServer simply loads a new version of tODE ...' id '21f5d807-3d67-453e-8f71-c584497c53e6' date '19 June 2014' time '12:15:05.549 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.96' message 'porting TDShell class>>cleanForDeploy to Pharo2.0' id '1cb06c0d-73b1-4f36-a6a1-0a571752df93' date '15 June 2014' time '9:54:53.929 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.95' message 'port TDShell class>>cleanForDeploy to Pharo2.0' id 'd38f4087-9ab6-4260-980e-993657807a96' date '15 June 2014' time '9:38:30.916 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.94' message 'missing method resetCacheDirectoryIfInvalid ...' id '80730243-c2c3-455f-824c-52e6bc4f94bd' date '3 June 2014' time '8:14:58.947 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.93' message 'Issue #56: clean up session and close windows on startup
- Pharo2.0 wasn''t hanging, but the pharo image wash
crashing... which is close enough for me:)
- need to test in Pharo1.4 and Pharo3.0 ...' id '60b34327-01f8-4214-bbdf-e8771eff87ba' date '3 June 2014' time '8:09:12.519 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.92' message 'bump version for grins' id '94f2d774-c32e-48f5-ab6b-9647c53b28c5' date '2 June 2014' time '8:01:32.647 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.87' message 'strip out the code associated with the (now) ancient session map stuff and the (recently) ancient window layout code ... the topezclient class now holds onto the window property so that we can provide that to the user for making changes or use it to automatically re-scale the layout if the screen is re-sized' id 'da043771-697a-475a-8233-4583fbde36b1' date '2 June 2014' time '7:52:53.419 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.86' message 'tweak, tweak, tweak goes the alternate layout' id 'b11f3a9f-9494-4fff-8b55-60da16c4ef7c' date '1 June 2014' time '3:47:15.42 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.85' message 'more alternate layout tweaks' id '72f482a5-ea42-4697-ace8-3d9677fcb336' date '1 June 2014' time '3:03:32.735 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.84' message 'revise the alternate layout definition' id '2dd553a6-9b7a-4fec-a499-4300aac213ac' date '1 June 2014' time '2:33:41.325 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.83' message 'adjust for move of image dir to client dir ...' id '1e72dd1d-860c-455f-8333-7178eefe6a67' date '1 June 2014' time '9:59:10.37 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.82' message 'rename TDShell TodeHome to WebEditionRoot - reset menu - define webEditionRoot (same directory path)
- open workspaces with syntax highlighting' id '34b6e0c4-303a-4d74-89ea-28bc7ab88264' date '1 June 2014' time '9:31:49.824 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.81' message 'add TDAlternateWindowProperties which is intended for larger fonts and/or smaller displays ... provides for wider list windows without sacrificing code window width ...' id 'e93e952c-dff1-4abe-bd08-07d388835406' date '31 May 2014' time '7:20:21.282 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.80' message 'Issue #81: define window loyout independent of font and scale to fit display
- define an abstract class TDAbstractWindowProperties
for import/export of properties
- TDStandardWindowProperties defines my standard
layout with options for extra lists (on wide
displays or small fonts) and control proportions
of shell window and code window
- defined small/medium/large (0, 1, 2 extra lists)
that match up pretty well with the layouts I''ve
played with so far.' id '40ee2a62-ace4-4b04-a626-21b4b5a8e9a2' date '31 May 2014' time '6:12:33.47 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.79' message 'converting to use TDSessionDescription instead of OGCustomSessionDescription.
- TDSessionDescription is passed to server so that
the fields (backupDirectory, serverGitRoot
serverTodeHome) can be specified in the session
description and used on the server
- for now server will request the session description
to make upgrading easier (if client updated before
server, server won''t know what to do with the
session description)' id '6a9cd48f-e7f5-476c-82fe-59cb0163658c' date '28 May 2014' time '7:24:10.258 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.78' message 're-enable autoCommit after logout ...' id 'fc670c77-49e2-402f-aaeb-d2c2f553a686' date '27 May 2014' time '11:33:12.96 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.77' message 'flushing cache before load appears to be bad idea?' id '07f02cc1-2bb0-474f-a83e-2de8b71c6ba2' date '26 May 2014' time '5:15:58.456 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.76' message 'reset tode menu when tode home changes' id '1b555df3-2e0d-498d-9da0-c0f6c317f415' date '26 May 2014' time '5:11:06.014 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.75' message 'flushCache before update client load to make sure that the baseline is freshly grabbed' id '3c560531-61fe-4bf4-867d-608f3a0056f4' date '26 May 2014' time '3:09:43.125 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.74' message 'reset tode menu after updating the client ...' id '9982fd73-a1fc-418e-b899-5f0f6739a852' date '25 May 2014' time '10:02:43.129 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.73' message 'start heading in the direction of using raw bounds and general layouts within which different fonts can be used ... as display size and fonts change, different layouts may be more pleasant' id '0f09804a-e17b-4ae0-8b92-be03c88b41d0' date '20 May 2014' time '8:15:05.27272 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.73' message 'start heading in the direction of using raw bounds and general layouts within which different fonts can be used ... as display size and fonts change, different layouts may be more pleasant' id '10a09d68-6b5e-4098-acb8-0dc3b916bcb8' date '20 May 2014' time '8:15:04.780624 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.72' message 'alternate bounds for smaller displays' id '671a8dd3-4f75-401b-8cf5-e1d2acac4eeb' date '19 May 2014' time '9:14:25.107288 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.71' message 'created named window locations app3 and app4 for more options positioning "multi-pane functions"' id 'b6bb5261-a3d4-432b-af97-34fa3777dbec' date '13 May 2014' time '11:02:40.336 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.70' message '- start work on fit-to-display algorithm for window layout' id 'edfcbba7-c840-41f1-a68c-0e182e41bb75' date '5 May 2014' time '8:33:53.447 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.69' message 'another set of structural changes to match current definition in webEditionHome and todeHome ... ' id '3ddf1102-76c9-46e8-9791-da5324726228' date '5 May 2014' time '3:36:37.49 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.68' message 'tweak update client menu label' id 'b3d64407-26f5-43d9-955b-bae8bdd68dbf' date '5 May 2014' time '10:08:15.788 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.67' message '- tweak menu labels
- add refresh menu item' id '2b0b84a6-78da-4699-9970-c8e2d894cfab' date '1 May 2014' time '2:20:06.977 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.66' message 'change the home directory methods to match new structure' id 'b5a86518-e881-4a92-b450-06613fa94fdc' date '30 April 2014' time '4:19:02.347 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.65' message 'easy resetWorldMenu access' id 'd1b163d6-8765-4338-b907-3e1d15a1759c' date '30 April 2014' time '3:56:32.86 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.64' message 'sort the menu items derived from file system' id '66aeb53d-c755-4da5-8139-3aa55761e215' date '23 April 2014' time '10:08:46.328 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.63' message 'fix problem with setting default todeHome...' id 'af1e706b-1644-4456-b026-2306f5a69038' date '14 April 2014' time '11:34:13.738 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.62' message 'add Help to tode main menu' id 'dd7f52aa-7eb5-444b-a97f-f8e02293b1d9' date '13 April 2014' time '8:54:59.648 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.61' message 'when finished with backup, we need to logout to ensure that the topez state matches the restored repo"' id '22174781-1fd3-43dd-87fa-8278a145aaf8' date '13 April 2014' time '8:45:58.381 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.60' message 'properly handle the execution of commands in a shell window that will be used ineractively' id '2d59177e-1ad6-4d70-ba8e-39d844abebf5' date '13 April 2014' time '8:38:02.856 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.59' message 'workspace menus added ... ' id '042a4bbd-4904-4364-81a5-a4d8198f7b93' date '12 April 2014' time '3:54:04.845 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.58' message 'add tODE to the system menu...eliminate the requirement to maintain workspaces' id '0c76e729-e9ad-423d-8812-38f749c4177a' date '12 April 2014' time '3:17:32.069 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.57' message 'open help window in #method windowLocation...' id '0638d2e8-b714-4478-a657-dde0346f7975' date '31 March 2014' time '1:27:01.482 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.56' message 'add `debugMode` built-in for controlling debugMode' id '1da7cbb4-9266-4fa4-a1e4-833516f0b188' date '30 March 2014' time '8:38:11.042 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.55' message 'arrange for command errors to simply be printed as the command response ... no need to bring up the debugger ...' id 'b6894e9f-821b-4c25-a3c7-64f95a1920d6' date '30 March 2014' time '8:24:03.908 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.54' message 'differentiate between open and spawn for purposes of controlling welcome message ... rip out support for old debugger console ' id '0f85e113-516c-4e27-b515-3b32cbb31f87' date '24 March 2014' time '6:23:55.272 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.53' message 'add windowProperties to TDTopezClient for easy viewing...' id '5fcd3b21-0f00-4c03-aec5-3d5b6256017f' date '24 March 2014' time '8:54:59.982 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.52' message 'minor fixes to windows layout class' id 'b1719b29-0958-4940-9b6c-ec729ebeba3b' date '23 March 2014' time '3:59:10.162 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.51' message 'a bit of formatting' id 'b312bdfb-2d4f-4f03-8bf6-e6e6c91f5ef9' date '23 March 2014' time '3:18:42.882 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.50' message 'bugfix updateServer command' id '93d5da03-5d04-4cb1-8860-65e5c48240e9' date '23 March 2014' time '3:04:44.849 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.49' message 'checkpoint:
- arrange to use TDShell class>>todeHome to reduce
path length in `script` and `updateServer` commands
' id '3b5806de-78c2-4a2d-8684-9e61645ac7e3' date '23 March 2014' time '2:40:07.144 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.48' message 'checkpoint:
- fine tune session description handling
- todeHome will be image level global to simplify
doits ...
- define 4 workspace windows for setting up client
side environment ... part of getting started
experience
- fine tune window properties handling
- testLogin: and testWindowLayout: and `script` command
are start of the batching facilities...' id '986d6370-4d37-4103-a96f-36ad610018aa' date '23 March 2014' time '11:43:30.856 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.47' message 'porting to Pharo3.0' id '8c989350-44e1-4d00-849a-8d1934165850' date '23 March 2014' time '8:22:40.645 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.46' message 'fix script command' id '378df0f7-3b0f-48f6-b8a3-1ddd1a9893f6' date '22 March 2014' time '8:56:16.043 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.45' message 'tweak docs' id '1b2a4f6d-6ef4-424f-abc8-7818da868d28' date '22 March 2014' time '7:21:23.702 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.44' message 'tweak docs' id 'e47bd7a1-11c3-4b32-a198-b3c943142fd7' date '22 March 2014' time '7:14:29.716 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.43' message 'last workspace removed ... ' id '7a6936a2-b091-4330-bbaa-8612a9771060' date '22 March 2014' time '7:07:18.232 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.42' message 'checkpoint ... eliminating the need to any custom workspace in Pharo image ...just console workspace:
- add OBCustomSessionDescription class>>seaside with default session
- `help` writeup
- `whatsNew` command
- `sessionDescription` command (restored)
- `script` command
- `TDShell open` support' id '0d7a7f44-de5d-43ac-b241-17da633ee27b' date '22 March 2014' time '6:49:51.611 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.41' message 'checkpoint:
- support creating and using serialized session descriptions
- cleanup built-in support
- add `builtIns` command
- start work on improving the `getting started` experience
- start work on `help` and `updateClient` commands' id 'e9635ac3-cb96-4a7a-9380-b7fad1268526' date '22 March 2014' time '12:57:53.426 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.40' message 'fix builtin logout...' id '9b0c686d-f2d5-43d5-8c8a-2f0de08c6c8d' date '19 February 2014' time '10:29:31.225 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.39' message 'Issue #53: Make TDTopezClient>>setFindText:isRegex: clientforwarder friendly' id '06bca6f0-f85c-4fc5-abbb-c101a8bd89cf' date '31 January 2014' time '8:57:11.711 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.38' message 'console should activate on open...' id 'd3714b40-ea31-467c-8995-575454d37f84' date '11 January 2014' time '5:07:17.87 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.37' message 'clean up ... attempting to step over ''Transcript show''' id '037f4977-afe1-48c5-a465-72e3160fc0b1' date '11 January 2014' time '4:27:38.322 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.36' message 'fix close builtin' id 'd16a7754-b6c7-4194-9281-2ee59dfa10ef' date '11 January 2014' time '11:27:39.246 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.35' message 'implement refreshViewFor: client callback' id '411bcc10-7a57-407c-bb0d-c9bad6743a38' date '11 January 2014' time '9:08:05.664 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.34' message 'TDTopezClient>>editClientElement:, TodeListEditory>>editStonElement: allows for multiple clientElements to be shipped in one STON packet. TodeListEditor>>setList: allows list to be updated directly ... more efficient that #refreshList' id 'ba35581f-d077-4d09-b2ba-d22a1a45e317' date '8 January 2014' time '10:06:15.424 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.33' message 'implement restoreBackup builtin ... allows for restoreFromBackup without needing to install tODE first' id '0df145c7-df57-4f0a-bb12-b23fc7eb05b3' date '5 January 2014' time '3:00:47.429 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.32' message 'include netldi in window label' id '5785c7c9-1d8a-41cd-868a-388e221bf6ac' date '16 December 2013' time '3:12:21.54 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.31' message 'add `installTode --topaz ...` functionality:
generates a topaz script suitable for batch jobs' id 'da4b260b-8eac-43b7-8797-07b0097bf686' date '14 December 2013' time '7:26:37.375 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.30' message 'add --backupDir option to sessionDescription command' id 'ff4e0798-bd04-4950-9702-a36ab1c7a597' date '10 December 2013' time '6:56:09.369 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.29' message 'put stonename into shell label' id '31c021ad-5e65-4ce0-af91-6ac5aa084a1c' date '9 December 2013' time '6:49:58.52 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.28' message 'implement support for installTode --clientScriptPath option....--serverPath is still a bit up in the air' id '4b869155-5f0a-4777-9b07-50422f9e85ec' date '8 December 2013' time '7:03:50.097 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.27' message 'finish up the implementation of the sessionDescription command' id '908f9ec0-db93-44ce-a639-00a7c99a6180' date '8 December 2013' time '3:04:05.704 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.26' message 'add testLogin command' id 'a1fc248f-afe5-4f18-8576-a891858c78cf' date '8 December 2013' time '10:42:11.435 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.25' message 'implement sessionDescription builtin which replaces login builtin' id 'f0739814-5c45-4709-86d2-fd4afe7e5a2b' date '8 December 2013' time '9:12:16.495 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.24' message 'include netldiName in console window label when set by login command' id 'e534e80e-bee2-4fd5-922d-e91348ee68f2' date '14 November 2013' time '4:24:07.525 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.23' message 'add builtin login command to allow user to dynamically switch netldi name to be used (and potentially other login parameters as well)' id '9a2acc06-e7b4-4176-8730-60646fa23711' date '14 November 2013' time '12:24:41.76 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.22' message 'add tODE built-in commmand installTode that performs install/upgrade against remote GemStone repository' id '575ba90f-128a-4a60-9e65-584a274f7e4c' date '12 November 2013' time '10:38:48.191 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.21' message 'TDCommandLine object passed over wire instead of parsed tokens ... ball is in servers court' id '2d420814-26d5-4606-a6c8-fec06f7ee2ac' date '10 November 2013' time '8:05:38.132 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.20' message 'adding support for various interactions: choice, confirm, inform, text, multiline-text' id 'aa389741-7f31-4e00-bd32-01368db1282a' date '20 October 2013' time '5:57:12.135 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.19' message 'support for closing windows from server...' id 'e74fc02a-6cc4-4d57-8f9f-f34907fec593' date '19 October 2013' time '10:00:42.989 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.18' message 'add #app1 and #app2 window locations ....' id 'eeaa2df1-263a-47a0-b740-79b7aeca6806' date '13 October 2013' time '3:04:20.185 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.17' message 'add `classCategories` window location' id 'abf3816d-075c-4156-ba5e-fccc733a2922' date '12 October 2013' time '12:47:55.371 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.16' message 'align context with debugger stack window ... use debugger width too...' id 'fa778323-c67b-4633-b757-f40fd40903ca' date '27 September 2013' time '6:40:07.702 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.15' message 'use #initializeBounds for window sizing to avoid disrupting exsting Session Descriptions' id '2c235e89-c091-4e9c-a308-c71dea2edd3e' date '5 September 2013' time '9:59:44.091 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.14' message 'record backup and restore times and bu list shows them' id '9d57b018-a4d9-4026-8031-623a10e5ffaf' date '2 August 2013' time '12:16:32.116 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.13' message 'independent control of debuggerWidth...' id 'dae14267-c1c5-42d2-917e-91983ca8d43c' date '12 July 2013' time '10:12:32.697 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.12' message 'add spawnWindowFromServer ... used for initiating spawn from server command (like sh)' id '1f2a4b42-4f37-40c4-8a93-01cf98225119' date '5 June 2013' time '5:26:23.717 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.11' message 'tweak default shellWindowHeight' id '4dee8fdb-f170-4c1b-82be-fa1668d039f0' date '4 June 2013' time '9:46:42.016 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.10' message 'add independent shellWindow height for additional control of layout' id 'ddcc9b40-0cd7-4187-9d7e-6f8f8b56e768' date '4 June 2013' time '9:45:26.176 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.9' message 'refactor gci calls for clientElements so that the call is moved into the gemstone client leaving pharo client free to perform clientElement code directly' id '536cc93d-c917-4cf3-a981-fb8906884789' date '28 May 2013' time '2:59:12.337 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.8' message 'working on getting SHOUT to work for Pharo and GemStone' id 'f7214e9a-fd11-491e-a6cd-844374eb5ea5' date '28 May 2013' time '1:39:11.766 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.7' message 'continued repackaging' id '86876911-4b94-449e-a883-2fc912c87d5d' date '26 May 2013' time '9:33:35.303 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.6' message 'pharo and gemstone specific client classes' id 'e668ad57-0b0d-4c02-9510-96f3c62ea9c4' date '26 May 2013' time '2:15:07.635 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.5' message 'tweak' id '8bc0be24-41fe-4a49-b4b8-642c07d1c966' date '26 May 2013' time '2:04:28.233 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.4' message 'continue repackage effort' id '2c659eb3-b7eb-4051-8425-3fc4f710e98e' date '26 May 2013' time '2:02:42.722 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.3' message 'move some gemstone-specific methods' id 'b52d0d68-b289-43e0-a173-aafb5eaefd65' date '26 May 2013' time '12:23:27.199 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.2' message 'TodeSession is for GemStone only...' id 'da7df5b7-9b8a-471f-8245-e95dd90f87ec' date '26 May 2013' time '12:20:22.736 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.1' message 'pull in the common client code ... ' id '89c125a8-fb74-4d57-a27c-ccf4114fd766' date '26 May 2013' time '12:06:49.859 pm' author 'dkh' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(name 'Tode-Client-Common-dkh.112' message 'debugMode built-in --set and --clear commands refer to console-based debugMode. To change the default debugMode, use the --default option. See ''debugMode --help''' id '56ee9225-d4b7-4b13-a2c6-4575925d0216' date '6 August 2014' time '9:44:00.324692 am' author 'dkh' ancestors ((id '2c20c20d-7e3e-4a70-9b49-2311ff6b5413')) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())
\ No newline at end of file
+(name 'Tode-Client-Common-dkh.184' message 'Issue #184: missed a spot or two where bulk window closing was not protected by a TDShouldFlushEventCacheNotification handler' id 'bb7d34ea-2d62-4904-8909-3ec675e426dc' date '1 September 2015' time '9:22:27.641977 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.183' message 'Issue #186: add classic window locations in support of the button bar' id '29c4097f-0342-4d6e-96af-f8c4525c4252' date '31 August 2015' time '5:42:43.093908 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.182' message 'now that we''re honoring canDiscardEdits, need a way to clearUserEditFlag in code editors (used in debugger at the moment) - client side support
' id 'ab7739ed-e10e-4ae4-ae55-6c9c2cc6678b' date '31 August 2015' time '5:15:11.37659 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.181' message 'Issue #184: when performing `close` command (or `logout`), accumulate all of the flushEventCache calls till all windows have been closed ... much snappier over the wire ' id '93f2bb4b-1a1a-436e-9148-d33f807226fe' date '31 August 2015' time '2:33:59.452099 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.180' message 'Issue #186: tweak the jigsaw def for classic protocol' id 'eda2a209-8c10-40fa-a41f-1ab3a182d2c4' date '20 August 2015' time '12:21:02.432288 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.179' message 'Issue #186: start work on button bar example ... implement a `class browser` that has instance/class buttons ' id '475a41ac-7a5b-4de8-ac26-ebc357480e93' date '19 August 2015' time '9:25:19.880869 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.178' message 'Issue #84: add clinet-side support for the `Window > history` menu item ... list full client element history and allow user to pick an old client element for viewing ' id '14324060-7ea0-4488-92e3-556d0adc803e' date '17 August 2015' time '5:11:25.834838 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.177' message 'honor canDiscardEdits and prompt for correct action' id 'b39ad48c-56ad-4d1b-b0b6-77b1211a15ad' date '17 August 2015' time '4:04:37.848427 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.176' message 'client builtin `updateClient` needs to use the todeLoad.st file ...' id '851b377d-6c71-4354-a1fa-8236657ecc11' date '16 August 2015' time '11:49:27.896651 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.175' message 'Issue #184: tweak client element caching' id '35dbc418-9442-4be7-8f25-024054de15cb' date '12 August 2015' time '12:57:11.565666 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.174' message 'Issue #184: implement (client-side) TDTopezGemStoneClient>>flushCache: logic. Necessitates introduction of tODE API Version for client and server, so that I can use new clients with old servers and old clients with new servers' id '49e31420-f7f1-413c-8ef1-5d6afcea2215' date '12 August 2015' time '12:44:03.469177 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.173' message 'Issue #184: introduce TDEventsCache for passing cached event information back and forth between client and server while minimizing round trips... first application is to record the clientElements that are no longer referenced by a window (retired) on the client ... retired clientElements can be safely removed from the server-side elementCache ... ' id 'c6ccb62c-3388-41ab-b44e-b19e4a27b14d' date '12 August 2015' time '10:29:15.633363 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.172' message 'add gemstone version to console window label' id '5368ce3e-a4f8-4838-bd60-be98421c8296' date '7 July 2015' time '4:29:38.699982 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.171' message 'Issue #175: convert client-side code to use #objectSerializer' id '364ddf2b-87fa-4167-a4f7-ece40a3e9632' date '25 June 2015' time '5:10:58.12489 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.170' message 'Issue #175: checkpoint client-side changes for TodeObjectSerializer' id '8c0c988b-01fa-443b-8b89-afbb35afed9e' date '25 June 2015' time '3:26:32.714297 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.169' message 'console message result should sometimes be nil... oh well pick an alternate method' id 'f2d42fc3-8102-4920-aa73-2c8956b2ceec' date '17 April 2015' time '1:07:29.045919 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.168' message 'Issue #168: revert to full activation and solve keyboard focus later.... allow a console to be attached to a server block TDShell instance ... when it closes there is a logout, but that may not be critical:)' id 'a64b3e05-ff4e-401c-8942-c24df9593871' date '17 April 2015' time '6:34:17.303992 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.167' message 'another round of fixing to handle copiedVars better ... ' id '5d18ac16-8567-4b1c-80e6-65c5d321f4a7' date '15 April 2015' time '4:20:13.181208 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.166' message 'nested blocks not yet handled by onServerDo:, so move to separate method and xfer vals to temps ...' id 'f284c696-b223-483f-a6c6-8324fddd85e5' date '15 April 2015' time '1:33:47.393203 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.165' message 'need quit for shells not associated with at client window' id 'd80a1312-a2da-42bf-a8e4-229da73ea1a9' date '15 April 2015' time '11:27:11.726 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.164' message 'additional GsDevKit server block support' id '42a06d68-12f9-4141-bbc6-cb8b283759f7' date '15 April 2015' time '11:12:48.456904 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.163' message 'whoops, lost ability to bind server vars to client temp var values...' id '28eee77e-89d4-437f-a967-bf257d15436b' date '12 April 2015' time '11:55:44.655412 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.162' message 'fiddle with the tODE system menu' id 'aabdbcd5-9067-4e53-bcb3-a9b09692ef4a' date '12 April 2015' time '11:36:19.097805 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.161' message 'add TDServerBlockWorkspace ... needed to keep the session alive while doing work ... ''shell'' workspace variable holds onto the shell for the desired session ... close window, closes session ... Roassal menu opens a TDServerBlockWorkspace' id '374aa2ed-f42a-4640-a945-beddbc85ecb0' date '12 April 2015' time '8:31:59.276128 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.160' message 'serverBlocks is working now ...' id '57012cff-5376-48fc-9790-7e2c6d5c6d7b' date '11 April 2015' time '1:13:49.463206 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.159' message 'client-side support for executing "local" blocks on the server ... client-side support for evaluating smalltalk code with variable bindings' id 'bc674370-eedb-44a2-85be-3506746fbb6f' date '11 April 2015' time '12:47:59.418341 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.158' message 'client-side support for evaluating smalltalk code on server and passing result back as STON ... hook up to roassal workspace' id '346869a1-deb8-4bf4-b251-97497dae96b6' date '11 April 2015' time '7:17:08.166092 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.157' message 'roassal workspace is a peer of console ... ' id '5aba3f5b-3915-4168-9805-2edbf76a85fc' date '10 April 2015' time '2:23:07.081357 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.156' message 'move more of the roassal code to the roassal package' id '8158976a-b561-46db-aa6b-7a5264302e12' date '9 April 2015' time '8:12:06.667937 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.155' message 'start adding support for Roassal workspace' id '1515d159-06ef-475e-9e6c-b3945f0b58ad' date '9 April 2015' time '5:33:27.904236 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.154' message 'push tode system menu around' id '20005fb9-d2d8-4d86-b92d-86fb1fc1381a' date '4 April 2015' time '5:26:27.167365 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.153' message 'Need to remap the client forwarder for transcript when it is changed while shell is open' id 'e9d90578-0a32-4034-ac68-a01882992521' date '4 April 2015' time '5:05:58.028811 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.152' message 'improve handling of Transcript' id '38adcebc-6fe7-4cf3-a498-ac908a983351' date '26 March 2015' time '5:53:31.050132 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.151' message 'shell builtin ''script'' gets a bit of a makeover ' id '53f22341-8810-4912-89bc-0fb815cbc787' date '26 March 2015' time '11:22:35.54639 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.150' message 'It was too aggressive to remove installServer command ...it''s required' id '44cce8a6-727f-44b4-9a8e-5933f034816c' date '25 March 2015' time '9:40:00.584503 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.149' message 'fiddle about with tode menu structure...' id '078f4efc-6934-4b05-9258-0bcafd653c60' date '25 March 2015' time '9:26:32.93655 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.148' message 'eliminate the installServer and updateServer builtin commands update the help and builtIns man page ... remove whatsNew, since I''m not keeping it updated' id 'd632c822-7f5c-4f48-bccb-5655e36a8b87' date '25 March 2015' time '9:19:16.687234 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.147' message 'Another pass at reorganizing the tODE menu ... server updates are no longer done from the client ... use the bash scripts or tODE itself' id 'e1b0410a-628b-4cc2-b448-c55846a61056' date '25 March 2015' time '8:48:31.918256 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.146' message 'fix updateClient builtIn' id '3d718720-bfd4-434a-ad7a-7de2eb3d1220' date '25 March 2015' time '7:58:33.432075 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.145' message 'revisit implementation of updateClient and updateServer' id '373fd46a-0654-4e5e-8d5d-f3768ec952d6' date '24 March 2015' time '3:49:04.741597 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.144' message 'Push some tode menu items around' id '0be7a727-f0f0-4020-a6d0-b47bc768b79f' date '24 March 2015' time '3:16:57.555004 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.143' message 'fix logic for detecting transcript window for resizing' id '7811fccf-b352-4756-abbd-a3b09fe2be92' date '24 March 2015' time '2:15:26.167197 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.142' message 'arrange for window properties to be recalculated and currentShell to be reset to nil on startup ... ' id '095c8daf-8034-4073-9998-24fa61ad96fd' date '21 March 2015' time '8:13:47.329076 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.141' message 'add Settings Browser to tODE menu ... for managing fonts' id 'c35a6167-98b4-4d84-8796-c321d2d3e816' date '21 March 2015' time '5:10:24.668304 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.140' message 'Major chunk of work ... create a wholly owned tODE world menu in Pharo with a number of useful tools exposed via menu items. Can flip between tODE world menu and pharo world menu ... also start managing the Transcript location and extent via window properties.' id 'a59d7da1-bb7e-4574-b72a-4ab7e5f27a0c' date '21 March 2015' time '3:59:12.460372 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.139' message 'custom window location (#workspace) for ws window' id '0108c172-5b51-428d-bf9a-8b87d5c226e5' date '19 March 2015' time '10:22:23.140694 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.138' message 'add custom project list window location' id 'e903c79f-5557-452e-bf96-d7783b973a7d' date '19 March 2015' time '10:10:54.378333 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.137' message 'add jigsaw windowlayout' id '52a2f359-46cb-4d89-987b-c608632a8101' date '19 March 2015' time '8:40:47.764198 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.136' message 'fiddle stretch layout again...' id '68683160-efba-4b97-bdc9-d70f763352e7' date '17 March 2015' time '9:51:07.654353 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.135' message 'more fine tuning of stretch layout' id '28926969-6875-4a3c-878d-0275196f8f5f' date '16 March 2015' time '9:40:29.985777 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.134' message 'checkpoint ... fine tuning stretch medium' id '7ce8f889-92ab-460f-929e-7fbde1e879cd' date '16 March 2015' time '9:28:32.404475 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.133' message 'add class TDAlternateStretchWindowProperties for a layout that seems to be suited for medium-size displays' id '2cad294d-8744-4223-9e8e-c4158468af27' date '16 March 2015' time '9:04:13.2313 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.132' message 'Add #logStack as error handling option ... triggered when running in a headless client .... ' id '40702ce3-93c1-47f5-b33e-d47dc9a8191e' date '16 March 2015' time '4:49:18.325225 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.131' message 'replace sessionHomeDescription with todeSysLocalSessionDescriptionPath' id 'e93d321a-3429-4c88-b4cb-582539692068' date '13 March 2015' time '12:21:55.606712 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.130' message 'shellWindow can be nil in exit builtIn' id '5e37e0f2-bd0d-48d5-974c-19ebdebb08ed' date '11 March 2015' time '5:18:57.546712 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.129' message 'bugfix for the handling the new client/scripts directories' id 'a3e92a45-c44e-4641-a08d-b2aa0a896e9f' date '11 March 2015' time '3:57:42.055002 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.128' message 'Changes corresponding to recent restructuring of gsDevKitHome disk layout:
1. /sys/stones/stones move to /sys/stones
2. proper lookup of sys/defult/client/scripts|windowLayout,
sys/default/server/scripts, sys/local/client/scripts|windowLayout,
and sys/local/server/scripts
3. change updateClient touse pharo/installTode by default and --scriptPath
to override
4. change installServer and updateServer builtins to do the proper lookup
in */server/scripts for the files by default and --scriptPath to specify
alternate location
5. script builtin uses proper lookup in sys/local/client/scripts then sys/default/client/scripts
6. add edit window layout menu item
' id '193fb534-96ed-445e-88c9-5137f0913568' date '11 March 2015' time '3:07:48.897394 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.127' message 'add logging to help debug flow stone creation: https://github.com/GsDevKit/gsDevKitHome/issues/58' id '5e245986-7257-4876-83b0-8d97ec9b7c1b' date '21 February 2015' time '11:30:21.112006 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.126' message 'potential for creating a spurious gemstone session on TDShell>>logout, if one hadn''t already been created ...' id '29fc9434-19f6-4ca1-bf63-cd196db8603a' date '21 February 2015' time '11:09:31.198509 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.125' message 'patch session leak in GsDevKit command line ... sessions used to evaluate a tode expression are never logged out...' id 'b9bd5d5c-cf2a-46af-9640-ae2065ab241a' date '21 February 2015' time '10:37:07.897958 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.124' message 'Issue #143: client-side support defining different tODE root directories for the /sys directory structure' id '77a96371-ccd5-4b34-8db6-2f5b6c83248a' date '4 February 2015' time '1:07:57.913667 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.123' message '--list option for script builtin is documented to not require an argument' id 'd24f7c2a-5b19-4e69-9c99-294acaeb5e45' date '3 February 2015' time '11:03:46.0606 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.122' message 'Issue #5: matches listed within console output and new prompt setup with original command ... need to hook in path matching plus longest common match string ' id '0bb29646-c1c5-4c64-8f31-f6f7309365f6' date '17 December 2014' time '9:04:20.361495 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.121' message 'Issue #129: add TDCommandLine class>>fromStream:selectLine:forEachCommand: ... needed for TDShell processing since come command lines are "cached" instread of directly executed ... added test ... hooke new capability into TDShell ... need to tweak interactive behavior' id 'f43dd267-e509-48f7-9b04-aeb5296d8ff8' date '17 December 2014' time '4:58:28.154197 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.120' message 'Issue #123: update sys/stone/stones/stones path correctly' id 'b8c696c6-961c-4297-abe3-c010c5317a9a' date '14 November 2014' time '2:45:38.889529 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.119' message 'Issue #123: a bit o restructuring' id '7cbcd24a-8dc0-4e91-9a8b-dca254775432' date '14 November 2014' time '12:10:49.148636 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.118' message 'Issue #123: add client-side support for new default/local/stone structure' id '07c66048-f8b1-475d-a504-ec4057ef90cb' date '14 November 2014' time '11:58:34.293726 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.117' message 'Issue #107: arrange to resize all existing windows when window layout is changed' id '62a19448-9daa-440a-be72-45462dd0a1f2' date '26 August 2014' time '6:25:06.483287 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.116' message 'use maximum space (and overlap) for all windows' id '4f197992-0667-4668-8274-ed5bbc7b3898' date '6 August 2014' time '8:46:54.95945 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.115' message 'browser and debugger layed out satisfactorily' id '39b06453-a688-4aa3-b7ec-369299da6b1e' date '6 August 2014' time '8:12:52.304612 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.113' message 'merged by GitFileTree-MergeDriver' id '2520f852-6709-46a2-94e7-ad61ca71decd' date '6 August 2014' time '6:04:02.659559 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.112' message 'Create TDSmallWindowProperties for presentations on non-HDI projectors' id '78795b35-e3c8-4b1a-b59a-1a46ceb39ff1' date '6 August 2014' time '5:56:24.38195 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.111' message 'ignore README.md in the client/descriptions directory; signal error when running headless and error occurs on server while running tODE command' id '2c20c20d-7e3e-4a70-9b49-2311ff6b5413' date '28 July 2014' time '7:57:51.009868 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.110' message 'make it possible to evaluate Smalltalk expressions on server ... side effects are more important that return value' id 'e0403b58-b3a0-43ef-8011-1598985ed6f5' date '26 July 2014' time '11:20:13.352127 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.109' message 'add batchMode to TDShell ... tode client will NOT swap out the Transcript client forwarder in batch mode ... ultimately provide a means for choosing whether Transcript output should show up in client or not' id 'd42aed90-335a-493a-baf0-6659ba55caf5' date '25 July 2014' time '4:54:39.004675 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.108' message 'clean up the client-side interaction when client is run in headless mode' id 'd31917fe-11e6-43b6-8fe2-b87686ba6752' date '25 July 2014' time '4:21:02.114664 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.107' message 'allow for turning on debugMode when running non-console evaluations' id '15449619-b69a-40a5-b20a-53ed2deab3db' date '25 July 2014' time '7:53:24.149103 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.106' message 'implement --lock option for updateClient builtin' id '7fbdb162-a3ae-4daf-b5e4-d81aeeea4248' date '22 July 2014' time '1:45:50.640014 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.105' message 'more parallel GsDevKit and Web Edition Root work... until web edition is retired ...' id '031b3ab7-8ff5-4727-a783-4717ae1a2ef5' date '21 July 2014' time '10:52:25.025737 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.104' message 'add "Define Dev Kit root'' tode menu item in parallel with the Web Edition Root ... until web edition is retired ...' id '6e084f23-67ea-4dfa-82b4-f3770cd1f335' date '20 July 2014' time '10:30:52.612798 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.103' message 'prepare for changes in gsDevKit structure' id '44c8aae4-e01e-4073-a455-cd6a4bc253cd' date '20 July 2014' time '10:19:04.566069 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.102' message 'add support fro evaluating a comand without opening a console window' id 'c09d3285-ef39-4995-9d17-6730f8133a50' date '19 July 2014' time '7:31:47.560831 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.101' message 'Issue #86: implemented `tODE Edit >> session description name` menu item ...' id '844c8347-b113-40b7-897d-c23b7fd9bcf8' date '7 July 2014' time '9:24:26.109 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.100' message 'fix Issue #93: log to transcript any import errors when importing session descriptions and carry on ...' id 'ae103139-73f1-4c9a-8a0b-d94e999bbd83' date '7 July 2014' time '8:35:19.214 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.99' message 'wrap messages at 80 characters' id '939a88a6-3684-4813-9998-d83625a6f7a1' date '7 July 2014' time '4:59:35.74 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.98' message 'fixes for installTode/updateTode scripts' id 'dcb3e66d-d87b-4481-8df3-5d85bc30e3e4' date '19 June 2014' time '12:37:03.105 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.97' message 'implement installServer client builtIn command. installServer installs GLASS1 and Metacello, etc. while updateServer simply loads a new version of tODE ...' id '21f5d807-3d67-453e-8f71-c584497c53e6' date '19 June 2014' time '12:15:05.549 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.96' message 'porting TDShell class>>cleanForDeploy to Pharo2.0' id '1cb06c0d-73b1-4f36-a6a1-0a571752df93' date '15 June 2014' time '9:54:53.929 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.95' message 'port TDShell class>>cleanForDeploy to Pharo2.0' id 'd38f4087-9ab6-4260-980e-993657807a96' date '15 June 2014' time '9:38:30.916 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.94' message 'missing method resetCacheDirectoryIfInvalid ...' id '80730243-c2c3-455f-824c-52e6bc4f94bd' date '3 June 2014' time '8:14:58.947 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.93' message 'Issue #56: clean up session and close windows on startup
- Pharo2.0 wasn''t hanging, but the pharo image wash
crashing... which is close enough for me:)
- need to test in Pharo1.4 and Pharo3.0 ...' id '60b34327-01f8-4214-bbdf-e8771eff87ba' date '3 June 2014' time '8:09:12.519 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.92' message 'bump version for grins' id '94f2d774-c32e-48f5-ab6b-9647c53b28c5' date '2 June 2014' time '8:01:32.647 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.87' message 'strip out the code associated with the (now) ancient session map stuff and the (recently) ancient window layout code ... the topezclient class now holds onto the window property so that we can provide that to the user for making changes or use it to automatically re-scale the layout if the screen is re-sized' id 'da043771-697a-475a-8233-4583fbde36b1' date '2 June 2014' time '7:52:53.419 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.86' message 'tweak, tweak, tweak goes the alternate layout' id 'b11f3a9f-9494-4fff-8b55-60da16c4ef7c' date '1 June 2014' time '3:47:15.42 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.85' message 'more alternate layout tweaks' id '72f482a5-ea42-4697-ace8-3d9677fcb336' date '1 June 2014' time '3:03:32.735 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.84' message 'revise the alternate layout definition' id '2dd553a6-9b7a-4fec-a499-4300aac213ac' date '1 June 2014' time '2:33:41.325 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.83' message 'adjust for move of image dir to client dir ...' id '1e72dd1d-860c-455f-8333-7178eefe6a67' date '1 June 2014' time '9:59:10.37 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.82' message 'rename TDShell TodeHome to WebEditionRoot - reset menu - define webEditionRoot (same directory path)
- open workspaces with syntax highlighting' id '34b6e0c4-303a-4d74-89ea-28bc7ab88264' date '1 June 2014' time '9:31:49.824 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.81' message 'add TDAlternateWindowProperties which is intended for larger fonts and/or smaller displays ... provides for wider list windows without sacrificing code window width ...' id 'e93e952c-dff1-4abe-bd08-07d388835406' date '31 May 2014' time '7:20:21.282 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.80' message 'Issue #81: define window loyout independent of font and scale to fit display
- define an abstract class TDAbstractWindowProperties
for import/export of properties
- TDStandardWindowProperties defines my standard
layout with options for extra lists (on wide
displays or small fonts) and control proportions
of shell window and code window
- defined small/medium/large (0, 1, 2 extra lists)
that match up pretty well with the layouts I''ve
played with so far.' id '40ee2a62-ace4-4b04-a626-21b4b5a8e9a2' date '31 May 2014' time '6:12:33.47 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.79' message 'converting to use TDSessionDescription instead of OGCustomSessionDescription.
- TDSessionDescription is passed to server so that
the fields (backupDirectory, serverGitRoot
serverTodeHome) can be specified in the session
description and used on the server
- for now server will request the session description
to make upgrading easier (if client updated before
server, server won''t know what to do with the
session description)' id '6a9cd48f-e7f5-476c-82fe-59cb0163658c' date '28 May 2014' time '7:24:10.258 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.78' message 're-enable autoCommit after logout ...' id 'fc670c77-49e2-402f-aaeb-d2c2f553a686' date '27 May 2014' time '11:33:12.96 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.77' message 'flushing cache before load appears to be bad idea?' id '07f02cc1-2bb0-474f-a83e-2de8b71c6ba2' date '26 May 2014' time '5:15:58.456 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.76' message 'reset tode menu when tode home changes' id '1b555df3-2e0d-498d-9da0-c0f6c317f415' date '26 May 2014' time '5:11:06.014 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.75' message 'flushCache before update client load to make sure that the baseline is freshly grabbed' id '3c560531-61fe-4bf4-867d-608f3a0056f4' date '26 May 2014' time '3:09:43.125 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.74' message 'reset tode menu after updating the client ...' id '9982fd73-a1fc-418e-b899-5f0f6739a852' date '25 May 2014' time '10:02:43.129 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.73' message 'start heading in the direction of using raw bounds and general layouts within which different fonts can be used ... as display size and fonts change, different layouts may be more pleasant' id '0f09804a-e17b-4ae0-8b92-be03c88b41d0' date '20 May 2014' time '8:15:05.27272 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.73' message 'start heading in the direction of using raw bounds and general layouts within which different fonts can be used ... as display size and fonts change, different layouts may be more pleasant' id '10a09d68-6b5e-4098-acb8-0dc3b916bcb8' date '20 May 2014' time '8:15:04.780624 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.72' message 'alternate bounds for smaller displays' id '671a8dd3-4f75-401b-8cf5-e1d2acac4eeb' date '19 May 2014' time '9:14:25.107288 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.71' message 'created named window locations app3 and app4 for more options positioning "multi-pane functions"' id 'b6bb5261-a3d4-432b-af97-34fa3777dbec' date '13 May 2014' time '11:02:40.336 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.70' message '- start work on fit-to-display algorithm for window layout' id 'edfcbba7-c840-41f1-a68c-0e182e41bb75' date '5 May 2014' time '8:33:53.447 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.69' message 'another set of structural changes to match current definition in webEditionHome and todeHome ... ' id '3ddf1102-76c9-46e8-9791-da5324726228' date '5 May 2014' time '3:36:37.49 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.68' message 'tweak update client menu label' id 'b3d64407-26f5-43d9-955b-bae8bdd68dbf' date '5 May 2014' time '10:08:15.788 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.67' message '- tweak menu labels
- add refresh menu item' id '2b0b84a6-78da-4699-9970-c8e2d894cfab' date '1 May 2014' time '2:20:06.977 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.66' message 'change the home directory methods to match new structure' id 'b5a86518-e881-4a92-b450-06613fa94fdc' date '30 April 2014' time '4:19:02.347 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.65' message 'easy resetWorldMenu access' id 'd1b163d6-8765-4338-b907-3e1d15a1759c' date '30 April 2014' time '3:56:32.86 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.64' message 'sort the menu items derived from file system' id '66aeb53d-c755-4da5-8139-3aa55761e215' date '23 April 2014' time '10:08:46.328 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.63' message 'fix problem with setting default todeHome...' id 'af1e706b-1644-4456-b026-2306f5a69038' date '14 April 2014' time '11:34:13.738 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.62' message 'add Help to tode main menu' id 'dd7f52aa-7eb5-444b-a97f-f8e02293b1d9' date '13 April 2014' time '8:54:59.648 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.61' message 'when finished with backup, we need to logout to ensure that the topez state matches the restored repo"' id '22174781-1fd3-43dd-87fa-8278a145aaf8' date '13 April 2014' time '8:45:58.381 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.60' message 'properly handle the execution of commands in a shell window that will be used ineractively' id '2d59177e-1ad6-4d70-ba8e-39d844abebf5' date '13 April 2014' time '8:38:02.856 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.59' message 'workspace menus added ... ' id '042a4bbd-4904-4364-81a5-a4d8198f7b93' date '12 April 2014' time '3:54:04.845 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.58' message 'add tODE to the system menu...eliminate the requirement to maintain workspaces' id '0c76e729-e9ad-423d-8812-38f749c4177a' date '12 April 2014' time '3:17:32.069 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.57' message 'open help window in #method windowLocation...' id '0638d2e8-b714-4478-a657-dde0346f7975' date '31 March 2014' time '1:27:01.482 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.56' message 'add `debugMode` built-in for controlling debugMode' id '1da7cbb4-9266-4fa4-a1e4-833516f0b188' date '30 March 2014' time '8:38:11.042 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.55' message 'arrange for command errors to simply be printed as the command response ... no need to bring up the debugger ...' id 'b6894e9f-821b-4c25-a3c7-64f95a1920d6' date '30 March 2014' time '8:24:03.908 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.54' message 'differentiate between open and spawn for purposes of controlling welcome message ... rip out support for old debugger console ' id '0f85e113-516c-4e27-b515-3b32cbb31f87' date '24 March 2014' time '6:23:55.272 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.53' message 'add windowProperties to TDTopezClient for easy viewing...' id '5fcd3b21-0f00-4c03-aec5-3d5b6256017f' date '24 March 2014' time '8:54:59.982 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.52' message 'minor fixes to windows layout class' id 'b1719b29-0958-4940-9b6c-ec729ebeba3b' date '23 March 2014' time '3:59:10.162 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.51' message 'a bit of formatting' id 'b312bdfb-2d4f-4f03-8bf6-e6e6c91f5ef9' date '23 March 2014' time '3:18:42.882 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.50' message 'bugfix updateServer command' id '93d5da03-5d04-4cb1-8860-65e5c48240e9' date '23 March 2014' time '3:04:44.849 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.49' message 'checkpoint:
- arrange to use TDShell class>>todeHome to reduce
path length in `script` and `updateServer` commands
' id '3b5806de-78c2-4a2d-8684-9e61645ac7e3' date '23 March 2014' time '2:40:07.144 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.48' message 'checkpoint:
- fine tune session description handling
- todeHome will be image level global to simplify
doits ...
- define 4 workspace windows for setting up client
side environment ... part of getting started
experience
- fine tune window properties handling
- testLogin: and testWindowLayout: and `script` command
are start of the batching facilities...' id '986d6370-4d37-4103-a96f-36ad610018aa' date '23 March 2014' time '11:43:30.856 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.47' message 'porting to Pharo3.0' id '8c989350-44e1-4d00-849a-8d1934165850' date '23 March 2014' time '8:22:40.645 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.46' message 'fix script command' id '378df0f7-3b0f-48f6-b8a3-1ddd1a9893f6' date '22 March 2014' time '8:56:16.043 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.45' message 'tweak docs' id '1b2a4f6d-6ef4-424f-abc8-7818da868d28' date '22 March 2014' time '7:21:23.702 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.44' message 'tweak docs' id 'e47bd7a1-11c3-4b32-a198-b3c943142fd7' date '22 March 2014' time '7:14:29.716 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.43' message 'last workspace removed ... ' id '7a6936a2-b091-4330-bbaa-8612a9771060' date '22 March 2014' time '7:07:18.232 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.42' message 'checkpoint ... eliminating the need to any custom workspace in Pharo image ...just console workspace:
- add OBCustomSessionDescription class>>seaside with default session
- `help` writeup
- `whatsNew` command
- `sessionDescription` command (restored)
- `script` command
- `TDShell open` support' id '0d7a7f44-de5d-43ac-b241-17da633ee27b' date '22 March 2014' time '6:49:51.611 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.41' message 'checkpoint:
- support creating and using serialized session descriptions
- cleanup built-in support
- add `builtIns` command
- start work on improving the `getting started` experience
- start work on `help` and `updateClient` commands' id 'e9635ac3-cb96-4a7a-9380-b7fad1268526' date '22 March 2014' time '12:57:53.426 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.40' message 'fix builtin logout...' id '9b0c686d-f2d5-43d5-8c8a-2f0de08c6c8d' date '19 February 2014' time '10:29:31.225 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.39' message 'Issue #53: Make TDTopezClient>>setFindText:isRegex: clientforwarder friendly' id '06bca6f0-f85c-4fc5-abbb-c101a8bd89cf' date '31 January 2014' time '8:57:11.711 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.38' message 'console should activate on open...' id 'd3714b40-ea31-467c-8995-575454d37f84' date '11 January 2014' time '5:07:17.87 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.37' message 'clean up ... attempting to step over ''Transcript show''' id '037f4977-afe1-48c5-a465-72e3160fc0b1' date '11 January 2014' time '4:27:38.322 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.36' message 'fix close builtin' id 'd16a7754-b6c7-4194-9281-2ee59dfa10ef' date '11 January 2014' time '11:27:39.246 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.35' message 'implement refreshViewFor: client callback' id '411bcc10-7a57-407c-bb0d-c9bad6743a38' date '11 January 2014' time '9:08:05.664 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.34' message 'TDTopezClient>>editClientElement:, TodeListEditory>>editStonElement: allows for multiple clientElements to be shipped in one STON packet. TodeListEditor>>setList: allows list to be updated directly ... more efficient that #refreshList' id 'ba35581f-d077-4d09-b2ba-d22a1a45e317' date '8 January 2014' time '10:06:15.424 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.33' message 'implement restoreBackup builtin ... allows for restoreFromBackup without needing to install tODE first' id '0df145c7-df57-4f0a-bb12-b23fc7eb05b3' date '5 January 2014' time '3:00:47.429 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.32' message 'include netldi in window label' id '5785c7c9-1d8a-41cd-868a-388e221bf6ac' date '16 December 2013' time '3:12:21.54 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.31' message 'add `installTode --topaz ...` functionality:
generates a topaz script suitable for batch jobs' id 'da4b260b-8eac-43b7-8797-07b0097bf686' date '14 December 2013' time '7:26:37.375 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.30' message 'add --backupDir option to sessionDescription command' id 'ff4e0798-bd04-4950-9702-a36ab1c7a597' date '10 December 2013' time '6:56:09.369 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.29' message 'put stonename into shell label' id '31c021ad-5e65-4ce0-af91-6ac5aa084a1c' date '9 December 2013' time '6:49:58.52 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.28' message 'implement support for installTode --clientScriptPath option....--serverPath is still a bit up in the air' id '4b869155-5f0a-4777-9b07-50422f9e85ec' date '8 December 2013' time '7:03:50.097 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.27' message 'finish up the implementation of the sessionDescription command' id '908f9ec0-db93-44ce-a639-00a7c99a6180' date '8 December 2013' time '3:04:05.704 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.26' message 'add testLogin command' id 'a1fc248f-afe5-4f18-8576-a891858c78cf' date '8 December 2013' time '10:42:11.435 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.25' message 'implement sessionDescription builtin which replaces login builtin' id 'f0739814-5c45-4709-86d2-fd4afe7e5a2b' date '8 December 2013' time '9:12:16.495 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.24' message 'include netldiName in console window label when set by login command' id 'e534e80e-bee2-4fd5-922d-e91348ee68f2' date '14 November 2013' time '4:24:07.525 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.23' message 'add builtin login command to allow user to dynamically switch netldi name to be used (and potentially other login parameters as well)' id '9a2acc06-e7b4-4176-8730-60646fa23711' date '14 November 2013' time '12:24:41.76 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.22' message 'add tODE built-in commmand installTode that performs install/upgrade against remote GemStone repository' id '575ba90f-128a-4a60-9e65-584a274f7e4c' date '12 November 2013' time '10:38:48.191 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.21' message 'TDCommandLine object passed over wire instead of parsed tokens ... ball is in servers court' id '2d420814-26d5-4606-a6c8-fec06f7ee2ac' date '10 November 2013' time '8:05:38.132 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.20' message 'adding support for various interactions: choice, confirm, inform, text, multiline-text' id 'aa389741-7f31-4e00-bd32-01368db1282a' date '20 October 2013' time '5:57:12.135 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.19' message 'support for closing windows from server...' id 'e74fc02a-6cc4-4d57-8f9f-f34907fec593' date '19 October 2013' time '10:00:42.989 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.18' message 'add #app1 and #app2 window locations ....' id 'eeaa2df1-263a-47a0-b740-79b7aeca6806' date '13 October 2013' time '3:04:20.185 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.17' message 'add `classCategories` window location' id 'abf3816d-075c-4156-ba5e-fccc733a2922' date '12 October 2013' time '12:47:55.371 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.16' message 'align context with debugger stack window ... use debugger width too...' id 'fa778323-c67b-4633-b757-f40fd40903ca' date '27 September 2013' time '6:40:07.702 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.15' message 'use #initializeBounds for window sizing to avoid disrupting exsting Session Descriptions' id '2c235e89-c091-4e9c-a308-c71dea2edd3e' date '5 September 2013' time '9:59:44.091 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.14' message 'record backup and restore times and bu list shows them' id '9d57b018-a4d9-4026-8031-623a10e5ffaf' date '2 August 2013' time '12:16:32.116 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.13' message 'independent control of debuggerWidth...' id 'dae14267-c1c5-42d2-917e-91983ca8d43c' date '12 July 2013' time '10:12:32.697 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.12' message 'add spawnWindowFromServer ... used for initiating spawn from server command (like sh)' id '1f2a4b42-4f37-40c4-8a93-01cf98225119' date '5 June 2013' time '5:26:23.717 am' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.11' message 'tweak default shellWindowHeight' id '4dee8fdb-f170-4c1b-82be-fa1668d039f0' date '4 June 2013' time '9:46:42.016 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.10' message 'add independent shellWindow height for additional control of layout' id 'ddcc9b40-0cd7-4187-9d7e-6f8f8b56e768' date '4 June 2013' time '9:45:26.176 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.9' message 'refactor gci calls for clientElements so that the call is moved into the gemstone client leaving pharo client free to perform clientElement code directly' id '536cc93d-c917-4cf3-a981-fb8906884789' date '28 May 2013' time '2:59:12.337 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.8' message 'working on getting SHOUT to work for Pharo and GemStone' id 'f7214e9a-fd11-491e-a6cd-844374eb5ea5' date '28 May 2013' time '1:39:11.766 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.7' message 'continued repackaging' id '86876911-4b94-449e-a883-2fc912c87d5d' date '26 May 2013' time '9:33:35.303 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.6' message 'pharo and gemstone specific client classes' id 'e668ad57-0b0d-4c02-9510-96f3c62ea9c4' date '26 May 2013' time '2:15:07.635 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.5' message 'tweak' id '8bc0be24-41fe-4a49-b4b8-642c07d1c966' date '26 May 2013' time '2:04:28.233 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.4' message 'continue repackage effort' id '2c659eb3-b7eb-4051-8425-3fc4f710e98e' date '26 May 2013' time '2:02:42.722 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.3' message 'move some gemstone-specific methods' id 'b52d0d68-b289-43e0-a173-aafb5eaefd65' date '26 May 2013' time '12:23:27.199 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.2' message 'TodeSession is for GemStone only...' id 'da7df5b7-9b8a-471f-8245-e95dd90f87ec' date '26 May 2013' time '12:20:22.736 pm' author 'dkh' ancestors ((name 'Tode-Client-Common-dkh.1' message 'pull in the common client code ... ' id '89c125a8-fb74-4d57-a27c-ccf4114fd766' date '26 May 2013' time '12:06:49.859 pm' author 'dkh' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(name 'Tode-Client-Common-dkh.112' message 'debugMode built-in --set and --clear commands refer to console-based debugMode. To change the default debugMode, use the --default option. See ''debugMode --help''' id '56ee9225-d4b7-4b13-a2c6-4575925d0216' date '6 August 2014' time '9:44:00.324692 am' author 'dkh' ancestors ((id '2c20c20d-7e3e-4a70-9b49-2311ff6b5413')) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())
\ No newline at end of file
diff --git a/repository/Tode-Client-Roassal2.package/.filetree b/repository/Tode-Client-Roassal2.package/.filetree
new file mode 100644
index 000000000..8998102c2
--- /dev/null
+++ b/repository/Tode-Client-Roassal2.package/.filetree
@@ -0,0 +1,4 @@
+{
+ "noMethodMetaData" : true,
+ "separateMethodMetaAndSource" : false,
+ "useCypressPropertiesFile" : true }
diff --git a/repository/Tode-Client-Roassal2.package/TDShell.extension/class/todeRoassalMenuOn..st b/repository/Tode-Client-Roassal2.package/TDShell.extension/class/todeRoassalMenuOn..st
new file mode 100644
index 000000000..fe37a18b0
--- /dev/null
+++ b/repository/Tode-Client-Roassal2.package/TDShell.extension/class/todeRoassalMenuOn..st
@@ -0,0 +1,35 @@
+*tode-client-roassal2
+todeRoassalMenuOn: aBuilder
+
+ | sessionDescriptionDir |
+ sessionDescriptionDir := self todeSysLocalSessionDescriptionPath asFileReference.
+ sessionDescriptionDir exists
+ ifTrue: [
+ (aBuilder item: #Roassal)
+ parent: #'Open Tool';
+ order: 1.06;
+ target: self;
+ icon: RTIcon smallRoassal;
+ enabled: currentShell isNil.
+ (sessionDescriptionDir files sorted: [ :a :b | a basename <= b basename ])
+ do: [ :file |
+ [
+ file basename = 'README.md'
+ ifFalse: [
+ | sessionDescription |
+ sessionDescription := TDSessionDescription importFrom: file fullName.
+ (aBuilder item: sessionDescription name asSymbol)
+ parent: #Roassal;
+ action: [
+ | bounds window |
+ bounds := TDTopezGemStoneClient windowProperties caculateWindowBounds at: #evaluator.
+ (window := TDServerBlockWorkspace openOnSessionDescription: sessionDescription label: 'Roassal Workspace')
+ extent: bounds extent;
+ position: bounds origin.
+ currentShell := window model tdShell ] ] ]
+ on: Error
+ do: [ :ex |
+ Transcript
+ cr;
+ show: 'Error importing session description from: ' , file fullName printString , ': ' , ex description.
+ ^ self ] ] ]
\ No newline at end of file
diff --git a/repository/Tode-Client-Roassal2.package/TDShell.extension/methodProperties.json b/repository/Tode-Client-Roassal2.package/TDShell.extension/methodProperties.json
new file mode 100644
index 000000000..108c262b1
--- /dev/null
+++ b/repository/Tode-Client-Roassal2.package/TDShell.extension/methodProperties.json
@@ -0,0 +1,5 @@
+{
+ "class" : {
+ "todeRoassalMenuOn:" : "dkh 4/12/2015 11:35" },
+ "instance" : {
+ } }
diff --git a/repository/Tode-Client-Roassal2.package/TDShell.extension/properties.json b/repository/Tode-Client-Roassal2.package/TDShell.extension/properties.json
new file mode 100644
index 000000000..bb0e8d487
--- /dev/null
+++ b/repository/Tode-Client-Roassal2.package/TDShell.extension/properties.json
@@ -0,0 +1,2 @@
+{
+ "name" : "TDShell" }
diff --git a/repository/Tode-Client-Roassal2.package/monticello.meta/categories.st b/repository/Tode-Client-Roassal2.package/monticello.meta/categories.st
new file mode 100644
index 000000000..abc83085c
--- /dev/null
+++ b/repository/Tode-Client-Roassal2.package/monticello.meta/categories.st
@@ -0,0 +1 @@
+SystemOrganization addCategory: #'Tode-Client-Roassal2'!
diff --git a/repository/Tode-Client-Roassal2.package/monticello.meta/initializers.st b/repository/Tode-Client-Roassal2.package/monticello.meta/initializers.st
new file mode 100644
index 000000000..e69de29bb
diff --git a/repository/Tode-Client-Roassal2.package/monticello.meta/package b/repository/Tode-Client-Roassal2.package/monticello.meta/package
new file mode 100644
index 000000000..62d124107
--- /dev/null
+++ b/repository/Tode-Client-Roassal2.package/monticello.meta/package
@@ -0,0 +1 @@
+(name 'Tode-Client-Roassal2')
\ No newline at end of file
diff --git a/repository/Tode-Client-Roassal2.package/monticello.meta/version b/repository/Tode-Client-Roassal2.package/monticello.meta/version
new file mode 100644
index 000000000..ee07ed71a
--- /dev/null
+++ b/repository/Tode-Client-Roassal2.package/monticello.meta/version
@@ -0,0 +1 @@
+(name 'Tode-Client-Roassal2-dkh.10' message 'fiddle with the tODE system menu' id '6904dc96-5297-4683-b997-3277f6da0535' date '12 April 2015' time '11:36:33.482351 am' author 'dkh' ancestors ((name 'Tode-Client-Roassal2-dkh.9' message 'add TDServerBlockWorkspace ... needed to keep the session alive while doing work ... ''shell'' workspace variable holds onto the shell for the desired session ... close window, closes session ... Roassal menu opens a TDServerBlockWorkspace' id '090491bc-d444-45c1-a158-3b9935ad29e7' date '12 April 2015' time '8:32:17.397134 am' author 'dkh' ancestors ((name 'Tode-Client-Roassal2-dkh.8' message 'Tode-Client-Roassal2 package is still needed ... workspac e needed to hold onto the shell instance ... login/logout sematics and window management ...' id '2adf2914-14cf-43bc-b01f-a77d4f5fc02c' date '12 April 2015' time '7:41:04.436788 am' author 'dkh' ancestors ((name 'Tode-Client-Roassal2-dkh.7' message 'client-side support for evaluating smalltalk code on server and passing result back as STON ... hook up to roassal workspace' id 'a01c3a04-6dfe-4dad-8f53-979cff055748' date '11 April 2015' time '7:17:23.492709 am' author 'dkh' ancestors ((name 'Tode-Client-Roassal2-dkh.6' message 'capture ^d for gs doit ... disable Roassal menu item if currentSession is already active' id '7123154e-e0fc-4022-a6d1-2bdeac307264' date '10 April 2015' time '8:10:53.929977 pm' author 'dkh' ancestors ((name 'Tode-Client-Roassal2-dkh.5' message 'executing Pierre''s reference path script without needing explicit wrapper code ... wrapping with block is still browblematic because of scoping bug .... pure script execution with special purpose handling is called for ... a special script/workspace client element may be the ticket' id '7f824a72-d2ef-47e0-baf6-7d03b5b224d0' date '10 April 2015' time '4:40:58.477595 pm' author 'dkh' ancestors ((name 'Tode-Client-Roassal2-dkh.4' message 'focus a minimal roassal functionality and rework system menu' id '6dcabf19-3b2d-4587-8a46-39d44f107bb7' date '10 April 2015' time '3:07:46.514932 pm' author 'dkh' ancestors ((name 'Tode-Client-Roassal2-dkh.3' message 'roassal workspace is a peer of console ... ' id '84e6177f-d235-4554-a174-bdc3bfebf14e' date '10 April 2015' time '2:23:18.548455 pm' author 'dkh' ancestors ((name 'Tode-Client-Roassal2-dkh.2' message 'checkpoint for roassal gs workspace ... login and execute a command from selected text ' id '7c38d70c-13d7-415d-8afe-376a02fff19b' date '9 April 2015' time '8:13:52.884294 pm' author 'dkh' ancestors ((name 'Tode-Client-Roassal2-dkh.1' message 'new package Tode-Client-Roassal2 for obvious reasons' id 'aed0bdf8-8510-44cd-a5db-927f0c0c58b0' date '9 April 2015' time '6:26:55.453113 pm' author 'dkh' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())
\ No newline at end of file
diff --git a/repository/Tode-Client-Roassal2.package/properties.json b/repository/Tode-Client-Roassal2.package/properties.json
new file mode 100644
index 000000000..f037444a7
--- /dev/null
+++ b/repository/Tode-Client-Roassal2.package/properties.json
@@ -0,0 +1,2 @@
+{
+ }
diff --git a/repository/Tode-Client-ServerBlocks.package/.filetree b/repository/Tode-Client-ServerBlocks.package/.filetree
new file mode 100644
index 000000000..8998102c2
--- /dev/null
+++ b/repository/Tode-Client-ServerBlocks.package/.filetree
@@ -0,0 +1,4 @@
+{
+ "noMethodMetaData" : true,
+ "separateMethodMetaAndSource" : false,
+ "useCypressPropertiesFile" : true }
diff --git a/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/README.md b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/README.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/class/openOnSessionDescription..st b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/class/openOnSessionDescription..st
new file mode 100644
index 000000000..52c5a641e
--- /dev/null
+++ b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/class/openOnSessionDescription..st
@@ -0,0 +1,3 @@
+instance creation
+openOnSessionDescription: sessionDescription
+ ^ self openOnSessionDescription: sessionDescription label: 'tODE Server Block Workspace'
\ No newline at end of file
diff --git a/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/class/openOnSessionDescription.label..st b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/class/openOnSessionDescription.label..st
new file mode 100644
index 000000000..b379974f6
--- /dev/null
+++ b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/class/openOnSessionDescription.label..st
@@ -0,0 +1,7 @@
+instance creation
+openOnSessionDescription: sessionDescription label: aLabel
+ ^ self new
+ sessionDescription: sessionDescription;
+ openLabel: aLabel , ': ', sessionDescription name , ' (' , sessionDescription stoneName , ':' , sessionDescription netLDI
+ , ')'
+
\ No newline at end of file
diff --git a/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/cliShell.st b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/cliShell.st
new file mode 100644
index 000000000..f4911d634
--- /dev/null
+++ b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/cliShell.st
@@ -0,0 +1,5 @@
+accessing
+cliShell
+ "funky compat"
+
+ ^ self tdShell
\ No newline at end of file
diff --git a/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/openLabel..st b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/openLabel..st
new file mode 100644
index 000000000..a83e00f0b
--- /dev/null
+++ b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/openLabel..st
@@ -0,0 +1,14 @@
+initialization
+openLabel: labelString
+ | window pane windowId windowStatus |
+ window := (TZSystemWindow labelled: labelString) model: self.
+ pane := self buildTextMorph.
+ window addMorph: pane frame: (0 @ 0 corner: 1 @ 1).
+ window openInWorld.
+ windowStatus := self tdShell windowStatus.
+ windowId := windowStatus windowIdNamed: #workspace , self tdShell shellId asString.
+ windowStatus
+ windowAt: windowId put: window;
+ registerShellWindow: window.
+ self tdShell shellWindow: window.
+ ^ window
\ No newline at end of file
diff --git a/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/sessionDescription..st b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/sessionDescription..st
new file mode 100644
index 000000000..0e40b9739
--- /dev/null
+++ b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/sessionDescription..st
@@ -0,0 +1,3 @@
+accessing
+sessionDescription: aSessionDescription
+ sessionDescription := aSessionDescription
\ No newline at end of file
diff --git a/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/sessionDescription.st b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/sessionDescription.st
new file mode 100644
index 000000000..b9848a2da
--- /dev/null
+++ b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/sessionDescription.st
@@ -0,0 +1,3 @@
+accessing
+sessionDescription
+ ^ sessionDescription
\ No newline at end of file
diff --git a/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/stylingActive.st b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/stylingActive.st
new file mode 100644
index 000000000..210838ee9
--- /dev/null
+++ b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/stylingActive.st
@@ -0,0 +1,4 @@
+styling
+stylingActive
+
+ ^stylingActive ifNil:[stylingActive := false]
\ No newline at end of file
diff --git a/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/tdShell.st b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/tdShell.st
new file mode 100644
index 000000000..c86ffe58f
--- /dev/null
+++ b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/tdShell.st
@@ -0,0 +1,10 @@
+accessing
+tdShell
+ tdShell
+ ifNil: [
+ tdShell := TDShell new
+ sessionDescription: sessionDescription;
+ yourself.
+ bindings ifNil: [ self initializeBindings ].
+ bindings at: 'shell' put: tdShell ].
+ ^ tdShell
\ No newline at end of file
diff --git a/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/windowActive..st b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/windowActive..st
new file mode 100644
index 000000000..b56ba655d
--- /dev/null
+++ b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/windowActive..st
@@ -0,0 +1,3 @@
+updating
+windowActive: aSystemWindow
+ "noop"
diff --git a/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/windowIsClosing.st b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/windowIsClosing.st
new file mode 100644
index 000000000..631f384b0
--- /dev/null
+++ b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/instance/windowIsClosing.st
@@ -0,0 +1,3 @@
+updating
+windowIsClosing
+ tdShell ifNotNil: [ tdShell windowIsClosing ]
\ No newline at end of file
diff --git a/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/methodProperties.json b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/methodProperties.json
new file mode 100644
index 000000000..de2b1fb31
--- /dev/null
+++ b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/methodProperties.json
@@ -0,0 +1,13 @@
+{
+ "class" : {
+ "openOnSessionDescription:" : "dkh 4/12/2015 08:12",
+ "openOnSessionDescription:label:" : "dkh 4/12/2015 08:12" },
+ "instance" : {
+ "cliShell" : "dkh 4/12/2015 08:02",
+ "openLabel:" : "dkh 4/12/2015 08:02",
+ "sessionDescription" : "dkh 4/12/2015 08:02",
+ "sessionDescription:" : "dkh 4/12/2015 08:02",
+ "stylingActive" : "dkh 4/12/2015 08:03",
+ "tdShell" : "dkh 4/12/2015 08:07",
+ "windowActive:" : "dkh 4/12/2015 08:03",
+ "windowIsClosing" : "dkh 4/12/2015 08:03" } }
diff --git a/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/properties.json b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/properties.json
new file mode 100644
index 000000000..1687c1b6e
--- /dev/null
+++ b/repository/Tode-Client-ServerBlocks.package/TDServerBlockWorkspace.class/properties.json
@@ -0,0 +1,15 @@
+{
+ "category" : "Tode-Client-ServerBlocks",
+ "classinstvars" : [
+ ],
+ "classvars" : [
+ ],
+ "commentStamp" : "",
+ "instvars" : [
+ "sessionDescription",
+ "tdShell" ],
+ "name" : "TDServerBlockWorkspace",
+ "pools" : [
+ ],
+ "super" : "Workspace",
+ "type" : "normal" }
diff --git a/repository/Tode-Client-ServerBlocks.package/monticello.meta/categories.st b/repository/Tode-Client-ServerBlocks.package/monticello.meta/categories.st
new file mode 100644
index 000000000..e027c155a
--- /dev/null
+++ b/repository/Tode-Client-ServerBlocks.package/monticello.meta/categories.st
@@ -0,0 +1 @@
+SystemOrganization addCategory: #'Tode-Client-ServerBlocks'!
diff --git a/repository/Tode-Client-ServerBlocks.package/monticello.meta/initializers.st b/repository/Tode-Client-ServerBlocks.package/monticello.meta/initializers.st
new file mode 100644
index 000000000..e69de29bb
diff --git a/repository/Tode-Client-ServerBlocks.package/monticello.meta/package b/repository/Tode-Client-ServerBlocks.package/monticello.meta/package
new file mode 100644
index 000000000..4362aae87
--- /dev/null
+++ b/repository/Tode-Client-ServerBlocks.package/monticello.meta/package
@@ -0,0 +1 @@
+(name 'Tode-Client-ServerBlocks')
\ No newline at end of file
diff --git a/repository/Tode-Client-ServerBlocks.package/monticello.meta/version b/repository/Tode-Client-ServerBlocks.package/monticello.meta/version
new file mode 100644
index 000000000..d07759349
--- /dev/null
+++ b/repository/Tode-Client-ServerBlocks.package/monticello.meta/version
@@ -0,0 +1 @@
+(name 'Tode-Client-ServerBlocks-dkh.1' message 'add TDServerBlockWorkspace ... needed to keep the session alive while doing work ... ''shell'' workspace variable holds onto the shell for the desired session ... close window, closes session ... Roassal menu opens a TDServerBlockWorkspace' id '6df04aa8-78a2-4e06-96b6-d2a8a8d02688' date '12 April 2015' time '8:32:32.32749 am' author 'dkh' ancestors () stepChildren ())
\ No newline at end of file
diff --git a/repository/Tode-Client-ServerBlocks.package/properties.json b/repository/Tode-Client-ServerBlocks.package/properties.json
new file mode 100644
index 000000000..f037444a7
--- /dev/null
+++ b/repository/Tode-Client-ServerBlocks.package/properties.json
@@ -0,0 +1,2 @@
+{
+ }
diff --git a/repository/Tode-GemStone-Core2x.package/.filetree b/repository/Tode-GemStone-Core2x.package/.filetree
new file mode 100644
index 000000000..8998102c2
--- /dev/null
+++ b/repository/Tode-GemStone-Core2x.package/.filetree
@@ -0,0 +1,4 @@
+{
+ "noMethodMetaData" : true,
+ "separateMethodMetaAndSource" : false,
+ "useCypressPropertiesFile" : true }
diff --git a/repository/Tode-GemStone-Core2x.package/TDGemStoneTool.extension/instance/performOnServer.logging..st b/repository/Tode-GemStone-Core2x.package/TDGemStoneTool.extension/instance/performOnServer.logging..st
new file mode 100644
index 000000000..0b0e7e20e
--- /dev/null
+++ b/repository/Tode-GemStone-Core2x.package/TDGemStoneTool.extension/instance/performOnServer.logging..st
@@ -0,0 +1,12 @@
+*tode-gemstone-core2x
+performOnServer: command logging: logging
+ | result |
+ result := System performOnServer: command.
+ logging
+ ifTrue: [
+ Transcript
+ cr;
+ show: command printString;
+ cr;
+ show: result ].
+ ^ result
diff --git a/repository/Tode-GemStone-Core2x.package/TDGemStoneTool.extension/instance/systemIsVoting.st b/repository/Tode-GemStone-Core2x.package/TDGemStoneTool.extension/instance/systemIsVoting.st
new file mode 100644
index 000000000..c8ac73552
--- /dev/null
+++ b/repository/Tode-GemStone-Core2x.package/TDGemStoneTool.extension/instance/systemIsVoting.st
@@ -0,0 +1,4 @@
+*tode-gemstone-core2x
+systemIsVoting
+
+^false
diff --git a/repository/Tode-GemStone-Core2x.package/TDGemStoneTool.extension/methodProperties.json b/repository/Tode-GemStone-Core2x.package/TDGemStoneTool.extension/methodProperties.json
new file mode 100644
index 000000000..16d5d7b59
--- /dev/null
+++ b/repository/Tode-GemStone-Core2x.package/TDGemStoneTool.extension/methodProperties.json
@@ -0,0 +1,5 @@
+{
+ "class" : {
+ },
+ "instance" : {
+ "buBackup:" : "dkh 11/20/2014 11:21" } }
diff --git a/repository/Tode-GemStone-Core2x.package/TDGemStoneTool.extension/properties.json b/repository/Tode-GemStone-Core2x.package/TDGemStoneTool.extension/properties.json
new file mode 100644
index 000000000..bb05de7b5
--- /dev/null
+++ b/repository/Tode-GemStone-Core2x.package/TDGemStoneTool.extension/properties.json
@@ -0,0 +1,2 @@
+{
+ "name" : "TDGemStoneTool" }
diff --git a/repository/Tode-GemStone-Core2x.package/monticello.meta/initializers.st b/repository/Tode-GemStone-Core2x.package/monticello.meta/initializers.st
new file mode 100644
index 000000000..e69de29bb
diff --git a/repository/Tode-GemStone-Core2x.package/monticello.meta/package b/repository/Tode-GemStone-Core2x.package/monticello.meta/package
new file mode 100644
index 000000000..b1f5dd997
--- /dev/null
+++ b/repository/Tode-GemStone-Core2x.package/monticello.meta/package
@@ -0,0 +1 @@
+(name 'Tode-GemStone-Core2x')
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Core2x.package/monticello.meta/version b/repository/Tode-GemStone-Core2x.package/monticello.meta/version
new file mode 100644
index 000000000..0aa1565ea
--- /dev/null
+++ b/repository/Tode-GemStone-Core2x.package/monticello.meta/version
@@ -0,0 +1 @@
+(name 'Tode-GemStone-Core2x-dkh.2' message 'add --safely option to bu backup command' id 'e1a6552a-e6b4-455b-b54b-0a421bc34b7c' date '03/22/2015' time '08:03:12' author 'dkh' ancestors ((name 'Tode-GemStone-Core2x-dkh.1' message 'fixing `bu` command for 2.4.x' id '19a0d8c1-b4a5-4fae-ae7c-623e51aac442' date '11/20/2014' time '11:22:27' author 'dkh' ancestors () stepChildren ())) stepChildren ())
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Core2x.package/properties.json b/repository/Tode-GemStone-Core2x.package/properties.json
new file mode 100644
index 000000000..f037444a7
--- /dev/null
+++ b/repository/Tode-GemStone-Core2x.package/properties.json
@@ -0,0 +1,2 @@
+{
+ }
diff --git a/repository/Tode-GemStone-Core3x.package/.filetree b/repository/Tode-GemStone-Core3x.package/.filetree
new file mode 100644
index 000000000..8998102c2
--- /dev/null
+++ b/repository/Tode-GemStone-Core3x.package/.filetree
@@ -0,0 +1,4 @@
+{
+ "noMethodMetaData" : true,
+ "separateMethodMetaAndSource" : false,
+ "useCypressPropertiesFile" : true }
diff --git a/repository/Tode-GemStone-Core3x.package/TDAbstractDevTool.extension/instance/performOnServer.status..st b/repository/Tode-GemStone-Core3x.package/TDAbstractDevTool.extension/instance/performOnServer.status..st
new file mode 100644
index 000000000..d531bdb43
--- /dev/null
+++ b/repository/Tode-GemStone-Core3x.package/TDAbstractDevTool.extension/instance/performOnServer.status..st
@@ -0,0 +1,5 @@
+*tode-gemstone-core3x
+performOnServer: commandLine status: statusBlock
+ | performOnServerStatusArray |
+ performOnServerStatusArray := System _performOnServer: commandLine.
+ ^ statusBlock value: performOnServerStatusArray
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Core3x.package/TDAbstractDevTool.extension/methodProperties.json b/repository/Tode-GemStone-Core3x.package/TDAbstractDevTool.extension/methodProperties.json
new file mode 100644
index 000000000..e0227c2b0
--- /dev/null
+++ b/repository/Tode-GemStone-Core3x.package/TDAbstractDevTool.extension/methodProperties.json
@@ -0,0 +1,5 @@
+{
+ "class" : {
+ },
+ "instance" : {
+ "performOnServer:status:" : "dkh 09/16/2015 14:29" } }
diff --git a/repository/Tode-GemStone-Core3x.package/TDAbstractDevTool.extension/properties.json b/repository/Tode-GemStone-Core3x.package/TDAbstractDevTool.extension/properties.json
new file mode 100644
index 000000000..0654d47f0
--- /dev/null
+++ b/repository/Tode-GemStone-Core3x.package/TDAbstractDevTool.extension/properties.json
@@ -0,0 +1,2 @@
+{
+ "name" : "TDAbstractDevTool" }
diff --git a/repository/Tode-GemStone-Core3x.package/TDGemStoneTool.extension/instance/systemIsVoting.st b/repository/Tode-GemStone-Core3x.package/TDGemStoneTool.extension/instance/systemIsVoting.st
new file mode 100644
index 000000000..3d6504797
--- /dev/null
+++ b/repository/Tode-GemStone-Core3x.package/TDGemStoneTool.extension/instance/systemIsVoting.st
@@ -0,0 +1,6 @@
+*tode-gemstone-core3x
+systemIsVoting
+ | vs sessId |
+ vs := System voteState.
+ sessId := System sessionIdHoldingGcLock.
+ ^ sessId ~= 0 or: [ vs > 0 and: [ vs < 4 ] ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Core3x.package/TDGemStoneTool.extension/methodProperties.json b/repository/Tode-GemStone-Core3x.package/TDGemStoneTool.extension/methodProperties.json
new file mode 100644
index 000000000..fb955e462
--- /dev/null
+++ b/repository/Tode-GemStone-Core3x.package/TDGemStoneTool.extension/methodProperties.json
@@ -0,0 +1,5 @@
+{
+ "class" : {
+ },
+ "instance" : {
+ "systemIsVoting" : "dkh 09/16/2015 14:56" } }
diff --git a/repository/Tode-GemStone-Core3x.package/TDGemStoneTool.extension/properties.json b/repository/Tode-GemStone-Core3x.package/TDGemStoneTool.extension/properties.json
new file mode 100644
index 000000000..bb05de7b5
--- /dev/null
+++ b/repository/Tode-GemStone-Core3x.package/TDGemStoneTool.extension/properties.json
@@ -0,0 +1,2 @@
+{
+ "name" : "TDGemStoneTool" }
diff --git a/repository/Tode-GemStone-Core3x.package/monticello.meta/initializers.st b/repository/Tode-GemStone-Core3x.package/monticello.meta/initializers.st
new file mode 100644
index 000000000..e69de29bb
diff --git a/repository/Tode-GemStone-Core3x.package/monticello.meta/package b/repository/Tode-GemStone-Core3x.package/monticello.meta/package
new file mode 100644
index 000000000..0b6813b7a
--- /dev/null
+++ b/repository/Tode-GemStone-Core3x.package/monticello.meta/package
@@ -0,0 +1 @@
+(name 'Tode-GemStone-Core3x')
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Core3x.package/monticello.meta/version b/repository/Tode-GemStone-Core3x.package/monticello.meta/version
new file mode 100644
index 000000000..244da8788
--- /dev/null
+++ b/repository/Tode-GemStone-Core3x.package/monticello.meta/version
@@ -0,0 +1 @@
+(name 'Tode-GemStone-Core3x-dkh.4' message 'the gemtool restore method was actually doing a backup ... not cool:(' id 'bd6048a9-fd6b-4521-9606-0c3e75eb2220' date '10/08/2015' time '12:02:44' author 'dkh' ancestors ((name 'Tode-GemStone-Core3x-dkh.3' message 'Issue #202: add --uncompressed option to `bu backup` command. Default for `bu backup` is to create a compressed backup. Also add a `bu validate` command for validating the readability of backup files ... update tests ,, improve (hopefully) performOnServer: functionality by getting back explicit command status' id '6f045600-4da2-4552-b935-8d8e96f40ce5' date '09/16/2015' time '15:45:20' author 'dkh' ancestors ((name 'Tode-GemStone-Core3x-dkh.2' message 'add --safely option to `bu backup` command' id 'c59dc3b6-a4e5-4e60-b5f8-1e4622b999b8' date '03/22/2015' time '08:07:11' author 'dkh' ancestors ((name 'Tode-GemStone-Core3x-dkh.1' message 'fixing `bu` command for 2.4.x' id '6fc89f19-19a6-4eac-af9b-30576a638d2e' date '11/20/2014' time '11:21:19' author 'dkh' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Core3x.package/properties.json b/repository/Tode-GemStone-Core3x.package/properties.json
new file mode 100644
index 000000000..f037444a7
--- /dev/null
+++ b/repository/Tode-GemStone-Core3x.package/properties.json
@@ -0,0 +1,2 @@
+{
+ }
diff --git a/repository/Tode-GemStone-Server-Core.package/ClientForwarder.extension/instance/printOn.recursionSet..st b/repository/Tode-GemStone-Server-Core.package/ClientForwarder.extension/instance/printOn.recursionSet..st
new file mode 100644
index 000000000..81b8d9bb8
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/ClientForwarder.extension/instance/printOn.recursionSet..st
@@ -0,0 +1,3 @@
+*tode-gemstone-server-core
+printOn: aStream recursionSet: anIdentitySet
+ self printOn: aStream
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/ClientForwarder.extension/methodProperties.json b/repository/Tode-GemStone-Server-Core.package/ClientForwarder.extension/methodProperties.json
index e46bd41da..d35db49ff 100644
--- a/repository/Tode-GemStone-Server-Core.package/ClientForwarder.extension/methodProperties.json
+++ b/repository/Tode-GemStone-Server-Core.package/ClientForwarder.extension/methodProperties.json
@@ -4,4 +4,5 @@
"instance" : {
"asTDObjectNode:topez:aspect:" : "dkh 03/20/2014 16:13",
"displayOnPolicy:" : "dkh 05/30/2013 06:33",
- "displayWith:" : "dkh 05/30/2013 06:34" } }
+ "displayWith:" : "dkh 05/30/2013 06:34",
+ "printOn:recursionSet:" : "dkh 01/01/2015 16:29" } }
diff --git a/repository/Tode-GemStone-Server-Core.package/DirectoryEntry.extension/instance/asTDObjectNode.topez.aspect..st b/repository/Tode-GemStone-Server-Core.package/DirectoryEntry.extension/instance/asTDObjectNode.topez.aspect..st
new file mode 100644
index 000000000..558e2e6f6
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/DirectoryEntry.extension/instance/asTDObjectNode.topez.aspect..st
@@ -0,0 +1,7 @@
+*tode-gemstone-server-core
+asTDObjectNode: parentNode topez: aTopez aspect: aBuilderAspect
+ ^ self asTDFileSystemNode
+ parent: parentNode;
+ topez: aTopez;
+ builderAspect: aBuilderAspect;
+ yourself
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/DirectoryEntry.extension/methodProperties.json b/repository/Tode-GemStone-Server-Core.package/DirectoryEntry.extension/methodProperties.json
new file mode 100644
index 000000000..8a4b36544
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/DirectoryEntry.extension/methodProperties.json
@@ -0,0 +1,5 @@
+{
+ "class" : {
+ },
+ "instance" : {
+ "asTDObjectNode:topez:aspect:" : "dkh 11/12/2014 10:25" } }
diff --git a/repository/Tode-GemStone-Server-Core.package/DirectoryEntry.extension/properties.json b/repository/Tode-GemStone-Server-Core.package/DirectoryEntry.extension/properties.json
new file mode 100644
index 000000000..2043ac766
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/DirectoryEntry.extension/properties.json
@@ -0,0 +1,2 @@
+{
+ "name" : "DirectoryEntry" }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDFileTreeDiff.class/instance/methodBehavior.st b/repository/Tode-GemStone-Server-Core.package/TDFileTreeDiff.class/instance/methodBehavior.st
deleted file mode 100644
index 7d6a69df8..000000000
--- a/repository/Tode-GemStone-Server-Core.package/TDFileTreeDiff.class/instance/methodBehavior.st
+++ /dev/null
@@ -1,17 +0,0 @@
-as yet unclassified
-methodBehavior
- | tokens sz class ext cls isMeta |
- self hasFileTreeSmalltalkSource
- ifFalse: [ ^ nil ].
- tokens := self filePath findTokens: '/'.
- sz := tokens size.
- class := tokens at: sz - 2.
- (class endsWith: '.class')
- ifTrue: [ ext := '.class' ]
- ifFalse: [ ext := '.extension' ].
- class := class copyFrom: 1 to: class size - ext size.
- isMeta := (tokens at: sz - 1) = 'class'.
- cls := Smalltalk at: class asSymbol.
- isMeta
- ifTrue: [ cls := cls class ].
- ^ cls
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDFileTreeDiff.class/instance/methodClass.st b/repository/Tode-GemStone-Server-Core.package/TDFileTreeDiff.class/instance/methodClass.st
deleted file mode 100644
index 4be07cc3e..000000000
--- a/repository/Tode-GemStone-Server-Core.package/TDFileTreeDiff.class/instance/methodClass.st
+++ /dev/null
@@ -1,13 +0,0 @@
-as yet unclassified
-methodClass
- | tokens sz class ext |
- self hasFileTreeSmalltalkSource
- ifFalse: [ ^ nil ].
- tokens := self filePath findTokens: '/'.
- sz := tokens size.
- class := tokens at: sz - 2.
- (class endsWith: '.class')
- ifTrue: [ ext := '.class' ]
- ifFalse: [ ext := '.extension' ].
- class := class copyFrom: 1 to: class size - ext size.
- ^ Smalltalk at: class asSymbol
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDFileTreeDiff.class/instance/methodSelector.st b/repository/Tode-GemStone-Server-Core.package/TDFileTreeDiff.class/instance/methodSelector.st
index a6952c897..3532b59c5 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDFileTreeDiff.class/instance/methodSelector.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDFileTreeDiff.class/instance/methodSelector.st
@@ -1,4 +1,4 @@
-as yet unclassified
+smalltalk source
methodSelector
| methodSource methodNode |
self hasFileTreeSmalltalkSource
diff --git a/repository/Tode-GemStone-Server-Core.package/TDFileTreeDiff.class/instance/methodSpec.st b/repository/Tode-GemStone-Server-Core.package/TDFileTreeDiff.class/instance/methodSpec.st
deleted file mode 100644
index f465956e9..000000000
--- a/repository/Tode-GemStone-Server-Core.package/TDFileTreeDiff.class/instance/methodSpec.st
+++ /dev/null
@@ -1,19 +0,0 @@
-as yet unclassified
-methodSpec
- | tokens sz meta class ext |
- self hasFileTreeSmalltalkSource
- ifFalse: [ ^ self filePath ].
- ((self filePath includesSubstring: '.class')
- or: [ self filePath includesSubstring: '.extension' ]) not
- ifTrue: [ ^ self filePath ].
- tokens := self filePath findTokens: '/'.
- sz := tokens size.
- meta := ''.
- (tokens at: sz - 1) = 'class'
- ifTrue: [ meta := ' class' ].
- class := tokens at: sz - 2.
- (class endsWith: 'class')
- ifTrue: [ ext := '.class' ]
- ifFalse: [ ext := '.extension' ].
- class := class copyFrom: 1 to: class size - ext size.
- ^ class , meta , '>>' , self methodSelector asString
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDFileTreeDiff.class/methodProperties.json b/repository/Tode-GemStone-Server-Core.package/TDFileTreeDiff.class/methodProperties.json
index 1203ae6c6..e1428a813 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDFileTreeDiff.class/methodProperties.json
+++ b/repository/Tode-GemStone-Server-Core.package/TDFileTreeDiff.class/methodProperties.json
@@ -6,10 +6,6 @@
"formatSource:" : "dkh 05/19/2014 11:59",
"hasFileTreeSmalltalkSource" : "dkh 05/09/2014 12:39",
"label" : "dkh 05/10/2014 20:11",
- "methodBehavior" : "dkh 05/12/2014 19:35",
- "methodClass" : "dkh 05/10/2014 20:50",
- "methodSelector" : "dkh 05/09/2014 15:33",
- "methodSpec" : "dkh 05/22/2014 10:15",
+ "methodSelector" : "dkh 01/30/2015 11:02",
"sourceMethodSource" : "dkh 05/29/2014 21:16",
- "stSource" : "dkh 05/30/2014 07:03",
- "stSource:" : "dkh 05/09/2014 15:29" } }
+ "stSource" : "dkh 05/30/2014 07:03" } }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/backupDirectoryName.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/backupDirectoryName.st
index 60896962d..a8939cebd 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/backupDirectoryName.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/backupDirectoryName.st
@@ -1,5 +1,5 @@
bu
backupDirectoryName
BackupDirectoryName
- ifNil: [ self backupDirectoryName: self defaulBackupDirectoryName ].
+ ifNil: [ self backupDirectoryName: self defaultBackupDirectoryName ].
^ BackupDirectoryName
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/buManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/buManPage.st
index 9597359a9..2618d7070 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/buManPage.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/buManPage.st
@@ -19,18 +19,21 @@ DESCRIPTION
list Display info about all backup files
remove Remove backup file from backup directory
restore Restore from a GemStone backup
+ snapshot Make a snapshot of the extent0.dbf file
+ validate Validate that backup file is readable
OPTIONS
--help
--dir=
EXAMPLES
- bu backup seaside.dbf
- bu directory /opt/gemstone/backups
- bu info --dir=/opt/gemstone/backups seaside.dbf; print
+ bu backup sample.dbf
+ bu directory $GS_HOME/gemstone/stones/dev/backups
+ bu info --dir=/opt/gemstone/backups sample.dbf; edit
bu list
- bu remove seaside.dbf
- bu restore seaside.dbf
+ bu remove sample.dbf
+ bu restore sample.dbf
+ bu snapshot sample.dbf
'.
manPage subCommands
at: 'backup' put: self bubackupManPage;
@@ -39,5 +42,7 @@ EXAMPLES
at: 'list' put: self bulistManPage;
at: 'restore' put: self burestoreManPage;
at: 'remove' put: self buremoveManPage;
+ at: 'snapshot' put: self busnapshotManPage;
+ at: 'validate' put: self buvalidateManPage;
yourself.
^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/bubackupManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/bubackupManPage.st
index 975dbd123..8f502510e 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/bubackupManPage.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/bubackupManPage.st
@@ -4,13 +4,15 @@ bubackupManPage
commandName: 'backup'
fromString:
'NAME
- backup - Make a GemStone backup
+ bu backup - Make a GemStone backup
SYNOPSIS
- bu [--dir=] backup
+ bu [--dir=] backup [--safely] [--uncompressed]
DESCRIPTION
- Make a GemStone backup in the specified backup file.
+ Make a GemStone backup in the specified backup file. By default a compressed
+ backup is created and a `.gz` is tacked onto the end of the if
+ not already present.
With no options specified, the backup file will be located in the directory
specified by the `bu directory` command. The default backup directory is named
@@ -19,14 +21,23 @@ DESCRIPTION
With the --dir option specified, the backup file will be stored in the named
directory.
+ With the --safely option specified, the backup will (quietly) be skipped if
+ the target backup file already exists.
+
+ With the --uncompressed option an uncompressed backup is created in the named
+ .
+
EXAMPLES
bu --help backup
- bu backup seaside.dbf
- bu --dir=/opt/gemstone/backups backup seaside.dbf
+ bu backup --uncompressed sample.dbf
+ bu backup sample.dbf
+ bu backup --safely sample.dbf
+ bu --dir=/opt/gemstone/backups backup sample.dbf
SEE ALSO
bu --help directory
bu --help info
bu --help list
bu --help restore
+ bu --help validate
'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/budirectoryManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/budirectoryManPage.st
index a76ba2b12..332a37dbc 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/budirectoryManPage.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/budirectoryManPage.st
@@ -4,25 +4,30 @@ budirectoryManPage
commandName: 'directory'
fromString:
'NAME
- directory - Define default backup directory
+ bu directory - Define default backup directory
SYNOPSIS
- bu directory []
+ bu directory [--snapshot] []
DESCRIPTION
Set the default backup directory.
With no arguments specified, the current backup directory is listed.
- If an argument is specified, the backeup directory is set to the new
+ If an argument is specified, the backup directory is set to the new
location.
The default backup directory is named ''backups'' and is located in the
$GEMSTONE_DATADIR.
+ If the --snapshot option is specified, then the snapshot directory is
+ set or displayed.
+
EXAMPLES
+ bu --help
bu directory
bu directory /opt/gemstone/backups
+ bu directory --snapshot /opt/gemstone/snapshots
SEE ALSO
bu --help backup
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/buinfoManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/buinfoManPage.st
index 01d186c96..007caa67b 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/buinfoManPage.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/buinfoManPage.st
@@ -4,15 +4,15 @@ buinfoManPage
commandName: 'info'
fromString:
'NAME
- info - Display info about a particular backup
+ bu info - Display info about a particular backup
SYNOPSIS
- bu [--dir=] info
+ bu [--dir=] info [--snapshot]
DESCRIPTION
Display information from the GemStone copydbf command about the backup file:
- Source file: /export/foos2/users/dhenrich/3.0/j_gss64bit/backups//wip.dbf
+ Source file: /export/foos2/users/dhenrich/3.0/j_gss64bit/backups/wip.dbf
File type: backup fileId: 0
ByteOrder: Intel (LSB first) compatibilityLevel: 844
The file was created at: 04/20/2014 10:16:08 PDT.
@@ -23,11 +23,17 @@ DESCRIPTION
With the --dir option specified, the restore file will be read from the named
directory.
+ With the --snapshot options specified, the is looked up in
+ the snapshot directory/
+
EXAMPLES
- bu info seaside.dbf; print
- bu info --dir=/opt/gemstone/backups seaside.dbf; print
+ bu info extent0.sample.dbf; edit
+ bu --dir=/opt/gemstone/backups info sample.dbf; edit
+ bu info --snapshot extent0.sample.dbf; edit
+ bu --dir=$GS_HOME/gemstone/snapshots info extent0.sample.dbf; edit
SEE ALSO
bu --help backup
bu --help restore
+ bu --help snapshot
'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/bulistManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/bulistManPage.st
index 97e204703..f9f8bc7bf 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/bulistManPage.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/bulistManPage.st
@@ -4,7 +4,7 @@ bulistManPage
commandName: 'list'
fromString:
'NAME
- list - Display info about all backup files
+ bu list - Display info about all backup and snapshot files
SYNOPSIS
bu [--dir=] list
@@ -14,12 +14,16 @@ DESCRIPTION
Last Restore: 17/04/2014 10:13:20 -- home.dbf (04/17/2014 14:14:41)
Last Backup: 20/04/2014 10:16:10 -- wip.dbf
+ Backups:
14/04/2014 20:59:29 -- glass-1.0-beta.9.1.dbf
15/04/2014 17:38:22 -- tode.dbf
17/04/2014 12:12:59 -- seaside3.0.9.1.dbf
17/04/2014 14:21:59 -- seaside3.0.10.dbf
19/04/2014 20:51:15 -- home.dbf
20/04/2014 10:16:10 -- wip.dbf
+ Snapshots:
+ 15/04/2014 17:38:22 -- extent0.tode.dbf
+ 17/04/2014 12:12:59 -- extent0.seaside3.dbf
Included in the information is the `Last Backup` and `Last Restore` times.
@@ -30,11 +34,15 @@ DESCRIPTION
from backup is performed. Note that the state is actually set by a call from
the tode client, immediately after the restore is completed.
+ With the --dir specified, the info for the files in that directory are
+ listed.
EXAMPLES
bu list
bu --dir=/opt/gemstone/backups list
+ bu --dir=$GS_HOME/gemstone/snapshots list
SEE ALSO
bu --help backup
bu --help restore
+ bu --help snapshot
'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/buremoveManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/buremoveManPage.st
index f61f4aff6..7bcf4b2d2 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/buremoveManPage.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/buremoveManPage.st
@@ -4,10 +4,10 @@ buremoveManPage
commandName: 'remove'
fromString:
'NAME
- remove - Remove backup file from backup directory
+ bu remove - Remove backup file from backup directory
SYNOPSIS
- bu [--dir=] remove
+ bu [--dir=] remove [--snapshot]
DESCRIPTION
Remove the specified backup file from the backup directory.
@@ -19,14 +19,21 @@ DESCRIPTION
With the --dir option specified, the backup file will be stored in the named
directory.
+ With the --snapshot option specified the named file is removed from the
+ snapshot directory. See `man bu snapshot` for details of the snapshot
+ directory.
+
EXAMPLES
- bu --help reemove
- bu remove seaside.dbf
- bu --dir=/opt/gemstone/backups remove seaside.dbf
+ bu --help remove
+ bu remove sample.dbf
+ bu --dir=/opt/gemstone/backups remove sample.dbf
+ bu remove --snapshot extent0.sample.dbf
+ bu --dir=--dir=$GS_HOME/gemstone/snapshots remove extent0.sample.dbf
SEE ALSO
bu --help directory
bu --help info
bu --help list
bu --help restore
+ bu --help snapshot
'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/burestoreManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/burestoreManPage.st
index 4127e87ba..2138f055d 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/burestoreManPage.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/burestoreManPage.st
@@ -4,7 +4,7 @@ burestoreManPage
commandName: 'restore'
fromString:
'NAME
- restore - Restore from a GemStone backup
+ bu restore - Restore from a GemStone backup
SYNOPSIS
bu [--dir=] restore
@@ -20,8 +20,9 @@ DESCRIPTION
directory.
EXAMPLES
- bu restore seaside.dbf
- bu --dir=/opt/gemstone/backups restore seaside.dbf
+ bu restore sample.dbf
+ bu restore sample.dbf.gz
+ bu --dir=/opt/gemstone/backups restore sample.dbf.gz
SEE ALSO
bu --help backup
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/busnapshotManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/busnapshotManPage.st
new file mode 100644
index 000000000..23064c696
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/busnapshotManPage.st
@@ -0,0 +1,54 @@
+bu
+busnapshotManPage
+ ^ TDManPage
+ commandName: 'snapshot'
+ fromString:
+ 'NAME
+ bu snapshot - Make a snapshot of the extent files
+
+SYNOPSIS
+ bu [--dir=] snapshot [--safely] [--suspend=] \
+
+DESCRIPTION
+ Make a snapshot copy of the extent files:
+
+ 1. Suspend checkpoints. By default, checkpoints will be suspended for 15
+ minutes. If that may not be enough time, you can specify the number of
+ minutes to suspend the checkpoints with the --suspend option.
+ 2. Copy the extent files to the (replacing the `.dbf`
+ file extension with the given .
+ 3. Resume checkpoints. Since checkpoints are explicitly resumed after the
+ copies have been made, it does not hurt to be generous with the
+ --suspend option.
+
+ The default snapshot directory is a sibling directory of the backup directory
+ named ''snapshot''.
+
+ With the --dir option specified, the snapshot files will be stored in the named
+ directory.
+
+ While an extent snapshot can be used to restore the state of a repository
+ (see http://downloads.gemtalksystems.com/docs/GemStone64/3.2.x/GS64-SysAdmin-3.2/9-BackupAndRestore.htm#pgfId-1001430),
+ the recommended usage is to create an extent snapshot immediately after
+ installing tODE (see $GS_HOME/tode/sys/defaults/client/scripts/installServerTode2)
+ and using the snapshot as the starting point for subsequent installations.
+
+ With the --safely option specified, the snapshot will (quietly) be skipped if
+ the target snapshot already exists.
+
+EXAMPLES
+ bu --help snapshot
+ bu snapshot sample.dbf
+ bu snapshot --safely sample.dbf
+ bu --dir=$GS_HOME/gemstone/snapshots snapshot sample.dbf
+
+SEE ALSO
+ bu --help directory
+ bu --help info
+ bu --help list
+ bu --help restore
+ Extent Snapshot Backup when the Repository is running:
+ http://downloads.gemtalksystems.com/docs/GemStone64/3.2.x/GS64-SysAdmin-3.2/9-BackupAndRestore.htm#pgfId-972147
+
+ Restoring from and Extent Snapshot Backup:
+ http://downloads.gemtalksystems.com/docs/GemStone64/3.2.x/GS64-SysAdmin-3.2/9-BackupAndRestore.htm#pgfId-1001430'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/buvalidateManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/buvalidateManPage.st
new file mode 100644
index 000000000..2dc509398
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/buvalidateManPage.st
@@ -0,0 +1,35 @@
+bu
+buvalidateManPage
+ ^ TDManPage
+ commandName: 'validate'
+ fromString:
+ 'NAME
+ bu validate - Validate that backup file is readable
+
+SYNOPSIS
+ bu [--dir=] validate [--snapshot]
+
+DESCRIPTION
+ Verify the readability of the specified bacup file.
+
+ With no options specified, the backup file will be read from the directory
+ specified by the `bu directory` command. The default backup directory is named
+ ''backups'' and is located in the $GEMSTONE_DATADIR.
+
+ With the --dir option specified, the restore file will be read from the named
+ directory.
+
+ With the --snapshot option specified the in the snapshot directory
+ will be validated.
+
+EXAMPLES
+ bu validate sample.dbf.gz
+ bu --dir=/opt/gemstone/backups validate sample.dbf.gz
+ bu validate --snapshot extent0.sample.dbf
+
+SEE ALSO
+ bu --help backup
+ bu --help directory
+ bu --help info
+ bu --help list
+'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/defaulBackupDirectoryName.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/defaulBackupDirectoryName.st
deleted file mode 100644
index a98e52d44..000000000
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/defaulBackupDirectoryName.st
+++ /dev/null
@@ -1,3 +0,0 @@
-bu
-defaulBackupDirectoryName
- ^ (GsFile _expandEnvVariable: 'GEMSTONE_DATADIR' isClient: false) , '/backups'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/defaultBackupDirectoryName.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/defaultBackupDirectoryName.st
new file mode 100644
index 000000000..088f34c70
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/defaultBackupDirectoryName.st
@@ -0,0 +1,7 @@
+bu
+defaultBackupDirectoryName
+ | path |
+ path := (GsFile _expandEnvVariable: 'GEMSTONE_DATADIR' isClient: false)
+ , '/backups'.
+ (ServerFileDirectory on: path) assureExistence.
+ ^ path
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/defaultSnapshotDirectoryName.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/defaultSnapshotDirectoryName.st
new file mode 100644
index 000000000..dc7ad156c
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/defaultSnapshotDirectoryName.st
@@ -0,0 +1,7 @@
+bu
+defaultSnapshotDirectoryName
+ | path |
+ path := ((ServerFileDirectory on: self backupDirectoryName)
+ containingDirectory directoryNamed: 'snapshots') fullName.
+ (ServerFileDirectory on: path) assureExistence.
+ ^ path
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gs.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gs.st
index 675efccac..b9c8b5e35 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gs.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gs.st
@@ -1,4 +1,9 @@
-as yet unclassified
+gs
gs
- ^ [ :topez :objIn :tokens :command | self performSubCommand: topez objIn: objIn todeCommand: command ]
\ No newline at end of file
+ ^ [ :topez :objIn :tokens :command |
+ self
+ performSubCommand: topez
+ objIn: objIn
+ commandOptions: {#('help' $h #'none')}
+ todeCommand: command ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsManPage.st
index a1d787a04..512d8cc1b 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsManPage.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsManPage.st
@@ -1,34 +1,88 @@
-as yet unclassified
+gs
gsManPage
- ^ 'NAME
+ | manPage |
+ manPage := TDManPage
+ commandName: 'gs'
+ fromString:
+ 'NAME
gs - execute gemstone commands
SYNOPSIS
-# gs dataDir
- gs fileout -d|--directory=
- [--class|--package|--category] ...
- gs halt -m|--almostOutOfMemory=
- gs instances
- instances @
- gs mfc []
- gs mreferences @
- gs objectAudit []
- gs objectFor
- gs references @
- gs sessionDescription
- gs version
+ gs [--help] []
DESCRIPTION
+ gs is the primary command for executing GemStone-specific commands.
+
+ The is the name of a gs command that invokes a
+ specific operation or tool.
+
+ Commands:
+ configuration Gem and Stone configuration reports
+ fileout Fileout Classes, Categories or Packages
+ fileSizeReport Report on repository size and amount of free space
+ gemtools Emulate GemTools Launcher Menus
+ halt Halt on AlmostOutOfMemory exception
+ instances
+ mfc Perform a Mark for Collection
+ mreferences
+ objectAudit
+ objectFor Resolve an object from given objectId
+ references Find reference paths to the given objects
+ sessionDescription Session information report
+ version OS, hardware and GemStone version attributes for Client, Gem, or Stone
+
+ Use `gs --help ` to read about a specific subcommand.
+
+OPTIONS
+ --help []
+ Bring up this man page or a man page for a subCommand.
+
+EXAMPLES
+ gs --help
+ gs --help mfc
+
+ gs configuration --gem
+ gs configuration --stone
- fileout
- -d, --directory file system path to target directory where fileout files will
- be written
- --class fileout class. the is:
- --package fileout package. the is:
- --category fileout category. the is:
+ gs fileout --directory=/tmp/fileouts --category Metacello-Core-Scripts metacello-scripts.gs
+ gs fileout --directory=/tmp/fileouts --class TDGemStoneTool gstool.gs
+ gs fileout --directory=/tmp/fileouts --package Tode-GemStone-Server-Tests tests.gs
- example:
+ gs fileSizeReport
- gs file --directory=/tmp/fileouts --class TDGemStoneTool gstool.gs
- gs file -d/tmp/fileouts --package Index-Tests indexTests.gs
-'
\ No newline at end of file
+ gs gemtools
+
+ gs halt -m=65
+ gs halt -almostOutOfMemory=65
+
+ gs mfc
+ gs mfc --noCommit
+ gs mfc --threads=3 --wait=120 --cpu=40
+ gs mfc --buffer=256
+
+ gs objectFor
+
+ gs references --max=32
+
+ gs sessionDescription
+ gs sessionDescription 5
+ gs sessionDescription --all
+
+ gs version
+ gs version --client
+ gs version --gem
+ gs version --stone
+'.
+ manPage subCommands
+ at: 'gemtools' put: self gsgemtoolsManPage;
+ at: 'configuration' put: self gsconfigurationManPage;
+ at: 'fileout' put: self gsfileoutManPage;
+ at: 'halt' put: self gshaltManPage;
+ at: 'fileSizeReport' put: self gsfileSizeReportManPage;
+ at: 'mfc' put: self gsmfcManPage;
+ at: 'objectFor' put: self gsobjectForManPage;
+ at: 'sessionDescription' put: self gssessionDescriptionManPage;
+ at: 'version' put: self gsversionManPage;
+ at: 'references' put: self gsreferencesManPage;
+ yourself.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsconfigurationManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsconfigurationManPage.st
new file mode 100644
index 000000000..93b91b55d
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsconfigurationManPage.st
@@ -0,0 +1,30 @@
+gs
+gsconfigurationManPage
+ | manPage |
+ manPage := TDManPage
+ commandName: 'configuration'
+ fromString:
+ 'NAME
+ gs configuration - Gem and Stone configuration reports
+
+SYNOPSIS
+ gs configuration [--gem|--stone]
+
+DESCRIPTION
+ Returns a dictionary whose keys are the names of configuration file parameters.
+
+OPTIONS
+ --gem
+ Returns a dictionary whose keys are the names of configuration file parameters, and whose
+ values are the current settings of those parameters in the current session''s Gem process.
+
+ --stone
+ Returns a dictionary whose keys are the names of configuration file parameters, and whose
+ values are the current settings of those parameters in the repository monitor process
+ (Stone).
+
+EXAMPLES
+ gs configuration --gem
+ gs configuration --stone
+'.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsfileSizeReportManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsfileSizeReportManPage.st
new file mode 100644
index 000000000..e40779f83
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsfileSizeReportManPage.st
@@ -0,0 +1,20 @@
+gs
+gsfileSizeReportManPage
+ | manPage |
+ manPage := TDManPage
+ commandName: 'fileSizeReport'
+ fromString:
+ 'NAME
+ gs fileSizeReport - Report on repository size and amount of free space
+
+SYNOPSIS
+ gs fileSizeReport
+
+DESCRIPTION
+ Opens editor on a string which reports on the name, size, and amount of free space
+ for each extent and the size and free space of the entire logical Repository.
+
+EXAMPLES
+ gs fileSizeReport
+'.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsfileoutManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsfileoutManPage.st
new file mode 100644
index 000000000..48d7d2d7b
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsfileoutManPage.st
@@ -0,0 +1,43 @@
+gs
+gsfileoutManPage
+ | manPage |
+ manPage := TDManPage
+ commandName: 'fileout'
+ fromString:
+ 'NAME
+ gs fileout - Fileout Classes, Categories or Packages
+
+SYNOPSIS
+ gs fileout --directory= [--class|--package|--category] ...
+
+DESCRIPTION
+ Fileout classes, categories or packages to the given directory.
+
+ At leasy one must be specified. A consists of the name of a
+ category, class, or package and the name of the file.
+
+OPTIONS
+ --directory=
+ may be fully qualified or relative to the PWD env variable with which
+ the gem was started. In general, a fully qualified path should be used. Each of the files
+ is created in the given directory
+
+ --category
+ The name in the will be interpreted as a class category name and all of the
+ the classes located in that category will be filed out to the given file.
+
+ --class
+ The name in the will be interpreted as a class name and the given class
+ will be filed out to the given file.
+
+ --package
+ The name in the will be interpreted as a package name and all of the
+ the classes and extension methods contained in the package will be filed out to the
+ given file.
+
+EXAMPLES
+ gs fileout --directory=/tmp/fileouts --category Metacello-Core-Scripts metacello-scripts.gs
+ gs fileout --directory=/tmp/fileouts --class TDGemStoneTool gstool.gs
+ gs fileout --directory=/tmp/fileouts --package Tode-GemStone-Server-Tests tests.gs
+'.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsgemtoolsManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsgemtoolsManPage.st
new file mode 100644
index 000000000..7e4689e12
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsgemtoolsManPage.st
@@ -0,0 +1,182 @@
+gs
+gsgemtoolsManPage
+ | manPage |
+ manPage := TDManPage
+ commandName: 'gemtools'
+ fromString:
+ 'NAME
+ gs gemtools - Emulate GemTools Launcher Menus
+
+SYNOPSIS
+ gs gemtools
+
+DESCRIPTION
+ The `gemtools` command opens a window that lists all of the menu items in the GemTools
+ Launcher menu. When you click on an item in the list, the man page for the corresponding
+ tODE command is opened. Selecting a menu item from the hierarchical menu, will perform the
+ corresponding command in the tODE environment.
+
+ The purpose of this window is to provide developers who are familiar with GemTools a
+ bridge between familiar GemTools commands and their tODE counterparts.
+
+ For best results, you should scan through the command list in the window (you might want to
+ drag the bottom of the window down to make it as tall as your display, so you can more of
+ the commands without scrolling) and click on the items that you frequently use. Then you
+ should read the man page and try typing the command in the console and experiment with the
+ various options. All man pages have an EXAMPLES section at the bottom of the page. By using
+ the `tODE it` menu item, tODE shell expressions can be executed by simply highlighting the
+ expression (similar to the Smalltalk `do it` menuitem).
+
+ If you prefer, you can use the menu associated with the window to execute the various
+ GemTools commands. As you become more familiar with tODE, I expect that you will build up
+ your own custom tool sets.
+
+ One of the priniciples of tODE is that you should be able to have equal access to command
+ functionality from:
+
+ GUI tools
+ Shell tools
+ Batch tools (topaz)
+
+ This is accomplished by by basing all GUI functionality upon shell commands (this is why you are being shown the man page for the commands that implement the various GemTools menu
+ items). tODE commands are written such that the core functionality can be called from
+ Smalltalk. The command line implementation parses the arguments and calls the same api that
+ is used by the GUI, which uses the user interface to collect information from the users.
+ Additionally, shell commands return a REAL object as the command result, so not only are
+ command results available in the shell console AFTER a command has been executed, but
+ shell commands can be called from Smalltalk using `TDTopezServer>>evaluateCommandString:`.
+ This makes it possible to run tODE shell commands from topaz.
+
+ As a simple example, let''s compare the implementation of the `Admin>Repository>List backup
+ files` gemtools menu item, to the `bu list` command. We''ll start by looking at the code
+ for TDGemToolsMenuBar>>repositoryListBackup:selectedIndex: (select the line below and use
+ the `tODE it` menu item to execute the tODE shell command in place):
+
+ browse method --spec TDGemToolsMenuBar>>repositoryListBackup:selectedIndex:
+
+ After you click on the method in the method list window, click in the method source and use
+ the `Window>cloine window` item to make a copy of the method window. Drag the method source
+ to the side of the screen.
+
+ Next bring up the source for the `bu list` command:
+
+ browse method --spec TDGemStoneTool>>bulist
+
+ It should be pretty clear that both methods are using a common API. The gemtools code is
+ invoked from a menu item, while the `bu list` code is invoked from the command line.
+
+ Using shell commands in topaz
+ -----------------------------
+ If you need to be run tODE shell scripts from a batch environment, then you would use something like the following topaz script:
+
+display oops
+level 1
+run
+| entries |
+entries := TDTopezServer evaluateCommandString: ''bu list''.
+entries collect: [:each | each name].
+%
+
+ Digging Deeper
+ --------------
+ If you are interested in seeing how the GemTools functions are implemented, start by
+ using the `Window>inspect builder` menu item to open an inspector on the window builder. In
+ the inspector, use the `Object>browse class` menu item to bring up a class browser on the
+ window builder class and poke around in the methods.
+
+ Alternatively you can `tode it` the following tODE shell expression:
+
+ browse method --spec TDGemToolsMenuBar>>menuActionSpec:
+
+ to view the menu specification for all of the commands. You can scan through the commands
+ until you find a menu spec that you are interested in, like the following:
+
+ #(''Class...'' nil #''findClass:selectedIndex:'').
+
+ select the `findClass:selectedIndex:` which is the method that is invoked when
+ the menu item is clicked and use the `Browse>implementors of it` menu item to see the
+ implementation of the method.
+
+ If you wanted to create your own tODE shell script based on one of the commands. Start
+ by creating a shell file in your /home directory and then open an editor on the script:
+
+ cd /home
+ touch sh fc
+ edit fc
+
+ Copy the method contents (without the selector) and replace the "WRITE SCRIPT HERE" with the
+ paste buffer. Replace any occurences of `self topez` with `topez` as `topez` is supplied as
+ an argument to the shell command block. Also remove any returns in the method, as non-local
+ returns are not permitted in shell command blocks. You might have to adjust the logic a bit
+ to avoid the non-local returns.
+
+ When you are happy with the script, `accept` it and then test the script by executing the
+ following:
+
+ ./fc
+
+ When you are done with your experiment you can delete the shell script:
+
+ rm fc
+
+ GemTools Launcher Menu Items
+ ----------------------------
+ Transactions
+ Commit
+ Abort
+ Auto Abort
+ Auto Commit
+ Auto Migrate
+ Find
+ Class...
+ Hierarchy Browser...
+ Class References...
+ Method...
+ String...
+ Senders...
+ Case Sensitive String...
+ Tools
+ System Browser
+ Open Workspaces
+ File Browser
+ Process Browser
+ Inspect UndefinedSymbols
+ Inspect Sent But Not Implemented
+ Test Runner
+ Monticello
+ Admin
+ Repository
+ List backup files
+ Backup
+ Restore from Backup
+ Mark for Collection
+ DoIt
+ Changed packages & methods
+ Configuration Reports
+ Gem Configuration Report
+ Stone Configuration Report
+ Empty Object Log
+ File Size Report
+ Object Log
+ User Session Report
+ Version Report
+ Client Version Report
+ Gem Version Report
+ Stone Version Report
+ Browser Preferences
+ Commit on Almost Out of Memory
+ Popup on debug
+ Send Bug Report
+ Help
+ Debug...
+ Remove Continuations from Object Log
+ Clear Object Log
+ Debug Continuations
+ Update...
+ Update GemTools Launcher
+ Update GLASS
+
+EXAMPLES
+ gs gemtools
+'.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gshaltManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gshaltManPage.st
new file mode 100644
index 000000000..6ba5b3340
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gshaltManPage.st
@@ -0,0 +1,25 @@
+gs
+gshaltManPage
+ | manPage |
+ manPage := TDManPage
+ commandName: 'halt'
+ fromString:
+ 'NAME
+ gs halt - Halt on AlmostOutOfMemory exception
+
+SYNOPSIS
+ gs halt -m|--almostOutOfMemory=
+
+DESCRIPTION
+ Halt on AlmostOutOfMemory exception invocation.
+
+OPTIONS
+ -m|--almostOutOfMemory=
+ specifies the percentage of Temporary Object Cache at which the
+ AlmostOutOfMemory admonition is signalled
+
+EXAMPLES
+ gs halt -m=65
+ gs halt -almostOutOfMemory=65
+'.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsmfcManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsmfcManPage.st
new file mode 100644
index 000000000..1f225a1a1
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsmfcManPage.st
@@ -0,0 +1,64 @@
+gs
+gsmfcManPage
+ | manPage |
+ manPage := TDManPage
+ commandName: 'mfc'
+ fromString:
+ 'NAME
+ gs mfc - Perform a Mark for Collection
+
+SYNOPSIS
+ gs mfc [--noCommit] [--threads=] [--wait=]
+ [--buffer=] [--cpu=]
+
+DESCRIPTION
+ Perform a garbage collection analysis of all permanent objects on disk.
+ Every object in the receiver that cannot be reached from AllUsers is marked
+ for subsequent reclaiming of storage space.
+
+ This command commits the current transaction (unless the --noCommit option
+ is specified), empties the GcCandidates queue and commits, runs the analysis
+ while outside of a transaction and then reenters a transaction if the session
+ was in a transaction at the start of this method. If an abort would cause unsaved
+ changes to be lost, it does not execute and signals an error, #rtErrAbortWouldLoseData.
+
+ For additional information see the comments in the following methods:
+
+ browse method --spec Repository>>markForCollection \
+ Repository>>_mfcWithMaxThreads:waitForLock:pageBufSize:percentCpuActiveLimit:
+
+OPTIONS
+ --buffer=
+ By default, the is 128. The , which must be a
+ power of two, specifies the number of pages to buffer per thread. This parameter in
+ conjunction with the largely determines the memory footprint needed to
+ perform this operation.
+
+ --cpu=
+ By default, the is 90. The
+ specifies a level of total cpu activity at which the algorithm automatically
+ inactivates threads to prevent overload of system resources.
+
+ --noCommit
+ By default, this command performs a commit. If the --noCommit option is specified,
+ then an abort is performed instead as the mfc must start with no dirty objects in
+ the vm.
+
+ --threads=
+ By default, the is 1. The argument specifies the maximum
+ number of slave sessions (threads) that can be used during the operation.
+
+ --wait=
+ By default the is 60. The is used to specify how many
+ seconds the method should wait while attempting to acquire the gcLock. No other
+ garbage collection operations may be started or in progress while this method is
+ running. There also must be no outstanding possible dead objects in the system for
+ the GC lock to be granted.
+
+EXAMPLES
+ gs mfc
+ gs mfc --noCommit
+ gs mfc --threads=3 --wait=120 --cpu=40
+ gs mfc --buffer=256
+'.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsobjectForManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsobjectForManPage.st
new file mode 100644
index 000000000..6105b491e
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsobjectForManPage.st
@@ -0,0 +1,23 @@
+gs
+gsobjectForManPage
+ | manPage |
+ manPage := TDManPage
+ commandName: 'objectFor'
+ fromString:
+ 'NAME
+ gs objectFor - Resolve an object from given objectId
+
+SYNOPSIS
+ gs objectFor ...
+
+DESCRIPTION
+ Return an Array of objects with the given list of s. The object''s slot
+ in the Array is occuped by nil if no such object exists. The
+ may specify a special object.
+
+EXAMPLES
+ gs objectFor 188566017
+ gs objectFor 188566017 79171329
+
+'.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsreferencesManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsreferencesManPage.st
new file mode 100644
index 000000000..58646d811
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsreferencesManPage.st
@@ -0,0 +1,26 @@
+gs
+gsreferencesManPage
+ | manPage |
+ manPage := TDManPage
+ commandName: 'references'
+ fromString:
+ 'NAME
+ gs references - Find reference paths to the given objects
+
+SYNOPSIS
+ gs references [--max=] [--inMemory] ...
+
+DESCRIPTION
+ Return an Dictionary of reference paths for the given list of objects, where the
+ key is the object and the value is an Array of reference paths.
+
+ With --inMemory, only objects in the current session''s temporary object memory
+ are returned.
+
+EXAMPLES
+ gs references --inMemory 188566017
+ gs references 188566017
+ gs references 188566017 79171329
+ gs references --max=5 188566017 79171329
+'.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gssessionDescriptionManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gssessionDescriptionManPage.st
new file mode 100644
index 000000000..92e753ad0
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gssessionDescriptionManPage.st
@@ -0,0 +1,66 @@
+gs
+gssessionDescriptionManPage
+ | manPage |
+ manPage := TDManPage
+ commandName: 'sessionDescription'
+ fromString:
+ 'NAME
+ gs sessionDescription - Session information report
+
+SYNOPSIS
+ gs sessionDescription [--all]|[]
+
+DESCRIPTION
+ Return a dictionary with a variety of information about the given .
+
+ By default, returns the session description for the current session.
+
+ With the --all option, a dictionary of session description dictionaries is returned, keyed
+ by session id.
+
+ Here''s a summary of the information in each session description dictionary:
+
+ 1. The UserProfile of the session; nil if the UserProfile is recently
+ created and not visible from this session''s transactional view
+ or the session is in login or processing, or has logged out.
+ 2. A SmallInteger, the process ID of the Gem or topaz -l process .
+ 3. The hostname of the machine running the Gem process. Specifically,
+ the peer''s hostname as seen by stone, for the gem to stone network
+ connection used for login.
+ (a String, limited to 127 bytes).
+ 4. Primitive number in which the Gem is executing, or 0 if it is not executing
+ in a long primitive.
+ 5. Time of the session''s most recent beginTransaction, commitTransaction, or
+ abortTransaction (from System timeGmt).
+ 6. The session state (a SmallInteger).
+ 7. A SmallInteger whose value is -1 if the session is in transactionless mode,
+ 0 if it is not in a transaction and 1 if it is in a transaction.
+ 8. A Boolean whose value is true if the session is currently referencing the
+ oldest commit record, and false if it is not.
+ 9. The session''s serial number (a SmallInteger).
+ 10. The session''s sessionId (a SmallInteger).
+ 11. A String containing the ip address of host running the GCI process.
+ If the GCI application is remote, the peer address as seen by
+ the gem of the GCI app to gem network connection.
+ If the GCI application is linked (using libgcilnk*.so or gcilnk*.dll)
+ this is the peer''s ip address as seen by stone, for the gem to
+ stone network connection used for login.
+ 12. The priority of the session (a SmallInteger).
+ 13. Unique host ID of the host where the session is running (an Integer)
+ 14. Time of the session''s most recent request to stone (from System timeGmt)
+ 15. Time the session logged in (from System timeGmt)
+ 16. Number of commits which have occurred since the session obtained its view.
+ 17. Nil or a String describing a system or gc gem .
+ 18. Number of temporary (uncommitted) object IDs allocated to the session.
+ 19. Number of temporary (non-persistent) page IDs allocated to the session.
+ 20. A SmallInteger, 0 session has not voted, 1 session voting in progress,
+ 2 session has voted, or voting not active.
+ 21. A SmallInteger, processId of the remote GCI client process,
+ or -1 if the session has no remote GCI client .
+
+EXAMPLES
+ gs sessionDescription
+ gs sessionDescription 5
+ gs sessionDescription --all
+'.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsversionManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsversionManPage.st
new file mode 100644
index 000000000..68186bb99
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/gsversionManPage.st
@@ -0,0 +1,34 @@
+gs
+gsversionManPage
+ | manPage |
+ manPage := TDManPage
+ commandName: 'version'
+ fromString:
+ 'NAME
+ gs version - OS, hardware and GemStone version attributes for Client, Gem, or Stone
+
+SYNOPSIS
+ gs version [--client|--gem|--stone]
+
+DESCRIPTION
+ Return a StringKeyValueDictionary whose keys are the names of operating system,
+ hardware, or GemStone version attributes, and whose values are the current values
+ of those attributes for the current client, gem, or stone.
+
+OPTIONS
+ --client
+ Return attribute dictionary for client GemBuilder for C process.
+
+ --gem
+ Return attribute dictionary for Gem process.
+
+ --stone
+ Return attribute dictionary for Stone process.
+
+EXAMPLES
+ gs version
+ gs version --client
+ gs version --gem
+ gs version --stone
+'.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/initialize.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/initialize.st
index acdec3a94..9afe4d835 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/initialize.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/initialize.st
@@ -1,4 +1,4 @@
-as yet unclassified
+initialization
initialize
self install.
TDTopezServer
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/installOn..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/installOn..st
index ccf6ffb49..80e2d2942 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/installOn..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/installOn..st
@@ -1,4 +1,4 @@
-as yet unclassified
+initialization
installOn: aTDTopezServer
aTDTopezServer ensureChildrenExistIn: self commandPath.
super installOn: aTDTopezServer
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/olManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/olManPage.st
index 66e23be45..a4c8790c5 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/olManPage.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/olManPage.st
@@ -39,10 +39,14 @@ EXAMPLES
ol view error
ol view --inverse transcript
ol view --age=`1 day` -r transcript
+ ol view --continuation
+ ol view --continuation --age=`1 month` error
ol clear debug error trace
ol clear --inverse transcript
ol clear --age=`1 month`
+ ol clear --continuation
+ ol clear --continuation --age=`1 month` error
'.
manPage subCommands
at: 'view' put: self olviewManPage;
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/olclearManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/olclearManPage.st
index 26a5987cd..0d449ae73 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/olclearManPage.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/olclearManPage.st
@@ -5,10 +5,10 @@ olclearManPage
commandName: 'clear'
fromString:
'NAME
- old clear - Remove object log entries
+ ol clear - Remove object log entries
SYNOPSIS
- ol clear [--inverse] [--age=] [ ... ]
+ ol clear [--inverse] [--age=] [--continuation] [ ... ]
DESCRIPTION
The `ol clear` command the object log entries that match the list of priorities. If
@@ -29,6 +29,9 @@ OPTIONS
--age=
Only object log entries OLDER than age are removed.
+ --continuation
+ Only object log entries with continuations are removed.
+
--inverse
The applies to the list of all priorities, except the listed
priorities.
@@ -37,5 +40,7 @@ EXAMPLES
ol clear debug error trace
ol clear --inverse transcript
ol clear --age=`1 month`
+ ol clear --continuation
+ ol clear --continuation --age=`1 month` error
'.
^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/olviewManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/olviewManPage.st
index 18ac82b9a..d1b2d05e4 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/olviewManPage.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/olviewManPage.st
@@ -5,10 +5,10 @@ olviewManPage
commandName: 'view'
fromString:
'NAME
- old view - View object log entries
+ ol view - View object log entries
SYNOPSIS
- ol view [--inverse] [--reverse|-r] [--age=] [--pid=]
+ ol view [--inverse] [--reverse|-r] [--age=] [--pid=] [--continuation] \
[ ... ]
DESCRIPTION
@@ -31,6 +31,9 @@ OPTIONS
--age=
Only object log entries NEWER than are included in the list
+ --continuation
+ Only object log entries with continuations are displayed.
+
--inverse
The applies to the list of all priorities, except the listed priorities.
@@ -45,5 +48,7 @@ EXAMPLES
ol view --inverse transcript
ol view --age=`1 day` -r transcript
ol view --age=`1 day` -r --pid=15292 transcript
+ ol view --continuation
+ ol view --continuation --age=`1 month` error
'.
^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/priority.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/priority.st
index 1b72f3b54..5497ac450 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/priority.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/priority.st
@@ -1,4 +1,4 @@
-as yet unclassified
+accessing
priority
^ 50
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/shapshotDirectoryName.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/shapshotDirectoryName.st
new file mode 100644
index 000000000..adf3354ca
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/shapshotDirectoryName.st
@@ -0,0 +1,5 @@
+bu
+shapshotDirectoryName
+ SnapshotDirectoryName
+ ifNil: [ self snapshotDirectoryName: self defaultSnapshotDirectoryName ].
+ ^ SnapshotDirectoryName
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/snapshotDirectoryName..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/snapshotDirectoryName..st
new file mode 100644
index 000000000..7951ad933
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/snapshotDirectoryName..st
@@ -0,0 +1,7 @@
+bu
+snapshotDirectoryName: aDirectoryPathOrNil
+ "self snapshotDirectoryName: nil"
+
+ SnapshotDirectoryName := aDirectoryPathOrNil.
+ aDirectoryPathOrNil
+ ifNotNil: [ (ServerFileDirectory on: aDirectoryPathOrNil) assureExistence ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/snapshotDirectoryName.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/snapshotDirectoryName.st
new file mode 100644
index 000000000..5452ca1d6
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/snapshotDirectoryName.st
@@ -0,0 +1,5 @@
+bu
+snapshotDirectoryName
+ SnapshotDirectoryName
+ ifNil: [ self snapshotDirectoryName: self defaultSnapshotDirectoryName ].
+ ^ SnapshotDirectoryName
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/toolName.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/toolName.st
index bd9267895..51a4a36cd 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/toolName.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/toolName.st
@@ -1,3 +1,3 @@
-as yet unclassified
+accessing
toolName
^ 'gs'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/toolReadMe.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/toolReadMe.st
index e856acd2f..6dd04ad66 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/toolReadMe.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/class/toolReadMe.st
@@ -1,3 +1,3 @@
-as yet unclassified
+accessing
toolReadMe
^ self commandPath , ' provides gemstone system level support.'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buBackup..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buBackup..st
index 7227e21ea..539991c32 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buBackup..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buBackup..st
@@ -1,18 +1,3 @@
bu
buBackup: backupPath
- | vs sessId |
- vs := System voteState.
- sessId := System sessionIdHoldingGcLock.
- (sessId ~= 0 or: [ vs > 0 and: [ vs < 4 ] ])
- ifTrue: [ ^ 'Please wait until system is no longer voting and try again' ].
- Transcript
- cr;
- show: '---Starting backup to ' , backupPath printString , ' (';
- show: TimeStamp now asString;
- show: ')'.
- self fullBackupTo: backupPath.
- self class lastBackup: backupPath.
- Transcript
- cr;
- show: '---Finished backup to ' , LastBackup.
- ^ backupPath
\ No newline at end of file
+ ^ self buBackup: backupPath safely: false
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buBackup.safely..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buBackup.safely..st
new file mode 100644
index 000000000..52ed6fcd2
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buBackup.safely..st
@@ -0,0 +1,3 @@
+bu
+buBackup: backupPath safely: safely
+ ^ self buBackup: backupPath safely: safely uncompressed: false
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buBackup.safely.uncompressed..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buBackup.safely.uncompressed..st
new file mode 100644
index 000000000..5972fe842
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buBackup.safely.uncompressed..st
@@ -0,0 +1,26 @@
+bu
+buBackup: backupPath safely: safely uncompressed: uncompressed
+ | theBackupPath |
+ self systemIsVoting
+ ifTrue: [ ^ 'Please wait until system is no longer voting and try again' ].
+ Transcript
+ cr;
+ show: '---Starting backup to ' , backupPath printString , ' (';
+ show: TimeStamp now asString;
+ show: ')'.
+ theBackupPath := uncompressed
+ ifTrue: [ backupPath ]
+ ifFalse: [
+ | postFix |
+ postFix := '.gz'.
+ (backupPath endsWith: postFix)
+ ifTrue: [ backupPath ]
+ ifFalse: [
+ ".gz automatically added to filename during compressed backup"
+ backupPath , postFix ] ].
+ self fullBackupTo: theBackupPath safely: safely uncompressed: uncompressed.
+ self class lastBackup: theBackupPath.
+ Transcript
+ cr;
+ show: '---Finished backup to ' , LastBackup.
+ ^ theBackupPath
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buEntries..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buEntries..st
new file mode 100644
index 000000000..c174b71d5
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buEntries..st
@@ -0,0 +1,5 @@
+bu
+buEntries: backupPath
+ | backupDirPath |
+ backupDirPath := self resolveBackupPath: backupPath.
+ ^ self buEntriesForDirectory: (ServerFileDirectory on: backupDirPath)
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buEntries.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buEntries.st
new file mode 100644
index 000000000..c8afd5500
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buEntries.st
@@ -0,0 +1,3 @@
+bu
+buEntries
+ ^ self buEntries: ''
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buEntriesForDirectory..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buEntriesForDirectory..st
new file mode 100644
index 000000000..b81b38350
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buEntriesForDirectory..st
@@ -0,0 +1,5 @@
+bu
+buEntriesForDirectory: directory
+ ^ (directory entries
+ select: [ :entry | entry isDirectory not and: [ (entry name beginsWith: '.') not ] ])
+ sorted: [ :a :b | a modificationTime <= b modificationTime ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buReport.snapshot.on..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buReport.snapshot.on..st
new file mode 100644
index 000000000..8657ce1b3
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buReport.snapshot.on..st
@@ -0,0 +1,25 @@
+bu
+buReport: entries snapshot: snapshotEntries on: stream
+ stream
+ nextPutAll: 'Last Restore: ' , LastRestore asString;
+ cr;
+ nextPutAll: 'Last Backup: ' , LastBackup asString;
+ cr.
+ stream
+ nextPutAll: 'Backups:';
+ cr.
+ entries
+ do: [ :entry |
+ stream
+ nextPutAll: entry modificationTime printString , ' -- ' , entry name;
+ cr ].
+ snapshotEntries isEmpty not
+ ifTrue: [
+ stream
+ nextPutAll: 'Snapshots:';
+ cr.
+ snapshotEntries
+ do: [ :entry |
+ stream
+ nextPutAll: entry modificationTime printString , ' -- ' , entry name;
+ cr ] ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buReportOn..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buReportOn..st
new file mode 100644
index 000000000..54886b48d
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buReportOn..st
@@ -0,0 +1,9 @@
+bu
+buReportOn: stream
+ | entries snapshotEntries |
+ entries := self buEntries.
+ self options
+ at: 'dir'
+ ifPresent: [ snapshotEntries := #() ]
+ ifAbsent: [ snapshotEntries := self snapshotEntries ].
+ self buReport: entries snapshot: snapshotEntries on: stream
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buRestore..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buRestore..st
new file mode 100644
index 000000000..3dda7ba86
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buRestore..st
@@ -0,0 +1,28 @@
+bu
+buRestore: backupFilePath
+ | status count |
+ status := SystemRepository restoreStatus.
+ status = 'Restore is not active.'
+ ifFalse: [ ^ self error: 'System is already in restore mode: ' , status ].
+ System stopUserSessions.
+ count := 0.
+ [
+ | sessionCount |
+ sessionCount := 0.
+ System currentSessions
+ do: [ :index |
+ | id sessionArray |
+ sessionArray := System descriptionOfSession: index.
+ id := (sessionArray at: 1) userId.
+ (id = 'GcUser' or: [ id = 'SymbolUser' ])
+ ifFalse: [ sessionCount := sessionCount + 1 ] ].
+ count < 30 and: [ sessionCount > 1 ] ]
+ whileTrue: [
+ (Delay forSeconds: 1) wait.
+ count := count + 1 ].
+ count >= 30
+ ifTrue: [
+ ^ self
+ error:
+ 'Could not restore from backup because there are still sessions logged in.' ].
+ topez restoreFromBackup: backupFilePath "normally terminates session"
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buValidateReadableBackupFile..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buValidateReadableBackupFile..st
new file mode 100644
index 000000000..6db2d0e82
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buValidateReadableBackupFile..st
@@ -0,0 +1,3 @@
+bu
+buValidateReadableBackupFile: backupFilePath
+ ^ self copydbf: '' forFilePath: backupFilePath , ' /dev/null'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/bubackup.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/bubackup.st
index f5fa6a5f4..0f0ba494f 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/bubackup.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/bubackup.st
@@ -1,10 +1,21 @@
bu
bubackup
"
- bu [--dir=] backup
+ bu [--dir=] backup [--safely] [--uncompressed]
"
- | backupFilePath |
- self getSubcommandOptsMixedLongShort: {}.
+ | backupFilePath safely uncompressed |
+ self
+ getSubcommandOptsMixedLongShort:
+ {#('safely' nil #'none').
+ #('uncompressed' nil #'none')}.
backupFilePath := self resolveBackupFilePath.
- ^ self buBackup: backupFilePath
\ No newline at end of file
+ subOptions
+ at: 'safely'
+ ifPresent: [ :ignored | safely := true ]
+ ifAbsent: [ safely := false ].
+ subOptions
+ at: 'uncompressed'
+ ifPresent: [ :ignored | uncompressed := true ]
+ ifAbsent: [ uncompressed := false ].
+ ^ self buBackup: backupFilePath safely: safely uncompressed: uncompressed
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/budirectory.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/budirectory.st
index 255d1d4fc..4cf4c74e1 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/budirectory.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/budirectory.st
@@ -1,10 +1,17 @@
bu
budirectory
"
- bu directory []
+ bu directory [--snapshot] []
"
- self getSubcommandOptsMixedLongShort: {}.
- subArguments size > 0
- ifTrue: [ self class backupDirectoryName: (subArguments at: 1) ].
- ^ self class backupDirectoryName
\ No newline at end of file
+ self getSubcommandOptsMixedLongShort: {#('snapshot' nil #'none')}.
+ subOptions
+ at: 'snapshot'
+ ifPresent: [ :ignored |
+ subArguments size > 0
+ ifTrue: [ self class snapshotDirectoryName: (subArguments at: 1) ].
+ ^ self class snapshotDirectoryName ]
+ ifAbsent: [
+ subArguments size > 0
+ ifTrue: [ self class backupDirectoryName: (subArguments at: 1) ].
+ ^ self class backupDirectoryName ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buinfo.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buinfo.st
index 2fdaf71fb..1db2a144f 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buinfo.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buinfo.st
@@ -1,12 +1,13 @@
bu
buinfo
"
- bu [--dir=] info
+ bu [--dir=] info [--snapshot]
"
- | backupFilePath copyDbfCommand |
- self getSubcommandOptsMixedLongShort: {}.
- backupFilePath := self resolveBackupFilePath.
- copyDbfCommand := (GsFile _expandEnvVariable: 'GEMSTONE' isClient: false)
- , '/bin/copydbf -i ' , backupFilePath.
- ^ System performOnServer: copyDbfCommand
\ No newline at end of file
+ | filePath copyDbfCommand |
+ self getSubcommandOptsMixedLongShort: {#('snapshot' nil #'none')}.
+ filePath := subOptions
+ at: 'snapshot'
+ ifPresent: [ :ignored | self resolveSnapshotFilePath ]
+ ifAbsent: [ self resolveBackupFilePath ].
+ ^ self copydbf: '-i' forFilePath: filePath
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/bulist.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/bulist.st
index 232cf7c5a..d12855b4c 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/bulist.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/bulist.st
@@ -4,23 +4,12 @@ bulist
bu [--dir=] list
"
- | backupDirPath entries stream |
+ | entries stream snapshotEntries |
self getSubcommandOptsMixedLongShort: {}.
- backupDirPath := self resolveBackupPath: ''.
- entries := ((ServerFileDirectory on: backupDirPath) entries
- select: [ :entry | entry isDirectory not ])
- sorted: [ :a :b | a modificationTime <= b modificationTime ].
+ entries := self buEntries.
+ snapshotEntries := self snapshotEntries.
stream := WriteStream on: String new.
- stream
- nextPutAll: 'Last Restore: ' , LastRestore asString;
- cr;
- nextPutAll: 'Last Backup: ' , LastBackup asString;
- cr.
- entries
- do: [ :entry |
- stream
- nextPutAll: entry modificationTime printString , ' -- ' , entry name;
- cr ].
+ self buReport: entries snapshot: snapshotEntries on: stream.
^ TDCommandResult new
displayText: stream contents asText;
resultObject: entries;
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buremove.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buremove.st
index 60f181650..550a0703b 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buremove.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buremove.st
@@ -1,10 +1,13 @@
bu
buremove
"
- bu [--dir=] remove
+ bu [--dir=] remove [--snapshot]
"
- | backupFilePath |
- self getSubcommandOptsMixedLongShort: {}.
- backupFilePath := self resolveBackupFilePath.
- ^ self buRemove: backupFilePath
\ No newline at end of file
+ | filePath |
+ self getSubcommandOptsMixedLongShort: {#('snapshot' nil #'none')}.
+ filePath := subOptions
+ at: 'snapshot'
+ ifPresent: [ :ignored | self resolveSnapshotFilePath ]
+ ifAbsent: [ self resolveBackupFilePath ].
+ ^ self buRemove: filePath
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/burestore.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/burestore.st
index 1c3bded9e..336eb98eb 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/burestore.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/burestore.st
@@ -4,31 +4,7 @@ burestore
bu [--dir=] restore
"
- | backupFilePath status count |
+ | backupFilePath |
self getSubcommandOptsMixedLongShort: {}.
backupFilePath := self resolveBackupFilePath.
- status := SystemRepository restoreStatus.
- status = 'Restore is not active.'
- ifFalse: [ ^ self error: 'System is already in restore mode: ' , status ].
- System stopUserSessions.
- count := 0.
- [
- | sessionCount |
- sessionCount := 0.
- System currentSessions
- do: [ :index |
- | id sessionArray |
- sessionArray := System descriptionOfSession: index.
- id := (sessionArray at: 1) userId.
- (id = 'GcUser' or: [ id = 'SymbolUser' ])
- ifFalse: [ sessionCount := sessionCount + 1 ] ].
- count < 30 and: [ sessionCount > 1 ] ]
- whileTrue: [
- (Delay forSeconds: 1) wait.
- count := count + 1 ].
- count >= 30
- ifTrue: [
- ^ self
- error:
- 'Could not restore from backup because there are still sessions logged in.' ].
- topez restoreFromBackup: backupFilePath "normally terminates session"
\ No newline at end of file
+ self buRestore: backupFilePath
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/busnapshot.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/busnapshot.st
new file mode 100644
index 000000000..da7f1e61d
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/busnapshot.st
@@ -0,0 +1,27 @@
+bu
+busnapshot
+ "
+ bu [--dir=] snapshot [--safely] [--suspend=] \
+
+"
+
+ | suspendInMinutes snapshotPath snapshotExtension snapshots safely |
+ self
+ getSubcommandOptsMixedLongShort:
+ {#('suspend' nil #'required').
+ #('safely' nil #'none')}.
+ subOptions
+ at: 'suspend'
+ ifPresent: [ :arg | suspendInMinutes := arg asNumber ]
+ ifAbsent: [ suspendInMinutes := 15 ].
+ subOptions
+ at: 'safely'
+ ifPresent: [ :ignored | safely := true ]
+ ifAbsent: [ safely := false ].
+ snapshotPath := self resolveSnapshotPath: ''.
+ snapshotExtension := subArguments at: 1.
+ ^ self
+ snapshot: snapshotExtension
+ to: snapshotPath
+ suspendInMinutes: suspendInMinutes
+ safely: safely
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buvalidate.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buvalidate.st
new file mode 100644
index 000000000..8e8447db3
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/buvalidate.st
@@ -0,0 +1,13 @@
+bu
+buvalidate
+ "
+ bu [--dir=] validate [--snapshot]
+"
+
+ | filePath |
+ self getSubcommandOptsMixedLongShort: {#('snapshot' nil #'none')}.
+ filePath := subOptions
+ at: 'snapshot'
+ ifPresent: [ :ignored | self resolveSnapshotFilePath ]
+ ifAbsent: [ self resolveBackupFilePath ].
+ self buValidateReadableBackupFile: filePath
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/checkpointsSuspended.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/checkpointsSuspended.st
new file mode 100644
index 000000000..58863ce90
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/checkpointsSuspended.st
@@ -0,0 +1,3 @@
+private
+checkpointsSuspended
+ ^ System checkpointStatus at: 1
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/copydbf.forFilePath..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/copydbf.forFilePath..st
new file mode 100644
index 000000000..7acedecfe
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/copydbf.forFilePath..st
@@ -0,0 +1,6 @@
+bu
+copydbf: args forFilePath: filePath
+ | copyDbfCommand |
+ copyDbfCommand := (GsFile _expandEnvVariable: 'GEMSTONE' isClient: false)
+ , '/bin/copydbf ' , args , ' ' , filePath.
+ ^ self performOnServer: copyDbfCommand logging: true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/fullBackupTo..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/fullBackupTo..st
index 75fbead16..15f3106ef 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/fullBackupTo..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/fullBackupTo..st
@@ -1,18 +1,3 @@
bu
fullBackupTo: backupPath
- | backupFilename backupDirName backupDir result |
- ServerFileDirectory
- splitName: backupPath
- to: [ :dirPath :filename |
- backupDirName := dirPath.
- backupFilename := filename ].
- backupDir := ServerFileDirectory on: backupDirName.
- (backupDir fileExists: backupFilename)
- ifTrue: [ backupDir deleteFileNamed: backupFilename ].
- System commitTransaction.
- result := SystemRepository fullBackupTo: backupPath.
- result == true
- ifFalse: [ ^ self error: 'Could not complete the backup: ' , result ]. "we have been left outside of transaction in manual
- transaction mode"
- System transactionMode: #'autoBegin'.
- ^ true
\ No newline at end of file
+ ^ self fullBackupTo: backupPath safely: false
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/fullBackupTo.safely..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/fullBackupTo.safely..st
new file mode 100644
index 000000000..f77bad5cb
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/fullBackupTo.safely..st
@@ -0,0 +1,3 @@
+bu
+fullBackupTo: backupPath safely: safely
+ ^ self fullBackupTo: backupPath safely: safely uncompressed: false
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/fullBackupTo.safely.uncompressed..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/fullBackupTo.safely.uncompressed..st
new file mode 100644
index 000000000..8c5f565d5
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/fullBackupTo.safely.uncompressed..st
@@ -0,0 +1,29 @@
+bu
+fullBackupTo: backupPath safely: safely uncompressed: uncompressed
+ | backupFilename backupDirName backupDir result |
+ ServerFileDirectory
+ splitName: backupPath
+ to: [ :dirPath :filename |
+ backupDirName := dirPath.
+ backupFilename := filename ].
+ backupDir := ServerFileDirectory on: backupDirName.
+ (backupDir fileExists: backupFilename)
+ ifTrue: [
+ safely
+ ifTrue: [
+ Transcript
+ cr;
+ show:
+ 'Skipping backup, --safely specified and ' , backupFilename printString
+ , ' exists.'.
+ ^ false ].
+ backupDir deleteFileNamed: backupFilename ].
+ System commitTransaction.
+ result := uncompressed
+ ifTrue: [ SystemRepository fullBackupTo: backupPath ]
+ ifFalse: [ SystemRepository fullBackupCompressedTo: backupPath ].
+ result == true
+ ifFalse: [ ^ self error: 'Could not complete the backup: ' , result ]. "we have been left outside of transaction in manual
+ transaction mode"
+ System transactionMode: #'autoBegin'.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsFileSizeReportOn..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsFileSizeReportOn..st
new file mode 100644
index 000000000..3ff330e6d
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsFileSizeReportOn..st
@@ -0,0 +1,38 @@
+as yet unclassified
+gsFileSizeReportOn: aStream
+ "
+ gs fileSizeReport
+"
+
+ | repositoryFiles stats |
+ repositoryFiles := SystemRepository fileNames.
+ stats := SystemRepository _extentStatistics: -1.
+ 1 to: SystemRepository numberOfExtents do: [ :i |
+ | extentFile |
+ extentFile := repositoryFiles at: i.
+ aStream
+ nextPutAll: 'Extent #' , i asString;
+ cr;
+ nextPutAll: ' Filename = ' , extentFile;
+ cr;
+ nextPutAll:
+ ' File size = '
+ , (SystemRepository numToMByteString: ((stats at: i) at: 1));
+ cr;
+ nextPutAll:
+ ' Space available = '
+ , (SystemRepository numToMByteString: ((stats at: i) at: 2));
+ cr;
+ yourself ].
+ aStream
+ nextPutAll: 'Totals';
+ cr;
+ nextPutAll:
+ ' Repository size = '
+ , (SystemRepository numToMByteString: SystemRepository fileSize);
+ cr;
+ nextPutAll:
+ ' Free Space = '
+ , (SystemRepository numToMByteString: SystemRepository freeSpace);
+ cr;
+ yourself
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsMfc..1.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsMfc..1.st
new file mode 100644
index 000000000..3f0df520d
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsMfc..1.st
@@ -0,0 +1,28 @@
+as yet unclassified
+gsMfc
+ | threads wait buffer cpu |
+ self subOptions
+ at: 'noCommit'
+ ifPresent: [ :ignored | System abortTransaction ]
+ ifAbsent: [ self topez commitTransaction ].
+ self subOptions
+ at: 'threads'
+ ifPresent: [ :aNumber | threads := aNumber asNumber ]
+ ifAbsent: [ threads := 1 ].
+ self subOptions
+ at: 'wait'
+ ifPresent: [ :aNumber | wait := aNumber asNumber ]
+ ifAbsent: [ wait := 60 ].
+ self subOptions
+ at: 'buffer'
+ ifPresent: [ :aNumber | buffer := aNumber asNumber ]
+ ifAbsent: [ buffer := 128 ].
+ self subOptions
+ at: 'cpu'
+ ifPresent: [ :aNumber | cpu := aNumber asNumber ]
+ ifAbsent: [ cpu := 90 ].
+ self
+ gsMfc: threads
+ wait: wait
+ buffer: buffer
+ cpu: cpu
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsmfc.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsMfc.wait.buffer.cpu..st
similarity index 71%
rename from repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsmfc.st
rename to repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsMfc.wait.buffer.cpu..st
index d02381759..86ce4d733 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsmfc.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsMfc.wait.buffer.cpu..st
@@ -1,17 +1,16 @@
as yet unclassified
-gsmfc
- "gs mfc []"
-
- | maxThreads |
- maxThreads := 2.
- tokens size > 1
- ifTrue: [ maxThreads := (tokens at: 2) asNumber ].
+gsMfc: threads wait: wait buffer: buffer cpu: cpu
Transcript
cr;
show: '---Starting mark for collect. (';
show: TimeStamp now asString;
show: ')'.
- [ SystemRepository markForCollectionWithMaxThreads: maxThreads waitForLock: 60 ]
+ [
+ SystemRepository
+ markForCollectionWithMaxThreads: threads
+ waitForLock: wait
+ pageBufSize: buffer
+ percentCpuActiveLimit: cpu ]
on: Error , Warning
do: [ :ex |
((ex isKindOf: Warning) or: [ ex gsNumber == 3020 or: [ ex gsNumber == 3006 ] ])
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsReferencesTo.into.inMemory.max..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsReferencesTo.into.inMemory.max..st
new file mode 100644
index 000000000..b14a75604
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsReferencesTo.into.inMemory.max..st
@@ -0,0 +1,16 @@
+as yet unclassified
+gsReferencesTo: objectArray into: referencePathsForOop inMemory: inMemory max: maxRefs
+ objectArray
+ do: [ :obj |
+ | refs |
+ refs := inMemory
+ ifTrue: [ obj findReferencesInMemory ]
+ ifFalse: [
+ obj isCommitted
+ ifTrue: [
+ System abort.
+ SystemRepository
+ findAllReferencePathsToObject: obj
+ maxPaths: maxRefs ]
+ ifFalse: [ 'Object is not persistent' ] ].
+ referencePathsForOop at: obj put: refs ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsSessionDescription..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsSessionDescription..st
new file mode 100644
index 000000000..4c856ebde
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsSessionDescription..st
@@ -0,0 +1,26 @@
+as yet unclassified
+gsSessionDescription: aSessionId
+ | ar |
+ ar := System descriptionOfSession: aSessionId.
+ ^ Dictionary new
+ at: #'userProfile' put: (ar at: 1);
+ at: #'gemPid' put: (ar at: 2);
+ at: #'gemHost' put: (ar at: 3);
+ at: #'gemPrimitiveNumber' put: (ar at: 4);
+ at: #'mostRecentTransactionTime' put: (ar at: 5);
+ at: #'sessionState' put: (ar at: 6);
+ at: #'transactionMode' put: (ar at: 7);
+ at: #'onOldestCommitRecord' put: (ar at: 8);
+ at: #'sessionSerialNumber' put: (ar at: 9);
+ at: #'sessionId' put: (ar at: 10);
+ at: #'gciHostIP' put: (ar at: 11);
+ at: #'sessionPriority' put: (ar at: 12);
+ at: #'gciUniqueHostId' put: (ar at: 13);
+ at: #'mostRecetStoneRequest' put: (ar at: 14);
+ at: #'sessionLoginTime' put: (ar at: 15);
+ at: #'systemCommitsSinceSessionView' put: (ar at: 16);
+ at: #'systemDescription' put: (ar at: 17);
+ at: #'numTempObjIds' put: (ar at: 18);
+ at: #'numTempPageIds' put: (ar at: 19);
+ at: #'sessionVoteState' put: (ar at: 20);
+ yourself
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsconfiguration..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsconfiguration..st
new file mode 100644
index 000000000..f0ec0ae5b
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsconfiguration..st
@@ -0,0 +1,7 @@
+as yet unclassified
+gsconfiguration: reportType
+ reportType == #'gem'
+ ifTrue: [ ^ System gemConfigurationReport ].
+ reportType == #'stone'
+ ifTrue: [ ^ System stoneConfigurationReport ].
+ self error: 'Unknown reportType (#gem, #stone): ' , reportType printString
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsconfiguration.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsconfiguration.st
new file mode 100644
index 000000000..7834c9911
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsconfiguration.st
@@ -0,0 +1,22 @@
+as yet unclassified
+gsconfiguration
+ "
+ gs configuration [--gem|--stone]
+"
+
+ | reportDict reportType |
+ self
+ getSubcommandOptsMixedLongShort:
+ {#('gem' nil #'none').
+ #('stone' nil #'none')}.
+ self subOptions
+ at: 'gem'
+ ifPresent: [ :ignored | reportType := #'gem' ]
+ ifAbsent: [
+ self options
+ at: 'stone'
+ ifPresent: [ :ignored | reportType := #'stone' ]
+ ifAbsent: [ reportType := #'stone' ] ].
+ reportDict := self gsconfiguration: reportType.
+ reportDict edit: self topez.
+ ^ reportDict
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileOutMethods.on..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileOutMethods.on..st
index 6dcadd4c4..9d1313bc4 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileOutMethods.on..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileOutMethods.on..st
@@ -20,7 +20,7 @@ gsfileOutMethods: cls on: aStream
sel := sels at: i.
nativeStream := WriteStream on: String new.
cls class fileOutMethod: sel on: nativeStream.
- aStream nextPutAll: nativeStream contents encodeAsUTF8 asString ].
+ aStream nextPutAll: nativeStream contents encodeAsUTF8intoString ].
aStream
nextPutAll: '! ------------------- Instance methods for ';
nextPutAll: nm;
@@ -31,7 +31,7 @@ gsfileOutMethods: cls on: aStream
sel := sels at: i.
nativeStream := WriteStream on: String new.
cls fileOutMethod: sel on: nativeStream.
- aStream nextPutAll: nativeStream contents encodeAsUTF8 asString ].
+ aStream nextPutAll: nativeStream contents encodeAsUTF8intoString ].
cat := cls _classCategory. "File out the category name"
cat ~~ nil
ifTrue: [
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileSizeReport.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileSizeReport.st
new file mode 100644
index 000000000..a6290b8fc
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileSizeReport.st
@@ -0,0 +1,12 @@
+as yet unclassified
+gsfileSizeReport
+ "
+ gs fileSizeReport
+"
+
+ | stream report repositoryFiles stats |
+ stream := WriteStream on: String new.
+ self gsFileSizeReportOn: stream.
+ report := stream contents.
+ report edit: self topez.
+ ^ report
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileout.externalMethodMap.classToFilenameMap.defaultHeader..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileout.externalMethodMap.classToFilenameMap.defaultHeader..st
index 2f8e3ea0f..6721d99eb 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileout.externalMethodMap.classToFilenameMap.defaultHeader..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileout.externalMethodMap.classToFilenameMap.defaultHeader..st
@@ -35,7 +35,14 @@ gsfileout: directoryPath externalMethodMap: externalMethodMap classToFilenameMap
at: methodRef selector asSymbol
ifAbsent: [
lastFile
- ifTrue: [ #'append' ]
+ ifTrue: [
+ self halt: 'Needs an append at position marker'.
+ (sourceMap at: beh name ifAbsent: [ Dictionary new ])
+ at:
+ (beh isMeta
+ ifTrue: [ ' lastInstanceMethod' ]
+ ifFalse: [ ' lastClassMethod' ])
+ ifAbsent: [ #'append' ] ]
ifFalse: [ #'notFound' ] ].
ar ~~ #'notFound'
ifTrue: [
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileout.filename.range.in..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileout.filename.range.in..st
index 94810d963..0f7d1bbce 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileout.filename.range.in..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileout.filename.range.in..st
@@ -20,25 +20,45 @@ gsfileout: methodRef filename: filename range: ar in: directory
ifFalse: [
| src cat fileCat |
src := methodRef sourceCode withGemstoneLineEndings.
- (fileCat := ar at: 3)
- = (cat := methodRef category asString printString)
- ifTrue: [ fileStream nextPutAll: (originalSource copyFrom: 1 to: (ar at: 1)) ]
+ (ar at: 5) == #'replace'
+ ifTrue: [
+ "replace src"
+ (fileCat := ar at: 3)
+ = (cat := methodRef category asString printString)
+ ifTrue: [ fileStream nextPutAll: (originalSource copyFrom: 1 to: (ar at: 1)) ]
+ ifFalse: [
+ fileStream nextPutAll: (originalSource copyFrom: 1 to: (ar at: 4)).
+ fileStream
+ nextPutAll: 'category: ' , cat;
+ nextPut: lf.
+ methodRef classIsMeta
+ ifTrue: [ fileStream nextPutAll: 'classmethod: ' ]
+ ifFalse: [ fileStream nextPutAll: 'method: ' ].
+ fileStream
+ nextPutAll:
+ methodRef actualClass theNonMetaClass name asString;
+ nextPut: lf ].
+ fileStream nextPutAll: src.
+ src last == lf
+ ifFalse: [ fileStream nextPut: lf ] ]
ifFalse: [
- fileStream nextPutAll: (originalSource copyFrom: 1 to: (ar at: 4)).
+ "append src after the last instance/class method for the class"
+ fileStream
+ nextPut: $%;
+ nextPut: lf.
+ fileStream nextPutAll: (originalSource copyFrom: 1 to: (ar at: 2)).
fileStream
nextPutAll: 'category: ' , cat;
- nextPut: lf;
- nextPutAll: 'set compile_env: 0';
nextPut: lf.
methodRef classIsMeta
ifTrue: [ fileStream nextPutAll: 'classmethod: ' ]
ifFalse: [ fileStream nextPutAll: 'method: ' ].
fileStream
nextPutAll: methodRef actualClass theNonMetaClass name asString;
- nextPut: lf ].
- fileStream nextPutAll: src.
- src last == lf
- ifFalse: [ fileStream nextPut: lf ].
+ nextPut: lf.
+ fileStream nextPutAll: src.
+ src last == lf
+ ifFalse: [ fileStream nextPut: lf ] ].
fileStream
nextPutAll:
(originalSource copyFrom: (ar at: 2) + 1 to: originalSource size) ] ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileout.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileout.st
index bed0a2698..3cd8e5d4f 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileout.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileout.st
@@ -1,42 +1,41 @@
as yet unclassified
gsfileout
"
- gs fileout -dfilesystem-path>|--directory=
- [--class|--package|--category] ...
+ gs fileout --directory= [--class|--package|--category] ...
"
| directoryPath fileoutPairs |
self
- getOptsMixedLongShort:
- {#('directory' $d #'required').
+ getSubcommandOptsMixedLongShort:
+ {#('directory' nil #'required').
#('class' nil #'none').
#('package' nil #'none').
#('category' nil #'none')}.
- directoryPath := options at: 'directory'.
+ directoryPath := subOptions at: 'directory'.
fileoutPairs := {}.
- 1 to: arguments size by: 2 do: [ :index |
+ 1 to: subArguments size by: 2 do: [ :index |
| itemName filename |
- itemName := arguments at: index.
- filename := arguments at: index + 1.
+ itemName := subArguments at: index.
+ filename := subArguments at: index + 1.
fileoutPairs
add:
{itemName.
filename} ].
- options
+ subOptions
at: 'class'
ifPresent: [ :ignored |
self
gsfileout: directoryPath
classnameFilenamePairs: fileoutPairs
defaultHeader: '' ].
- options
+ subOptions
at: 'package'
ifPresent: [ :ignored |
self
gsfileout: directoryPath
packageFilenamePairs: fileoutPairs
defaultHeader: '' ].
- options
+ subOptions
at: 'category'
ifPresent: [ :ignored |
self
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileout.workingCopy.filename.defaultHeader..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileout.workingCopy.filename.defaultHeader..st
index 0c3ec0b73..ff9f77203 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileout.workingCopy.filename.defaultHeader..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileout.workingCopy.filename.defaultHeader..st
@@ -34,7 +34,7 @@ gsfileout: directoryPath workingCopy: workingCopy filename: filename defaultHead
methodRef actualClass
fileOutMethod: methodRef selector
on: nativeStream.
- fileStream nextPutAll: nativeStream contents encodeAsUTF8 asString ].
+ fileStream nextPutAll: nativeStream contents encodeAsUTF8intoString ].
fileStream
nextPutAll: '! ------------------- Class initializers ';
lf.
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileoutBuildMethodSourceMapFor.filename.in..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileoutBuildMethodSourceMapFor.filename.in..st
index f883bee95..40805a133 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileoutBuildMethodSourceMapFor.filename.in..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsfileoutBuildMethodSourceMapFor.filename.in..st
@@ -1,10 +1,10 @@
as yet unclassified
gsfileoutBuildMethodSourceMapFor: behavior filename: filename in: directory
- | map methodStartToken categoryStartToken |
+ | map methodStartToken classStartToken categoryStartToken startToken lastInstanceMethod lastClassMethod |
categoryStartToken := 'category:'.
- methodStartToken := 'method:'.
- behavior isMeta
- ifTrue: [ methodStartToken := 'classmethod:' ].
+ startToken := methodStartToken := 'method:'.
+ classStartToken := 'classmethod:' behavior isMeta
+ ifTrue: [ startToken := classStartToken ].
map := Dictionary new.
directory
readOnlyFileNamed: filename
@@ -21,9 +21,11 @@ gsfileoutBuildMethodSourceMapFor: behavior filename: filename in: directory
categoryTokens := line findTokens: ':'.
category := (categoryTokens at: 2) trimBoth ]
ifFalse: [
- (line beginsWith: methodStartToken)
+ ((line beginsWith: methodStartToken) or: [ line beginsWith: classStartToken ])
ifTrue: [
- | methodTokens |
+ | methodTokens targetted instance |
+ instance := line beginsWith: methodStartToken.
+ targetted := line beginsWith: startToken.
methodTokens := line findTokens: ' '.
(methodTokens size = 1
or: [ (methodTokens at: 2) trimBoth = behavior theNonMetaClass name asString ])
@@ -37,24 +39,39 @@ gsfileoutBuildMethodSourceMapFor: behavior filename: filename in: directory
chunk nextPutAll: line.
end := fileStream position.
line := fileStream nextLine ].
- [
- selector := Behavior parseSelector: chunk contents for: behavior.
- (map
- at: behavior name
- ifAbsent: [ map at: behavior name put: Dictionary new ])
- at: selector asSymbol
- put:
- {begin.
- end.
- category.
- lastCategoryPosition} ]
- on: Error , SecurityError
- do: [ :ignored |
- (ignored isKindOf: SecurityError)
- ifFalse: [
- "primitive compilation errors expected"
- false
- ifTrue: [ self halt ] ] ] ] ] ].
+ targetted
+ ifTrue: [
+ [
+ selector := Behavior parseSelector: chunk contents for: behavior.
+ (map
+ at: behavior name
+ ifAbsent: [ map at: behavior name put: Dictionary new ])
+ at: selector asSymbol
+ put:
+ {begin.
+ end.
+ category.
+ lastCategoryPosition.
+ #'replace'} ]
+ on: Error , SecurityError
+ do: [ :ignored |
+ (ignored isKindOf: SecurityError)
+ ifFalse: [
+ "primitive compilation errors expected"
+ false
+ ifTrue: [ self halt ] ] ] ]
+ ifFalse: [
+ (map at: behavior name ifAbsent: [ map at: behavior name put: Dictionary new ])
+ at:
+ (instance
+ ifTrue: [ ' lastInstanceMethod' ]
+ ifFalse: [ ' lastClassMethod' ])
+ put:
+ {begin.
+ end.
+ category.
+ lastCategoryPosition.
+ #'append'} ] ] ] ].
linePosition := fileStream position.
line := fileStream nextLine ] ].
^ map
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsgemtools.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsgemtools.st
new file mode 100644
index 000000000..0e9d5b5cd
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsgemtools.st
@@ -0,0 +1,9 @@
+as yet unclassified
+gsgemtools
+ "
+ gs gemtools
+"
+
+ TDGemToolsMenuBar new
+ topez: self topez;
+ open
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gshalt.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gshalt.st
index f393359e8..4c158dea5 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gshalt.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gshalt.st
@@ -4,17 +4,7 @@ gshalt
gs halt -m|--almostOutOfMemory=
"
- | opts |
- self
- getOptsMixedLongShort:
- {#('help' $h #'none').
- #('almostOutOfMemory' $m #'required')}.
- opts := self options.
- opts
+ self getSubcommandOptsMixedLongShort: {#('almostOutOfMemory' $m #'required')}.
+ self subOptions
at: 'almostOutOfMemory'
- ifPresent: [ :percent |
- AlmostOutOfMemory enableAtThreshold: percent asNumber.
- AlmostOutOfMemory
- addDefaultHandler: [ :ex |
- self halt.
- ex resume ] ]
\ No newline at end of file
+ ifPresent: [ :percent | self gshaltOnOutOfMemory: percent ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsmfc..2.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsmfc..2.st
new file mode 100644
index 000000000..c33cbeafd
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsmfc..2.st
@@ -0,0 +1,15 @@
+as yet unclassified
+gsmfc
+ "
+ gs mfc [--noCommit] [--threads=] [--wait=]
+ [--buffer=] [--cpu=]
+"
+
+ self
+ getSubcommandOptsMixedLongShort:
+ {#('noCommit' nil #'none').
+ #('threads' nil #'required').
+ #('wait' nil #'required').
+ #('buffer' nil #'required').
+ #('cpu' nil #'required')}.
+ self gsMfc
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsobjectFor.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsobjectFor.st
index 99bdfb1ac..eb946e181 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsobjectFor.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsobjectFor.st
@@ -1,7 +1,15 @@
as yet unclassified
gsobjectFor
- "gs objectFor "
+ "
+ gs objectFor ...
+"
- | oop |
- oop := (tokens at: 2) asNumber.
- ^ Object _objectForOop: oop
\ No newline at end of file
+ | oops |
+ self getSubcommandOptsMixedLongShort: {}.
+ oops := {}.
+ subArguments
+ do: [ :oopArg |
+ | oop |
+ oop := oopArg asNumber.
+ oops add: (Object _objectForOop: oop) ].
+ ^ oops
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsreferences.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsreferences.st
new file mode 100644
index 000000000..ce6e9a304
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsreferences.st
@@ -0,0 +1,34 @@
+as yet unclassified
+gsreferences
+ "
+ gs references [--max=] ...
+"
+
+ | referencePathsForOop max inMemory objectArray |
+ self
+ getSubcommandOptsMixedLongShort:
+ {#('max' nil #'required').
+ #('inMemory' nil #'none')}.
+ referencePathsForOop := Dictionary new.
+ subOptions
+ at: 'max'
+ ifPresent: [ :arg | max := arg asNumber ]
+ ifAbsent: [ max := 32 ].
+ subOptions
+ at: 'inMemory'
+ ifPresent: [ :arg | inMemory := true ]
+ ifAbsent: [ inMemory := false ].
+ objectArray := {}.
+ subArguments
+ do: [ :oopArg |
+ | oop |
+ oop := oopArg asNumber.
+ (Object _objectForOop: oop)
+ ifNil: [ referencePathsForOop at: oop put: 'oop not resolved' ]
+ ifNotNil: [ :obj | objectArray add: obj ] ].
+ self
+ gsReferencesTo: objectArray
+ into: referencePathsForOop
+ inMemory: inMemory
+ max: max.
+ ^ referencePathsForOop
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gssessionDescription.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gssessionDescription.st
index 9be2a2310..007ab68c5 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gssessionDescription.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gssessionDescription.st
@@ -1,31 +1,22 @@
as yet unclassified
gssessionDescription
"
- gs sessionDescription
+ gs sessionDescription [--all]|[]
"
- | description ar x |
- ar := System descriptionOfSession: System session.
- description := Dictionary new
- at: #'userProfile' put: (ar at: 1);
- at: #'gemPid' put: (ar at: 2);
- at: #'gemHost' put: (ar at: 3);
- at: #'gemPrimitiveNumber' put: (ar at: 4);
- at: #'mostRecentTransactionTime' put: (ar at: 5);
- at: #'sessionState' put: (ar at: 6);
- at: #'transactionMode' put: (ar at: 7);
- at: #'onOldestCommitRecord' put: (ar at: 8);
- at: #'sessionSerialNumber' put: (ar at: 9);
- at: #'sessionId' put: (ar at: 10);
- at: #'gciHostIP' put: (ar at: 11);
- at: #'sessionPriority' put: (ar at: 12);
- at: #'gciUniqueHostId' put: (ar at: 13);
- at: #'mostRecetStoneRequest' put: (ar at: 14);
- at: #'sessionLoginTime' put: (ar at: 15);
- at: #'systemCommitsSinceSessionView' put: (ar at: 16);
- at: #'systemDescription' put: (ar at: 17);
- at: #'numTempObjIds' put: (ar at: 18);
- at: #'numTempPageIds' put: (ar at: 19);
- at: #'sessionVoteState' put: (ar at: 20);
- yourself.
- ^ description
\ No newline at end of file
+ | result |
+ self getSubcommandOptsMixedLongShort: {#('all' nil #'none')}.
+ self subOptions
+ at: 'all'
+ ifPresent: [ :ignored |
+ result := Dictionary new.
+ System currentSessions
+ do: [ :sessionId | result at: sessionId put: (self gsSessionDescription: sessionId) ] ]
+ ifAbsent: [
+ | sessionId |
+ self subArguments size = 0
+ ifTrue: [ sessionId := System session ]
+ ifFalse: [ sessionId := (self subArguments at: 1) asNumber ].
+ result := self gsSessionDescription: sessionId ].
+ result edit: self topez.
+ ^ result
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsversion..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsversion..st
new file mode 100644
index 000000000..7a487abc9
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsversion..st
@@ -0,0 +1,11 @@
+as yet unclassified
+gsversion: reportType
+ reportType == #'client'
+ ifTrue: [ ^ System clientVersionReport ].
+ reportType == #'gem'
+ ifTrue: [ ^ System gemVersionReport ].
+ reportType == #'stone'
+ ifTrue: [ ^ System stoneVersionReport ].
+ self
+ error:
+ 'Unknown reportType (#client, #gem, #stone): ' , reportType printString
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsversion.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsversion.st
index 67a0bd6b2..879700c07 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsversion.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/gsversion.st
@@ -1,6 +1,27 @@
as yet unclassified
gsversion
- "gs version"
+ "
+ gs version [--client|--gem|--stone]
+"
- ^ System gemVersionReport
- editUsing: (TDEditorSpec topez: topez editorAspect: #'edit')
\ No newline at end of file
+ | reportDict reportType |
+ self
+ getSubcommandOptsMixedLongShort:
+ {#('client' nil #'none').
+ #('gem' nil #'none').
+ #('stone' nil #'none')}.
+ self subOptions
+ at: 'client'
+ ifPresent: [ :ignored | reportType := #'client' ]
+ ifAbsent: [
+ self subOptions
+ at: 'gem'
+ ifPresent: [ :ignored | reportType := #'gem' ]
+ ifAbsent: [
+ self subOptions
+ at: 'stone'
+ ifPresent: [ :ignored | reportType := #'stone' ]
+ ifAbsent: [ reportType := #'stone' ] ] ].
+ reportDict := self gsversion: reportType.
+ reportDict edit: self topez.
+ ^ reportDict
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olClear..1.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olClear..1.st
new file mode 100644
index 000000000..2b9879681
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olClear..1.st
@@ -0,0 +1,3 @@
+ol
+olClear
+ ^ self olClear: #() age: nil continuations: false
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olClear..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olClear..st
new file mode 100644
index 000000000..9556971a9
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olClear..st
@@ -0,0 +1,14 @@
+ol
+olClear: priorities
+ "priorities:
+ debug
+ error
+ fatal
+ info
+ interaction
+ trace
+ transcript
+ warn
+"
+
+ ^ self olClear: priorities age: nil continuations: false
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olClear.age..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olClear.age..st
new file mode 100644
index 000000000..5e2950f26
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olClear.age..st
@@ -0,0 +1,3 @@
+ol
+olClear: priorities age: aDateAndTimeOrNil
+ ^ self olClear: priorities age: aDateAndTimeOrNil continuations: false
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olClear.age.continuations..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olClear.age.continuations..st
new file mode 100644
index 000000000..c4416c7cc
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olClear.age.continuations..st
@@ -0,0 +1,32 @@
+ol
+olClear: priorities age: aDateAndTimeOrNil continuations: continuations
+ "priorities:
+ debug
+ error
+ fatal
+ info
+ interaction
+ trace
+ transcript
+ warn
+"
+
+ | objectLog |
+ (priorities isEmpty and: [ continuations not ])
+ ifTrue: [
+ "clear all - most efficient to simply reset the collections"
+ ObjectLogEntry initialize.
+ ^ true ].
+ objectLog := ObjectLogEntry objectLog.
+ objectLog copy
+ do: [ :entry |
+ ((priorities includes: entry priority)
+ or: [ priorities isEmpty and: [ continuations ] ])
+ ifTrue: [
+ ((continuations and: [ entry hasContinuation ]) or: [ continuations not ])
+ ifTrue: [
+ aDateAndTimeOrNil
+ ifNil: [ objectLog remove: entry ]
+ ifNotNil: [
+ objectLog stamp < aDateAndTimeOrNil
+ ifTrue: [ objectLog remove: entry ] ] ] ] ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olView..1.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olView..1.st
new file mode 100644
index 000000000..db69100bc
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olView..1.st
@@ -0,0 +1,8 @@
+ol
+olView
+ ^ self
+ olView: [
+ System commitTransaction.
+ ObjectLogEntry objectLog ]
+ reversed: false
+ label: 'Object log'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olView.reversed.label..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olView.reversed.label..st
new file mode 100644
index 000000000..5cafa0a50
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olView.reversed.label..st
@@ -0,0 +1,8 @@
+ol
+olView: objectLogBlock reversed: reversed label: label
+ ^ (TDObjectLogEntryBrowser new
+ topez: self topez;
+ reversed: reversed;
+ objectLogBlock: objectLogBlock;
+ windowLabel: label;
+ yourself) open
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olclear.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olclear..2.st
similarity index 51%
rename from repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olclear.st
rename to repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olclear..2.st
index 11a7d3697..0948c7992 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olclear.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olclear..2.st
@@ -1,13 +1,14 @@
ol
olclear
"
- ol clear [--inverse] [--age=] [ ... ]
+ ol clear [--inverse] [--age=] [--continuation] [ ... ]
"
- | args priorities age objectLog |
+ | args priorities age objectLog continuations |
self
getSubcommandOptsMixedLongShort:
{#('age' nil #'required').
+ #('continuation' nil #'none').
#('inverse' nil #'none')}.
args := subArguments collect: [ :priorityName | priorityName asSymbol ].
subOptions
@@ -19,21 +20,11 @@ olclear
subOptions
at: 'age'
ifPresent: [ :durationExpression | age := DateAndTime now - durationExpression evaluate ].
+ subOptions
+ at: 'continuation'
+ ifPresent: [ :ignored | continuations := true ]
+ ifAbsent: [ continuations := false ].
priorities := args
collect: [ :priorityName | ObjectLogEntry perform: priorityName ].
- priorities isEmpty
- ifTrue: [
- "clear all - most efficient to simply reset the collections"
- ObjectLogEntry initialize.
- ^ true ].
- objectLog := ObjectLogEntry objectLog.
- objectLog copy
- do: [ :entry |
- (priorities includes: entry priority)
- ifTrue: [
- age
- ifNil: [ objectLog remove: entry ]
- ifNotNil: [
- objectLog stamp < age
- ifTrue: [ objectLog remove: entry ] ] ] ].
+ self olClear: priorities age: age continuations: continuations.
^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olview.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olview..2.st
similarity index 51%
rename from repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olview.st
rename to repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olview..2.st
index 51a6bb684..f21628af3 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olview.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/olview..2.st
@@ -1,14 +1,15 @@
ol
olview
"
- ol view [--inverse] [--reverse|-r] [--age=] [--pid=]
+ ol view [--inverse] [--reverse|-r] [--age=] [--pid=] [--continuation] \
[ ... ]
"
- | args priorities reversed age pid |
+ | args priorities reversed age pid continuations |
self
getSubcommandOptsMixedLongShort:
{#('age' nil #'required').
+ #('continuation' nil #'none').
#('inverse' nil #'none').
#('pid' nil #'required').
#('reverse' $r #'none')}.
@@ -23,25 +24,29 @@ olview
at: 'reverse'
ifPresent: [ :ignored | reversed := true ]
ifAbsent: [ reversed := false ].
+ subOptions
+ at: 'continuation'
+ ifPresent: [ :ignored | continuations := true ]
+ ifAbsent: [ continuations := false ].
priorities := priorities
collect: [ :priorityName | ObjectLogEntry perform: priorityName ].
subOptions
at: 'age'
ifPresent: [ :durationExpression | age := DateAndTime now - durationExpression evaluate ].
subOptions at: 'pid' ifPresent: [ :arg | pid := arg asNumber ].
- (TDObjectLogEntryBrowser new
- topez: self topez;
- reversed: reversed;
- objectLogBlock: [
- | objectLog |
- System abortTransaction.
- objectLog := objectLog := ObjectLogEntry objectLog.
- pid
- ifNotNil: [ objectLog := objectLog select: [ :each | each pid = pid ] ].
- age
- ifNotNil: [ objectLog := objectLog select: [ :each | each stamp >= age ] ].
- priorities isEmpty
- ifFalse: [ objectLog := objectLog select: [ :each | priorities includes: each priority ] ].
- objectLog ];
- windowLabel: 'Object log ' , subCommand commandLine printString;
- yourself) open
\ No newline at end of file
+ self
+ olView: [
+ | objectLog |
+ System commitTransaction.
+ objectLog := ObjectLogEntry objectLog.
+ pid
+ ifNotNil: [ objectLog := objectLog select: [ :each | each pid = pid ] ].
+ age
+ ifNotNil: [ objectLog := objectLog select: [ :each | each stamp >= age ] ].
+ priorities isEmpty
+ ifFalse: [ objectLog := objectLog select: [ :each | priorities includes: each priority ] ].
+ continuations
+ ifTrue: [ objectLog := objectLog select: [ :each | each hasContinuation ] ].
+ objectLog ]
+ reversed: reversed
+ label: 'Object log ' , subCommand commandLine printString
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/resolveBackupPath..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/resolveBackupPath..st
index f2712c7a5..d0bd9d588 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/resolveBackupPath..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/resolveBackupPath..st
@@ -1,6 +1,6 @@
bu
resolveBackupPath: backupName
- ^ options
+ ^ self options
at: 'dir'
ifPresent: [ :dirPath | dirPath , '/' , backupName ]
ifAbsent: [ self class backupDirectoryName , '/' , backupName ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/resolveSnapshotFilePath.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/resolveSnapshotFilePath.st
new file mode 100644
index 000000000..454e62f61
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/resolveSnapshotFilePath.st
@@ -0,0 +1,3 @@
+bu
+resolveSnapshotFilePath
+ ^ self resolveSnapshotPath: (subArguments at: 1)
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/resolveSnapshotPath..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/resolveSnapshotPath..st
new file mode 100644
index 000000000..53054d679
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/resolveSnapshotPath..st
@@ -0,0 +1,6 @@
+bu
+resolveSnapshotPath: backupName
+ ^ self options
+ at: 'dir'
+ ifPresent: [ :dirPath | dirPath , '/' , backupName ]
+ ifAbsent: [ self class snapshotDirectoryName , '/' , backupName ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/snapshot.to..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/snapshot.to..st
new file mode 100644
index 000000000..3459c4396
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/snapshot.to..st
@@ -0,0 +1,3 @@
+bu
+snapshot: snapshotExtension to: snapshotPath
+ ^ self ssnapshot: snapshotExtension to: snapshotPath suspendInMinutes: 15
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/snapshot.to.suspendInMinutes..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/snapshot.to.suspendInMinutes..st
new file mode 100644
index 000000000..8d51e528a
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/snapshot.to.suspendInMinutes..st
@@ -0,0 +1,7 @@
+bu
+snapshot: snapshotExtension to: snapshotPath suspendInMinutes: suspendInMinutes
+ ^ self
+ snapshot: snapshotExtension
+ to: snapshotPath
+ suspendInMinutes: suspendInMinutes
+ safely: false
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/snapshot.to.suspendInMinutes.safely..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/snapshot.to.suspendInMinutes.safely..st
new file mode 100644
index 000000000..3d43e9260
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/snapshot.to.suspendInMinutes.safely..st
@@ -0,0 +1,55 @@
+bu
+snapshot: snapshotExtension to: snapshotPath suspendInMinutes: suspendInMinutes safely: safely
+ | snapshots |
+ [
+ self checkpointsSuspended
+ ifTrue: [ self error: 'Checkpoints currently suspended. Please wait and try again.' ].
+ System startCheckpointSync
+ ifFalse: [
+ self
+ error:
+ 'Could not start a checkpoint, See comment in System class>>startCheckpointSync for possible reasons for failure.' ].
+ System suspendCheckpointsForMinutes: suspendInMinutes.
+ snapshots := {}.
+ SystemRepository fileNames
+ do: [ :extentPath |
+ | extent extentName snapshotName snapshotFilePath performCopy |
+ extent := ServerFileDirectory on: extentPath.
+ snapshotName := extentName := extent localName.
+ (extentName endsWith: '.dbf')
+ ifTrue: [
+ snapshotName := (extentName copyFrom: 1 to: extentName size - 3)
+ , snapshotExtension ].
+ snapshotFilePath := snapshotPath , '/' , snapshotName.
+ performCopy := safely
+ ifTrue: [
+ "account for nil return value"
+ ((GsFile existsOnServer: snapshotFilePath) == true) not ]
+ ifFalse: [ true ].
+ Transcript cr.
+ performCopy
+ ifTrue: [
+ Transcript
+ show:
+ '---Starting snapshot to ' , (extentPath , ' ' , snapshotFilePath) printString
+ , '(' , TimeStamp now asString , ')'.
+ System performOnServer: 'cp ' , extentPath , ' ' , snapshotFilePath.
+ snapshots add: snapshotFilePath.
+ Transcript
+ cr;
+ tab;
+ show:
+ '---Finishing snapshot ' , TimeStamp now asString , ' -- ' , snapshotFilePath ]
+ ifFalse: [
+ self
+ inform:
+ 'The snapshot file exists, --safely present, copy skipped for: '
+ , snapshotFilePath printString ] ].
+ self checkpointsSuspended
+ ifFalse: [
+ snapshots do: [ :snapshotFilePath | GsFile removeServerFile: snapshotFilePath ].
+ self
+ error:
+ 'Checkpoints were resumed before the extent copies were completed. Extent copies have been deleted.' ] ]
+ ensure: [ System resumeCheckpoints ].
+ ^ snapshots
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/snapshotEntries..st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/snapshotEntries..st
new file mode 100644
index 000000000..08f04c5ea
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/snapshotEntries..st
@@ -0,0 +1,5 @@
+bu
+snapshotEntries: backupPath
+ | backupDirPath |
+ backupDirPath := self resolveSnapshotPath: backupPath.
+ ^ self buEntriesForDirectory: (ServerFileDirectory on: backupDirPath)
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/snapshotEntries.st b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/snapshotEntries.st
new file mode 100644
index 000000000..cbf378d38
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/instance/snapshotEntries.st
@@ -0,0 +1,3 @@
+bu
+snapshotEntries
+ ^ self snapshotEntries: ''
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/methodProperties.json b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/methodProperties.json
index 83fe87e51..fa09f9b09 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/methodProperties.json
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/methodProperties.json
@@ -1,64 +1,119 @@
{
"class" : {
- "backupDirectoryName" : "dkh 04/20/2014 20:51",
+ "backupDirectoryName" : "dkh 03/18/2015 21:01",
"backupDirectoryName:" : "dkh 05/14/2013 14:25",
"bu" : "dkh 05/15/2014 05:44",
- "buManPage" : "dkh 05/13/2014 16:29",
- "bubackupManPage" : "dkh 04/20/2014 20:49",
- "budirectoryManPage" : "dkh 04/20/2014 16:18",
- "buinfoManPage" : "dkh 04/20/2014 16:59",
- "bulistManPage" : "dkh 04/20/2014 17:07",
- "buremoveManPage" : "dkh 05/13/2014 16:28",
- "burestoreManPage" : "dkh 04/20/2014 17:00",
- "defaulBackupDirectoryName" : "dkh 04/20/2014 20:51",
- "gs" : "dkh 11/10/2013 10:29",
- "gsManPage" : "dkh 01/31/2014 14:58",
+ "buManPage" : "dkh 09/16/2015 14:06",
+ "bubackupManPage" : "dkh 09/16/2015 15:32",
+ "budirectoryManPage" : "dkh 09/16/2015 14:40",
+ "buinfoManPage" : "dkh 03/19/2015 11:40",
+ "bulistManPage" : "dkh 03/19/2015 11:44",
+ "buremoveManPage" : "dkh 09/16/2015 16:24",
+ "burestoreManPage" : "dkh 09/16/2015 15:00",
+ "busnapshotManPage" : "dkh 09/16/2015 14:42",
+ "buvalidateManPage" : "dkh 09/16/2015 16:24",
+ "defaultBackupDirectoryName" : "dkh 09/01/2015 09:47",
+ "defaultSnapshotDirectoryName" : "dkh 09/01/2015 09:47",
+ "gs" : "dkh 02/08/2015 10:49",
+ "gsManPage" : "dkh 07/05/2015 12:10",
+ "gsconfigurationManPage" : "dkh 02/07/2015 15:47",
+ "gsfileSizeReportManPage" : "dkh 02/08/2015 09:06",
+ "gsfileoutManPage" : "dkh 02/07/2015 15:47",
+ "gsgemtoolsManPage" : "dkh 02/07/2015 15:06",
+ "gshaltManPage" : "dkh 02/07/2015 15:53",
+ "gsmfcManPage" : "dkh 02/08/2015 10:47",
+ "gsobjectForManPage" : "dkh 07/04/2015 13:30",
+ "gsreferencesManPage" : "dkh 07/05/2015 12:55",
+ "gssessionDescriptionManPage" : "dkh 02/08/2015 15:24",
+ "gsversionManPage" : "dkh 02/08/2015 16:09",
"initialize" : "dkh 01/14/2014 18:41",
"installOn:" : "dkh 05/14/2013 11:19",
"lastBackup:" : "dkh 08/02/2013 12:10",
"lastRestore:" : "dkh 09/17/2013 03:41",
"ol" : "dkh 06/02/2014 19:38",
- "olManPage" : "dkh 06/03/2014 15:28",
- "olclearManPage" : "dkh 06/03/2014 15:28",
- "olviewManPage" : "dkh 06/05/2014 19:08",
+ "olManPage" : "dkh 02/07/2015 12:26",
+ "olclearManPage" : "dkh 02/07/2015 12:26",
+ "olviewManPage" : "dkh 02/07/2015 12:41",
"priority" : "dkh 05/14/2013 11:22",
+ "shapshotDirectoryName" : "dkh 03/18/2015 20:59",
+ "snapshotDirectoryName" : "dkh 03/18/2015 21:00",
+ "snapshotDirectoryName:" : "dkh 03/19/2015 14:27",
"toolName" : "dkh 05/14/2013 11:20",
"toolReadMe" : "dkh 05/14/2013 11:20" },
"instance" : {
- "buBackup:" : "dkh 06/18/2014 21:25",
+ "buBackup:" : "dkh 03/22/2015 07:43",
+ "buBackup:safely:" : "dkh 09/16/2015 14:45",
+ "buBackup:safely:uncompressed:" : "dkh 09/16/2015 15:07",
+ "buEntries" : "dkh 02/06/2015 16:25",
+ "buEntries:" : "dkh 03/19/2015 11:54",
+ "buEntriesForDirectory:" : "dkh 03/19/2015 11:55",
"buRemove:" : "dkh 05/13/2014 16:38",
- "bubackup" : "dkh 04/26/2014 13:16",
- "budirectory" : "dkh 04/26/2014 13:17",
- "buinfo" : "dkh 04/26/2014 13:17",
- "bulist" : "dkh 04/26/2014 13:17",
- "buremove" : "dkh 05/13/2014 16:26",
- "burestore" : "dkh 04/26/2014 13:17",
+ "buReport:snapshot:on:" : "dkh 03/18/2015 20:42",
+ "buReportOn:" : "dkh 03/18/2015 20:41",
+ "buRestore:" : "dkh 02/06/2015 16:17",
+ "buValidateReadableBackupFile:" : "dkh 09/16/2015 14:35",
+ "bubackup" : "dkh 09/16/2015 14:44",
+ "budirectory" : "dkh 03/19/2015 16:39",
+ "buinfo" : "dkh 09/16/2015 15:40",
+ "bulist" : "dkh 03/18/2015 20:34",
+ "buremove" : "dkh 09/16/2015 15:40",
+ "burestore" : "dkh 02/06/2015 16:18",
+ "busnapshot" : "dkh 03/22/2015 08:15",
+ "buvalidate" : "dkh 09/16/2015 15:39",
+ "checkpointsSuspended" : "dkh 03/19/2015 14:24",
+ "copydbf:forFilePath:" : "dkh 09/16/2015 14:18",
"freeSpaceLogEntry:" : "dkh 05/14/2013 13:40",
- "fullBackupTo:" : "dkh 05/14/2013 15:19",
- "gsfileOutMethods:on:" : "dkh 11/11/2013 14:35",
- "gsfileout" : "dkh 11/11/2013 16:51",
+ "fullBackupTo:" : "dkh 03/22/2015 07:42",
+ "fullBackupTo:safely:" : "dkh 09/16/2015 14:45",
+ "fullBackupTo:safely:uncompressed:" : "dkh 09/16/2015 14:49",
+ "gsFileSizeReportOn:" : "dkh 02/08/2015 09:05",
+ "gsMfc" : "dkh 02/08/2015 15:44",
+ "gsMfc:wait:buffer:cpu:" : "dkh 02/08/2015 11:06",
+ "gsReferencesTo:into:inMemory:max:" : "dkh 07/05/2015 13:40",
+ "gsSessionDescription:" : "dkh 02/08/2015 15:26",
+ "gsconfiguration" : "dkh 02/08/2015 15:41",
+ "gsconfiguration:" : "dkh 02/07/2015 10:19",
+ "gsfileOutMethods:on:" : "dkh 06/22/2015 13:41",
+ "gsfileSizeReport" : "dkh 02/08/2015 09:03",
+ "gsfileout" : "dkh 02/08/2015 15:58",
"gsfileout:categoryFilenamePairs:defaultHeader:" : "dkh 11/11/2013 12:52",
"gsfileout:classDefs:filename:defaultHeader:" : "dkh 11/11/2013 13:57",
"gsfileout:classMethods:filename:defaultHeader:" : "dkh 10/02/2013 15:41",
"gsfileout:classes:filename:defaultHeader:" : "dkh 11/11/2013 13:57",
"gsfileout:classnameFilenamePairs:" : "dkh 09/30/2013 11:59",
"gsfileout:classnameFilenamePairs:defaultHeader:" : "dkh 11/11/2013 12:57",
- "gsfileout:externalMethodMap:classToFilenameMap:defaultHeader:" : "dkh 02/07/2014 07:21",
- "gsfileout:filename:range:in:" : "dkh 12/24/2013 20:34",
+ "gsfileout:externalMethodMap:classToFilenameMap:defaultHeader:" : "dkh 06/16/2015 19:09",
+ "gsfileout:filename:range:in:" : "dkh 06/16/2015 19:29",
"gsfileout:packageFilenamePairs:defaultHeader:" : "dkh 11/11/2013 14:07",
- "gsfileout:workingCopy:filename:defaultHeader:" : "dkh 11/11/2013 14:35",
- "gsfileoutBuildMethodSourceMapFor:filename:in:" : "dkh 12/24/2013 18:53",
+ "gsfileout:workingCopy:filename:defaultHeader:" : "dkh 06/19/2015 13:19",
+ "gsfileoutBuildMethodSourceMapFor:filename:in:" : "dkh 06/16/2015 19:20",
"gsfileoutClass:header:on:" : "dkh 12/21/2013 09:49",
"gsfileoutClass:on:" : "dkh 02/07/2014 07:51",
"gsfileoutExtractHeaderFor:in:" : "dkh 10/01/2013 20:57",
- "gshalt" : "dkh 12/18/2013 19:58",
+ "gsgemtools" : "dkh 02/04/2015 11:33",
+ "gshalt" : "dkh 02/08/2015 15:44",
"gshaltOnOutOfMemory:" : "dkh 12/18/2013 20:11",
- "gsmfc" : "dkh 05/14/2013 14:01",
- "gsobjectFor" : "dkh 01/14/2014 17:17",
- "gssessionDescription" : "dkh 11/14/2013 16:54",
- "gsversion" : "dkh 01/31/2014 14:59",
+ "gsmfc" : "dkh 02/08/2015 15:44",
+ "gsobjectFor" : "dkh 07/04/2015 13:32",
+ "gsreferences" : "dkh 07/05/2015 14:03",
+ "gssessionDescription" : "dkh 02/08/2015 15:53",
+ "gsversion" : "dkh 02/08/2015 15:46",
+ "gsversion:" : "dkh 02/07/2015 10:12",
+ "olClear" : "dkh 02/07/2015 12:33",
+ "olClear:" : "dkh 02/07/2015 12:33",
+ "olClear:age:" : "dkh 02/07/2015 12:33",
+ "olClear:age:continuations:" : "dkh 02/07/2015 12:32",
"olPriorities" : "dkh 06/03/2014 15:28",
- "olclear" : "dkh 06/02/2014 21:37",
- "olview" : "dkh 06/05/2014 19:11",
+ "olView" : "dkh 02/07/2015 10:58",
+ "olView:reversed:label:" : "dkh 02/07/2015 10:54",
+ "olclear" : "dkh 02/07/2015 12:28",
+ "olview" : "dkh 02/07/2015 12:37",
"resolveBackupFilePath" : "dkh 04/26/2014 13:14",
- "resolveBackupPath:" : "dkh 04/20/2014 18:38" } }
+ "resolveBackupPath:" : "dkh 02/06/2015 15:57",
+ "resolveSnapshotFilePath" : "dkh 03/18/2015 20:26",
+ "resolveSnapshotPath:" : "dkh 03/18/2015 20:25",
+ "snapshot:to:" : "dkh 03/22/2015 08:16",
+ "snapshot:to:suspendInMinutes:" : "dkh 03/22/2015 08:15",
+ "snapshot:to:suspendInMinutes:safely:" : "dkh 08/07/2015 10:58",
+ "snapshotEntries" : "dkh 03/18/2015 20:33",
+ "snapshotEntries:" : "dkh 03/19/2015 11:54" } }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/properties.json b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/properties.json
index bf4bdddc6..33c94c339 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/properties.json
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemStoneTool.class/properties.json
@@ -6,7 +6,8 @@
"BackupDirectoryName",
"HomePath",
"LastBackup",
- "LastRestore" ],
+ "LastRestore",
+ "SnapshotDirectoryName" ],
"commentStamp" : "",
"instvars" : [
],
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/README.md b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/README.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/gemtool.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/gemtool.st
new file mode 100644
index 000000000..cc2aba33e
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/gemtool.st
@@ -0,0 +1,9 @@
+commands
+gemtool
+
+ ^ [ :topez :objIn :tokens :command |
+ self
+ performSubCommand: topez
+ objIn: objIn
+ commandOptions: {#('help' $h #'none')}
+ todeCommand: command ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/gemtoolBackupManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/gemtoolBackupManPage.st
new file mode 100644
index 000000000..b91d64526
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/gemtoolBackupManPage.st
@@ -0,0 +1,18 @@
+man pages
+gemtoolBackupManPage
+ | manPage |
+ manPage := TDManPage
+ commandName: 'bu'
+ fromString:
+ 'NAME
+ gemtool bu - Open tODE equivalent of GemTools tools
+
+SYNOPSIS
+ gemtool [--help] bu ( backup | list | restore )
+
+DESCRIPTION
+
+EXAMPLES
+ gemtool --help tools
+'.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/gemtoolFindManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/gemtoolFindManPage.st
new file mode 100644
index 000000000..fbdcf5b5d
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/gemtoolFindManPage.st
@@ -0,0 +1,17 @@
+man pages
+gemtoolFindManPage
+ | manPage |
+ manPage := TDManPage
+ commandName: 'find'
+ fromString:
+ 'NAME
+ gemtool find - Prompt-based variants of the `browse` family of commands
+
+SYNOPSIS
+ gemtool [--help] find ( class | hierarchy | references | method | senders | string )
+
+DESCRIPTION
+EXAMPLES
+ gemtool --help find
+'.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/gemtoolManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/gemtoolManPage.st
new file mode 100644
index 000000000..b6dc90358
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/gemtoolManPage.st
@@ -0,0 +1,46 @@
+man pages
+gemtoolManPage
+ | manPage |
+ manPage := TDManPage
+ commandName: 'gemtool'
+ fromString:
+ 'NAME
+ gemtool - Provide GemTools MenuBar functionality
+
+SYNOPSIS
+ gemtool [--help] []
+
+DESCRIPTION
+ gemtools implements most of the GemTools MenuBar funcationality.
+
+ The is the name of a gemtools command that invokes a
+ specific operation or tool.
+
+ Commands:
+ bu System backup and restore
+ find Prompt-based variants of the `browse` family of commands
+ menuBar Open window that bridges the gap between GemTools and tODE
+ tools Open tODE equivalent of GemTools tools
+
+ Use `gemtool --help ` to read about a specific subcommand.
+
+OPTIONS
+ --help []
+ Bring up this man page or a man page for a subCommand.
+
+EXAMPLES
+ gemtool --help
+
+ gemtool bu backup
+ gemtool bu list
+ gemtool bu restore
+
+ gemtool find class
+'.
+ manPage subCommands
+ at: 'bu' put: self gemtoolBackupManPage;
+ at: 'menuBar' put: self gemtoolMenuBarManPage;
+ at: 'find' put: self gemtoolFindManPage;
+ at: 'tools' put: self gemtoolToolsManPage;
+ yourself.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/gemtoolMenuBarManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/gemtoolMenuBarManPage.st
new file mode 100644
index 000000000..e27b988f3
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/gemtoolMenuBarManPage.st
@@ -0,0 +1,179 @@
+man pages
+gemtoolMenuBarManPage
+ | manPage |
+ manPage := TDManPage commandName: 'menuBar' fromString: 'NAME
+ gemtool menuBar - Emulate GemTools Launcher Menus
+
+SYNOPSIS
+ gemtool menuBar
+
+DESCRIPTION
+ The `gemtools` command opens a window that lists all of the menu items in the GemTools
+ Launcher menu. When you click on an item in the list, the man page for the corresponding
+ tODE command is opened. Selecting a menu item from the hierarchical menu, will perform the
+ corresponding command in the tODE environment.
+
+ The purpose of this window is to provide developers who are familiar with GemTools a
+ bridge between familiar GemTools commands and their tODE counterparts.
+
+ For best results, you should scan through the command list in the window (you might want to
+ drag the bottom of the window down to make it as tall as your display, so you can more of
+ the commands without scrolling) and click on the items that you frequently use. Then you
+ should read the man page and try typing the command in the console and experiment with the
+ various options. All man pages have an EXAMPLES section at the bottom of the page. By using
+ the `tODE it` menu item, tODE shell expressions can be executed by simply highlighting the
+ expression (similar to the Smalltalk `do it` menuitem).
+
+ If you prefer, you can use the menu associated with the window to execute the various
+ GemTools commands. As you become more familiar with tODE, I expect that you will build up
+ your own custom tool sets.
+
+ One of the priniciples of tODE is that you should be able to have equal access to command
+ functionality from:
+
+ GUI tools
+ Shell tools
+ Batch tools (topaz)
+
+ This is accomplished by by basing all GUI functionality upon shell commands (this is why you are being shown the man page for the commands that implement the various GemTools menu
+ items). tODE commands are written such that the core functionality can be called from
+ Smalltalk. The command line implementation parses the arguments and calls the same api that
+ is used by the GUI, which uses the user interface to collect information from the users.
+ Additionally, shell commands return a REAL object as the command result, so not only are
+ command results available in the shell console AFTER a command has been executed, but
+ shell commands can be called from Smalltalk using `TDTopezServer>>evaluateCommandString:`.
+ This makes it possible to run tODE shell commands from topaz.
+
+ As a simple example, let''s compare the implementation of the `Admin>Repository>List backup
+ files` gemtools menu item, to the `bu list` command. We''ll start by looking at the code
+ for TDGemToolsMenuBar>>repositoryListBackup:selectedIndex: (select the line below and use
+ the `tODE it` menu item to execute the tODE shell command in place):
+
+ browse method --spec TDGemToolsMenuBar>>repositoryListBackup:selectedIndex:
+
+ After you click on the method in the method list window, click in the method source and use
+ the `Window>cloine window` item to make a copy of the method window. Drag the method source
+ to the side of the screen.
+
+ Next bring up the source for the `bu list` command:
+
+ browse method --spec TDGemStoneTool>>bulist
+
+ It should be pretty clear that both methods are using a common API. The gemtools code is
+ invoked from a menu item, while the `bu list` code is invoked from the command line.
+
+ Using shell commands in topaz
+ -----------------------------
+ If you need to be run tODE shell scripts from a batch environment, then you would use something like the following topaz script:
+
+display oops
+level 1
+run
+| entries |
+entries := TDTopezServer evaluateCommandString: ''bu list''.
+entries collect: [:each | each name].
+%
+
+ Digging Deeper
+ --------------
+ If you are interested in seeing how the GemTools functions are implemented, start by
+ using the `Window>inspect builder` menu item to open an inspector on the window builder. In
+ the inspector, use the `Object>browse class` menu item to bring up a class browser on the
+ window builder class and poke around in the methods.
+
+ Alternatively you can `tode it` the following tODE shell expression:
+
+ browse method --spec TDGemToolsMenuBar>>menuActionSpec:
+
+ to view the menu specification for all of the commands. You can scan through the commands
+ until you find a menu spec that you are interested in, like the following:
+
+ #(''Class...'' nil #''findClass:selectedIndex:'').
+
+ select the `findClass:selectedIndex:` which is the method that is invoked when
+ the menu item is clicked and use the `Browse>implementors of it` menu item to see the
+ implementation of the method.
+
+ If you wanted to create your own tODE shell script based on one of the commands. Start
+ by creating a shell file in your /home directory and then open an editor on the script:
+
+ cd /home
+ touch sh fc
+ edit fc
+
+ Copy the method contents (without the selector) and replace the "WRITE SCRIPT HERE" with the
+ paste buffer. Replace any occurences of `self topez` with `topez` as `topez` is supplied as
+ an argument to the shell command block. Also remove any returns in the method, as non-local
+ returns are not permitted in shell command blocks. You might have to adjust the logic a bit
+ to avoid the non-local returns.
+
+ When you are happy with the script, `accept` it and then test the script by executing the
+ following:
+
+ ./fc
+
+ When you are done with your experiment you can delete the shell script:
+
+ rm fc
+
+ GemTools Launcher Menu Items
+ ----------------------------
+ Transactions
+ Commit
+ Abort
+ Auto Abort
+ Auto Commit
+ Auto Migrate
+ Find
+ Class...
+ Hierarchy Browser...
+ Class References...
+ Method...
+ String...
+ Senders...
+ Case Sensitive String...
+ Tools
+ System Browser
+ Open Workspaces
+ File Browser
+ Process Browser
+ Inspect UndefinedSymbols
+ Inspect Sent But Not Implemented
+ Test Runner
+ Monticello
+ Admin
+ Repository
+ List backup files
+ Backup
+ Restore from Backup
+ Mark for Collection
+ DoIt
+ Changed packages & methods
+ Configuration Reports
+ Gem Configuration Report
+ Stone Configuration Report
+ Empty Object Log
+ File Size Report
+ Object Log
+ User Session Report
+ Version Report
+ Client Version Report
+ Gem Version Report
+ Stone Version Report
+ Browser Preferences
+ Commit on Almost Out of Memory
+ Popup on debug
+ Send Bug Report
+ Help
+ Debug...
+ Remove Continuations from Object Log
+ Clear Object Log
+ Debug Continuations
+ Update...
+ Update GemTools Launcher
+ Update GLASS
+
+EXAMPLES
+ gemtool menuBar
+'.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/gemtoolToolsManPage.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/gemtoolToolsManPage.st
new file mode 100644
index 000000000..3f9470c12
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/gemtoolToolsManPage.st
@@ -0,0 +1,18 @@
+man pages
+gemtoolToolsManPage
+ | manPage |
+ manPage := TDManPage
+ commandName: 'tools'
+ fromString:
+ 'NAME
+ gemtool tools - Open tODE equivalent of GemTools tools
+
+SYNOPSIS
+ gemtool [--help] tools
+
+DESCRIPTION
+
+EXAMPLES
+ gemtool --help tools
+'.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/initialize.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/initialize.st
new file mode 100644
index 000000000..32dc1362b
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/initialize.st
@@ -0,0 +1,3 @@
+initialization
+initialize
+ self install
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/installOn..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/installOn..st
new file mode 100644
index 000000000..80e2d2942
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/installOn..st
@@ -0,0 +1,4 @@
+initialization
+installOn: aTDTopezServer
+ aTDTopezServer ensureChildrenExistIn: self commandPath.
+ super installOn: aTDTopezServer
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/priority.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/priority.st
new file mode 100644
index 000000000..5497ac450
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/priority.st
@@ -0,0 +1,4 @@
+accessing
+priority
+
+ ^ 50
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/toolName.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/toolName.st
new file mode 100644
index 000000000..cacafa93a
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/toolName.st
@@ -0,0 +1,3 @@
+accessing
+toolName
+ ^ 'gemtool'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/toolReadMe.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/toolReadMe.st
new file mode 100644
index 000000000..540019049
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/class/toolReadMe.st
@@ -0,0 +1,3 @@
+accessing
+toolReadMe
+ ^ self commandPath , ' provides GemTools emulation.'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolbu.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolbu.st
new file mode 100644
index 000000000..54fc53d51
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolbu.st
@@ -0,0 +1,15 @@
+bu
+gemtoolbu
+ "
+ gemtool [--help] bu ( backup | list | restore )
+"
+
+ | cmd |
+ self getSubcommandOptsMixedLongShort: {}.
+ cmd := subArguments at: 1.
+ cmd = 'backup'
+ ifTrue: [ ^ self gemtoolbuBackup ].
+ cmd = 'list'
+ ifTrue: [ ^ self gemtoolbuList ].
+ cmd = 'restore'
+ ifTrue: [ ^ self gemtoolbuRestore ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolbuBackup.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolbuBackup.st
new file mode 100644
index 000000000..627f7ed26
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolbuBackup.st
@@ -0,0 +1,22 @@
+bu
+gemtoolbuBackup
+ | buTool entries fileNames newChoice fileName backupPath |
+ buTool := self topez toolInstanceFor: 'bu'.
+ entries := buTool buEntries.
+ newChoice := 'Choose new file'.
+ fileNames := (entries collect: [ :each | each name ]) , {newChoice}.
+ fileName := (GsChoiceInteraction
+ prompt: 'Choose a file'
+ labels: fileNames
+ values: fileNames
+ lines: {(entries size)}) signal.
+ fileName == nil
+ ifTrue: [ ^ false ].
+ fileName = newChoice
+ ifTrue: [
+ fileName := (GsTextInteraction
+ prompt: 'New backup file name:'
+ template: 'backup.dbf') signal ].
+ backupPath := buTool resolveBackupPath: fileName.
+ buTool buBackup: backupPath.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolbuList.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolbuList.st
new file mode 100644
index 000000000..dc4231af9
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolbuList.st
@@ -0,0 +1,11 @@
+bu
+gemtoolbuList
+ | buTool stream |
+ buTool := self topez toolInstanceFor: 'bu'.
+ stream := WriteStream on: String new.
+ buTool buReportOn: stream.
+ stream contents
+ editUsing:
+ ((TDEditorSpec topez: topez editorAspect: #'edit')
+ windowLabel: 'Backup/Snapshots list').
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolbuRestore.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolbuRestore.st
new file mode 100644
index 000000000..3034d0379
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolbuRestore.st
@@ -0,0 +1,15 @@
+bu
+gemtoolbuRestore
+ | buTool entries fileNames fileName backupPath |
+ buTool := self topez toolInstanceFor: 'bu'.
+ entries := buTool buEntries.
+ fileNames := entries collect: [ :each | each name ].
+ fileName := (GsChoiceInteraction
+ prompt: 'Choose restore file:'
+ labels: fileNames
+ values: fileNames) signal.
+ fileName == nil
+ ifTrue: [ ^ false ].
+ backupPath := buTool resolveBackupPath: fileName.
+ buTool buRestore: backupPath.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolfind.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolfind.st
new file mode 100644
index 000000000..58a7433ff
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolfind.st
@@ -0,0 +1,21 @@
+find
+gemtoolfind
+ "
+ gemtool [--help] find ( class | hierarchy | references | method | senders | string )
+"
+
+ | cmd |
+ self getSubcommandOptsMixedLongShort: {}.
+ cmd := subArguments at: 1.
+ cmd = 'class'
+ ifTrue: [ ^ self gemtoolfindClass ].
+ cmd = 'hierarchy'
+ ifTrue: [ ^ self gemtoolfindHierarchy ].
+ cmd = 'references'
+ ifTrue: [ ^ self gemtoolfindReferences ].
+ cmd = 'method'
+ ifTrue: [ ^ self gemtoolfindMethod ].
+ cmd = 'senders'
+ ifTrue: [ ^ self gemtoolfindSenders ].
+ cmd = 'string'
+ ifTrue: [ ^ self gemtoolfindString ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolfindClass.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolfindClass.st
new file mode 100644
index 000000000..25a427c33
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolfindClass.st
@@ -0,0 +1,13 @@
+find
+gemtoolfindClass
+ | browseTool block clsNamePattern |
+ browseTool := self topez toolInstanceFor: 'browse'.
+ clsNamePattern := (GsTextInteraction
+ prompt: 'Class Name Fragment:'
+ template: 'Object') signal.
+ clsNamePattern ifNil: [ ^ false ].
+ block := [ browseTool findClass: clsNamePattern ].
+ browseTool
+ browseClassesBlock: block
+ label: 'Find class ' , clsNamePattern printString.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolfindHierarchy.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolfindHierarchy.st
new file mode 100644
index 000000000..9a4eb846d
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolfindHierarchy.st
@@ -0,0 +1,17 @@
+find
+gemtoolfindHierarchy
+ | browseTool block clsNamePattern |
+ browseTool := self topez toolInstanceFor: 'browse'.
+ clsNamePattern := (GsTextInteraction
+ prompt: 'Class Name Fragment:'
+ template: 'Object') signal.
+ clsNamePattern ifNil: [ ^ false ].
+ block := [
+ | list classNames |
+ list := browseTool findClass: clsNamePattern.
+ classNames := list collect: [ :cls | cls className asString ].
+ browseTool findClassHierarchy: classNames ].
+ browseTool
+ browseClassesBlock: block
+ label: 'Find class hierarchy' , clsNamePattern printString.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolfindMethod.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolfindMethod.st
new file mode 100644
index 000000000..0a6c9f5fa
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolfindMethod.st
@@ -0,0 +1,24 @@
+find
+gemtoolfindMethod
+ | browseTool block methodPattern matches selectors selector |
+ browseTool := self topez toolInstanceFor: 'browse'.
+ methodPattern := (GsTextInteraction
+ prompt: 'Method Name Fragment:'
+ template: '') signal.
+ methodPattern ifNil: [ ^ false ].
+ matches := browseTool findMethodNamesMatching: methodPattern.
+ selectors := (matches
+ asSortedCollection: [ :match1 :match2 | match1 moreRelevantThan: match2 ])
+ collect: [ :match | match name asString ].
+ selectors isEmpty
+ ifTrue: [ ^ false ].
+ selector := (GsChoiceInteraction
+ prompt: 'Choose a method'
+ labels: selectors
+ values: selectors) signal.
+ selector ifNil: [ ^ false ].
+ block := [ browseTool findMethod: selector ].
+ browseTool
+ browseMethodsBlock: block
+ label: 'Find method ' , methodPattern printString.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolfindReferences.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolfindReferences.st
new file mode 100644
index 000000000..555b0ae0a
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolfindReferences.st
@@ -0,0 +1,20 @@
+find
+gemtoolfindReferences
+ | browseTool block clsNamePattern list classNames className |
+ browseTool := self topez toolInstanceFor: 'browse'.
+ clsNamePattern := (GsTextInteraction
+ prompt: 'Class Name Fragment:'
+ template: 'Object') signal.
+ clsNamePattern ifNil: [ ^ false ].
+ list := browseTool findClass: clsNamePattern.
+ classNames := list collect: [ :cls | cls className asString ].
+ className := (GsChoiceInteraction
+ prompt: 'Choose a class'
+ labels: classNames
+ values: classNames) signal.
+ className ifNil: [ ^ false ].
+ block := [ browseTool findReferences: className inClass: nil searchScriptRoot: nil ].
+ browseTool
+ browseMethodsBlock: block
+ label: 'Browse references to class ' , className printString.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolfindSenders.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolfindSenders.st
new file mode 100644
index 000000000..cf8caf63f
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolfindSenders.st
@@ -0,0 +1,11 @@
+find
+gemtoolfindSenders
+ | browseTool block selector |
+ browseTool := self topez toolInstanceFor: 'browse'.
+ selector := (GsTextInteraction prompt: 'Enter Selector:' template: '') signal.
+ selector ifNil: [ ^ false ].
+ block := [ browseTool findSender: selector ].
+ browseTool
+ browseMethodsBlock: block
+ label: 'Find sender ' , selector printString.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolfindString.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolfindString.st
new file mode 100644
index 000000000..9da16528d
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolfindString.st
@@ -0,0 +1,11 @@
+find
+gemtoolfindString
+ | browseTool block substring |
+ browseTool := self topez toolInstanceFor: 'browse'.
+ substring := (GsTextInteraction prompt: 'Enter Substring' template: '') signal.
+ substring ifNil: [ ^ false ].
+ block := [ browseTool findSourceExact: substring ignoreCase: true ].
+ browseTool
+ browseMethodsBlock: block
+ label: 'Find string ' , substring printString.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolmenuBar.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolmenuBar.st
new file mode 100644
index 000000000..37c79ffe6
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtoolmenuBar.st
@@ -0,0 +1,2 @@
+menuBar
+gemtoolmenuBar
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtooltools.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtooltools.st
new file mode 100644
index 000000000..d713502ca
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/instance/gemtooltools.st
@@ -0,0 +1,2 @@
+tools
+gemtooltools
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/methodProperties.json b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/methodProperties.json
new file mode 100644
index 000000000..e00a46f40
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/methodProperties.json
@@ -0,0 +1,27 @@
+{
+ "class" : {
+ "gemtool" : "dkh 03/21/2015 11:39",
+ "gemtoolBackupManPage" : "dkh 03/21/2015 15:28",
+ "gemtoolFindManPage" : "dkh 03/21/2015 11:41",
+ "gemtoolManPage" : "dkh 03/21/2015 15:27",
+ "gemtoolMenuBarManPage" : "dkh 03/21/2015 11:37",
+ "gemtoolToolsManPage" : "dkh 03/21/2015 11:37",
+ "initialize" : "dkh 03/21/2015 11:38",
+ "installOn:" : "dkh 03/21/2015 11:39",
+ "priority" : "dkh 03/21/2015 11:37",
+ "toolName" : "dkh 03/21/2015 11:37",
+ "toolReadMe" : "dkh 03/21/2015 11:38" },
+ "instance" : {
+ "gemtoolbu" : "dkh 03/21/2015 15:31",
+ "gemtoolbuBackup" : "dkh 03/21/2015 15:33",
+ "gemtoolbuList" : "dkh 03/21/2015 15:32",
+ "gemtoolbuRestore" : "dkh 10/08/2015 12:01",
+ "gemtoolfind" : "dkh 03/21/2015 12:11",
+ "gemtoolfindClass" : "dkh 03/21/2015 12:17",
+ "gemtoolfindHierarchy" : "dkh 03/21/2015 12:17",
+ "gemtoolfindMethod" : "dkh 03/21/2015 12:17",
+ "gemtoolfindReferences" : "dkh 03/21/2015 12:18",
+ "gemtoolfindSenders" : "dkh 03/21/2015 12:18",
+ "gemtoolfindString" : "dkh 03/21/2015 12:19",
+ "gemtoolmenuBar" : "dkh 03/21/2015 11:44",
+ "gemtooltools" : "dkh 03/21/2015 11:44" } }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/properties.json b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/properties.json
new file mode 100644
index 000000000..bde043422
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolTool.class/properties.json
@@ -0,0 +1,14 @@
+{
+ "category" : "Tode-GemStone-Server-Core",
+ "classinstvars" : [
+ ],
+ "classvars" : [
+ ],
+ "commentStamp" : "",
+ "instvars" : [
+ ],
+ "name" : "TDGemToolTool",
+ "pools" : [
+ ],
+ "super" : "TDStandardTool",
+ "type" : "normal" }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/README.md b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/README.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/clientList.listElement..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/clientList.listElement..st
new file mode 100644
index 000000000..e9d218c57
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/clientList.listElement..st
@@ -0,0 +1,4 @@
+tools
+clientList: miniTool listElement: listElement
+ theMiniTool := miniTool.
+ ^ self menuMapList -> nil
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/debugRemoveObjectLogContinuations.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/debugRemoveObjectLogContinuations.selectedIndex..st
new file mode 100644
index 000000000..1c8cacfd0
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/debugRemoveObjectLogContinuations.selectedIndex..st
@@ -0,0 +1,6 @@
+menu actions
+debugRemoveObjectLogContinuations: listElement selectedIndex: index
+ | gsTool |
+ gsTool := self topez toolInstanceFor: 'gs'.
+ gsTool olClear: #() age: nil continuations: true.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/debugViewObjectLogContinuations.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/debugViewObjectLogContinuations.selectedIndex..st
new file mode 100644
index 000000000..91acdc30b
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/debugViewObjectLogContinuations.selectedIndex..st
@@ -0,0 +1,11 @@
+menu actions
+debugViewObjectLogContinuations: listElement selectedIndex: index
+ | gsTool |
+ gsTool := self topez toolInstanceFor: 'gs'.
+ gsTool
+ olView: [
+ System commitTransaction.
+ ObjectLogEntry objectLog select: [ :each | each hasContinuation ] ]
+ reversed: false
+ label: 'Object Log Continuations'.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitChangedPackagesAndMethods.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitChangedPackagesAndMethods.selectedIndex..st
new file mode 100644
index 000000000..f526501ce
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitChangedPackagesAndMethods.selectedIndex..st
@@ -0,0 +1,6 @@
+menu actions
+doitChangedPackagesAndMethods: listElement selectedIndex: index
+ | projectTool |
+ projectTool := self topez toolInstanceFor: 'project'.
+ projectTool projectsummary.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitClearObjectLog.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitClearObjectLog.selectedIndex..st
new file mode 100644
index 000000000..116dfb9d7
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitClearObjectLog.selectedIndex..st
@@ -0,0 +1,6 @@
+menu actions
+doitClearObjectLog: listElement selectedIndex: index
+ | gsTool |
+ gsTool := self topez toolInstanceFor: 'gs'.
+ gsTool olClear.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitClientVersionReport.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitClientVersionReport.selectedIndex..st
new file mode 100644
index 000000000..df712ac78
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitClientVersionReport.selectedIndex..st
@@ -0,0 +1,6 @@
+menu actions
+doitClientVersionReport: listElement selectedIndex: index
+ | gsTool |
+ gsTool := self topez toolInstanceFor: 'gs'.
+ (gsTool gsversion: #'client') edit: listElement topez.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitFileSizeReport.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitFileSizeReport.selectedIndex..st
new file mode 100644
index 000000000..a2da5a9e6
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitFileSizeReport.selectedIndex..st
@@ -0,0 +1,6 @@
+menu actions
+doitFileSizeReport: listElement selectedIndex: index
+ | gsTool |
+ gsTool := self topez toolInstanceFor: 'gs'.
+ gsTool gsfileSizeReport.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitGemConfigReport.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitGemConfigReport.selectedIndex..st
new file mode 100644
index 000000000..27be8eaad
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitGemConfigReport.selectedIndex..st
@@ -0,0 +1,6 @@
+menu actions
+doitGemConfigReport: listElement selectedIndex: index
+ | gsTool |
+ gsTool := self topez toolInstanceFor: 'gs'.
+ (gsTool gsconfiguration: #'gem') edit: listElement topez.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitGemVersionReport.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitGemVersionReport.selectedIndex..st
new file mode 100644
index 000000000..3e96bbfa7
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitGemVersionReport.selectedIndex..st
@@ -0,0 +1,6 @@
+menu actions
+doitGemVersionReport: listElement selectedIndex: index
+ | gsTool |
+ gsTool := self topez toolInstanceFor: 'gs'.
+ (gsTool gsversion: #'gem') edit: listElement topez.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitSessionReport.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitSessionReport.selectedIndex..st
new file mode 100644
index 000000000..d69c08a61
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitSessionReport.selectedIndex..st
@@ -0,0 +1,6 @@
+menu actions
+doitSessionReport: listElement selectedIndex: index
+ | gsTool |
+ gsTool := self topez toolInstanceFor: 'gs'.
+ gsTool gssessionDescription: System session.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitStoneConfigReport.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitStoneConfigReport.selectedIndex..st
new file mode 100644
index 000000000..95a36e7e1
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitStoneConfigReport.selectedIndex..st
@@ -0,0 +1,6 @@
+menu actions
+doitStoneConfigReport: listElement selectedIndex: index
+ | gsTool |
+ gsTool := self topez toolInstanceFor: 'gs'.
+ (gsTool gsconfiguration: #'stone') edit: listElement topez.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitStoneVersionReport.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitStoneVersionReport.selectedIndex..st
new file mode 100644
index 000000000..e12e660c1
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitStoneVersionReport.selectedIndex..st
@@ -0,0 +1,6 @@
+menu actions
+doitStoneVersionReport: listElement selectedIndex: index
+ | gsTool |
+ gsTool := self topez toolInstanceFor: 'gs'.
+ (gsTool gsversion: #'stone') edit: listElement topez.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitViewObjectLog.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitViewObjectLog.selectedIndex..st
new file mode 100644
index 000000000..b0ac0279a
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/doitViewObjectLog.selectedIndex..st
@@ -0,0 +1,6 @@
+menu actions
+doitViewObjectLog: listElement selectedIndex: index
+ | gsTool |
+ gsTool := self topez toolInstanceFor: 'gs'.
+ gsTool olView.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/findClass.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/findClass.selectedIndex..st
new file mode 100644
index 000000000..a9dbe22dd
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/findClass.selectedIndex..st
@@ -0,0 +1,3 @@
+menu actions
+findClass: listElement selectedIndex: index
+ ^ (self topez toolInstanceFor: 'gemtool') gemtoolfindClass
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/findClassHierarchy.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/findClassHierarchy.selectedIndex..st
new file mode 100644
index 000000000..a8f96b825
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/findClassHierarchy.selectedIndex..st
@@ -0,0 +1,3 @@
+menu actions
+findClassHierarchy: listElement selectedIndex: index
+ ^ (self topez toolInstanceFor: 'gemtool') gemtoolfindHierarchy
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/findClassReferences.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/findClassReferences.selectedIndex..st
new file mode 100644
index 000000000..27bb6eca3
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/findClassReferences.selectedIndex..st
@@ -0,0 +1,3 @@
+menu actions
+findClassReferences: listElement selectedIndex: index
+ ^ (self topez toolInstanceFor: 'gemtool') gemtoolfindReferences
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/findMethodImplementors.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/findMethodImplementors.selectedIndex..st
new file mode 100644
index 000000000..975c51642
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/findMethodImplementors.selectedIndex..st
@@ -0,0 +1,3 @@
+menu actions
+findMethodImplementors: listElement selectedIndex: index
+ ^ (self topez toolInstanceFor: 'gemtool') gemtoolfindMethod
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/findMethodSenders.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/findMethodSenders.selectedIndex..st
new file mode 100644
index 000000000..6f31e9e98
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/findMethodSenders.selectedIndex..st
@@ -0,0 +1,3 @@
+menu actions
+findMethodSenders: listElement selectedIndex: index
+ ^ (self topez toolInstanceFor: 'gemtool') gemtoolfindSenders
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/findStringCaseSensitive.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/findStringCaseSensitive.selectedIndex..st
new file mode 100644
index 000000000..a2f989922
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/findStringCaseSensitive.selectedIndex..st
@@ -0,0 +1,10 @@
+menu actions
+findStringCaseSensitive: listElement selectedIndex: index
+ | browseTool block substring |
+ browseTool := self topez toolInstanceFor: 'browse'.
+ substring := (GsTextInteraction prompt: 'Enter Substring' template: '') signal.
+ block := [ browseTool findSourceExact: substring ignoreCase: false ].
+ browseTool
+ browseMethodsBlock: block
+ label: 'Find string ' , substring printString.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/findStringNoCase.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/findStringNoCase.selectedIndex..st
new file mode 100644
index 000000000..6faed8e5c
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/findStringNoCase.selectedIndex..st
@@ -0,0 +1,3 @@
+menu actions
+findStringNoCase: listElement selectedIndex: index
+ ^ (self topez toolInstanceFor: 'gemtool') gemtoolfindString
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/help.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/help.selectedIndex..st
new file mode 100644
index 000000000..1d52f8c20
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/help.selectedIndex..st
@@ -0,0 +1,6 @@
+menu actions
+help: listElement selectedIndex: index
+ | manTool |
+ manTool := self topez toolInstanceFor: 'man'.
+ manTool manAll.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/itemSelected.listElement.selectedIndex.shiftPressed..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/itemSelected.listElement.selectedIndex.shiftPressed..st
new file mode 100644
index 000000000..75c6def44
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/itemSelected.listElement.selectedIndex.shiftPressed..st
@@ -0,0 +1,26 @@
+tools
+itemSelected: miniTool listElement: listElement selectedIndex: index shiftPressed: shiftPressed
+ | item |
+ index == 0
+ ifTrue: [ ^ true ].
+ item := self menuMapList at: index.
+ (self menuCommandMap at: item asString trimBoth ifAbsent: [ ])
+ ifNotNil: [ :ar |
+ | command |
+ command := ar at: 1.
+ (listElement topez commands at: command ifAbsent: [ ])
+ ifNil: [
+ (item trimBoth printString , ' not implemented by tODE.') asText allBold
+ editUsing:
+ ((TDEditorSpec topez: listElement topez editorAspect: #'edit')
+ windowName: #'manPage';
+ windowLabel: item trimBoth;
+ yourself) ]
+ ifNotNil: [ :commandNode |
+ | page |
+ listElement topez setFindText: (ar at: 2) isRegex: false.
+ page := commandNode manPage.
+ (page subCommands notEmpty and: [ ar size > 2 ])
+ ifTrue: [ page := page subCommands at: (ar at: 3) ifAbsent: [ page ] ].
+ page view: listElement topez ] ].
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/menuActionSpec..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/menuActionSpec..st
new file mode 100644
index 000000000..80a70eea9
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/menuActionSpec..st
@@ -0,0 +1,79 @@
+menu action specs
+menuActionSpec: miniTool
+ theMiniTool := miniTool.
+ ^ {{('Transactions'
+ ->
+ {#('Commit' nil #'transactionsCommit:selectedIndex:').
+ #('Abort' nil #'transactionsAbort:selectedIndex:').
+ #('Auto Abort' nil #'transactionsAutoAbort:selectedIndex:' nil #'neverMind' false).
+ #('Auto Commit' nil #'transactionsAutoCommit:selectedIndex:').
+ #('Auto Migrate' nil #'transactionsAutoMigrate:selectedIndex:')})}.
+ {('View'
+ ->
+ {#('New' nil #'notAvailable:selectedIndex:' nil #'neverMind' false).
+ #('Open' nil #'notAvailable:selectedIndex:' nil #'neverMind' false).
+ #('Remove' nil #'notAvailable:selectedIndex:' nil #'neverMind' false).
+ #('Session Info' nil #'notAvailable:selectedIndex:' nil #'neverMind' false)})}.
+ {('Find'
+ ->
+ {#('Class...' nil #'findClass:selectedIndex:').
+ #('Hierarchy Browser...' nil #'findClassHierarchy:selectedIndex:').
+ #('Class References...' nil #'findClassReferences:selectedIndex:').
+ #('Method...' nil #'findMethodImplementors:selectedIndex:').
+ #('String...' nil #'findStringNoCase:selectedIndex:').
+ #('Senders...' nil #'findMethodSenders:selectedIndex:').
+ #('Case Sensitive String...' nil #'findStringCaseSensitive:selectedIndex:')})}.
+ {('Tools'
+ ->
+ {#('System Browser' nil #'toolSystemBrowser:selectedIndex:').
+ #('Open Workspaces' nil #'toolOpenWorkspaces:selectedIndex:').
+ #('File Browser' nil #'notAvailable:selectedIndex:' nil #'neverMind' false).
+ #('Process Browser' nil #'toolProcessBrowser:selectedIndex:').
+ #('Inspect UndefinedSymbols' nil #'toolUndefinedSymbols:selectedIndex:').
+ #('Inspect Sent But Not Implemented' nil #'toolSentButNotImplemented:selectedIndex:').
+ #('Test Runner' nil #'toolTestClass:selectedIndex:').
+ #('Monticello' nil #'toolMonticelloBrowser:selectedIndex:')})}.
+ {('Admin'
+ ->
+ {{('Repository'
+ ->
+ {#('List backup files' nil #'repositoryListBackup:selectedIndex:').
+ #('Backup' nil #'repositoryMakeBackup:selectedIndex:').
+ #('Restore from Backup' nil #'repositoryRestoreFromBackup:selectedIndex:').
+ #('-').
+ #('Mark for Collection' nil #'repositoryMFC:selectedIndex:')})}.
+ #('-').
+ {('DoIt'
+ ->
+ {#('Changed packages & methods' nil #'doitChangedPackagesAndMethods:selectedIndex:').
+ {('Configuration Reports'
+ ->
+ {#('Gem Configuration Report' nil #'doitGemConfigReport:selectedIndex:').
+ #('Stone Configuration Report' nil #'doitStoneConfigReport:selectedIndex:')})}.
+ #('Empty Object Log' nil #'doitClearObjectLog:selectedIndex:').
+ #('File Size Report' nil #'doitFileSizeReport:selectedIndex:').
+ #('Object Log' nil #'doitViewObjectLog:selectedIndex:').
+ #('User Session Report' nil #'doitSessionReport:selectedIndex:').
+ {('Version Reports'
+ ->
+ {#('Client Version Report' nil #'doitClientVersionReport:selectedIndex:').
+ #('Gem Version Report' nil #'doitGemVersionReport:selectedIndex:').
+ #('Stone Version Report' nil #'doitStoneVersionReport:selectedIndex:')})}})}.
+ #('-').
+ #('Browser Preferences' nil #'notAvailable:selectedIndex:' nil #'neverMind' false).
+ #('-').
+ #('Commit on Almost Out of Memory' nil #'notAvailable:selectedIndex:' nil #'neverMind' false).
+ #('Popup on debug' nil #'notAvailable:selectedIndex:' nil #'neverMind' false).
+ #('-').
+ #('Send Bug Report' nil #'notAvailable:selectedIndex:' nil #'neverMind' false)})}.
+ #('Help' nil #'help:selectedIndex:').
+ {('Debug...'
+ ->
+ {#('Remove Continuations from Object Log' nil #'debugRemoveObjectLogContinuations:selectedIndex:').
+ #('Clear Object Log' nil #'doitClearObjectLog:selectedIndex:').
+ #('Debug Continuations' nil #'debugViewObjectLogContinuations:selectedIndex:')})}.
+ {('Update'
+ ->
+ {#('Update GemTools Launcher' nil #'notAvailable:selectedIndex:' nil #'neverMind' false).
+ #('Update GLASS' nil #'notAvailable:selectedIndex:' nil #'neverMind' false)})}.
+ #('-')} , self standardMenuActionSpec
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/menuCommandMap.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/menuCommandMap.st
new file mode 100644
index 000000000..d87feb93e
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/menuCommandMap.st
@@ -0,0 +1,209 @@
+accessing
+menuCommandMap
+ " slot 1 :: tODE command name
+ slot 2 :: text to highlight in man page ... typically the command or subcommand"
+
+ ^ Dictionary new
+ at: 'Commit'
+ put:
+ {'commit'.
+ 'commit'};
+ at: 'Abort'
+ put:
+ {'abort'.
+ 'abort'};
+ at: 'Auto Abort'
+ put:
+ {''.
+ ''};
+ at: 'Auto Commit'
+ put:
+ {'limit'.
+ 'autoCommit'};
+ at: 'Auto Migrate'
+ put:
+ {'limit'.
+ 'autoMigrate'};
+ at: 'Class...'
+ put:
+ {'browse'.
+ 'browse class'.
+ 'class'};
+ at: 'Hierarchy Browser...'
+ put:
+ {'browse'.
+ '--hier'.
+ 'class'};
+ at: 'Class References...'
+ put:
+ {'browse'.
+ 'browse references'.
+ 'references'};
+ at: 'Method...'
+ put:
+ {'browse'.
+ 'browse method'.
+ 'method'};
+ at: 'String...'
+ put:
+ {'browse'.
+ 'browse source'.
+ 'source'};
+ at: 'Senders...'
+ put:
+ {'browse'.
+ 'browse sender'.
+ 'sender'};
+ at: 'Case Sensitive String...'
+ put:
+ {'browse'.
+ '--case|--exact'.
+ 'source'};
+ at: 'System Browser'
+ put:
+ {'browse'.
+ '--full'.
+ 'class'};
+ at: 'Open Workspaces'
+ put:
+ {'ws'.
+ ''.
+ ''};
+ at: 'File Browser'
+ put:
+ {''.
+ ''};
+ at: 'Process Browser'
+ put:
+ {'ps'.
+ 'ps list'.
+ 'list'};
+ at: 'Inspect UndefinedSymbols'
+ put:
+ {'port'.
+ 'port undefinedSymbols'.
+ ''};
+ at: 'Inspect Sent But Not Implemented'
+ put:
+ {'port'.
+ 'port sentButNotImplemented'.
+ ''};
+ at: 'Test Runner'
+ put:
+ {'test'.
+ 'test'.
+ ''};
+ at: 'Monticello'
+ put:
+ {'mc'.
+ 'mc list'.
+ ''};
+ at: 'List backup files'
+ put:
+ {'bu'.
+ 'bu list'.
+ 'list'};
+ at: 'Backup'
+ put:
+ {'bu'.
+ 'bu backup'.
+ 'backup'};
+ at: 'Restore from Backup'
+ put:
+ {'bu'.
+ 'bu restore'.
+ 'restore'};
+ at: 'Mark for Collection'
+ put:
+ {'gs'.
+ 'gs mfc'.
+ 'mfc'};
+ at: 'Changed packages & methods'
+ put:
+ {'project'.
+ 'project summary'.
+ 'summary'};
+ at: 'Gem Configuration Report'
+ put:
+ {'gs'.
+ '--gem'.
+ 'configuration'};
+ at: 'Stone Configuration Report'
+ put:
+ {'gs'.
+ '--stone'.
+ 'configuration'};
+ at: 'Empty Object Log'
+ put:
+ {'ol'.
+ 'ol clear'.
+ 'clear'};
+ at: 'File Size Report'
+ put:
+ {'gs'.
+ 'fileSizeReport'.
+ 'fileSizeReport'};
+ at: 'Object Log'
+ put:
+ {'ol'.
+ 'ol view'.
+ 'view'};
+ at: 'User Session Report'
+ put:
+ {'gs'.
+ 'sessionDescription'.
+ 'sessionDescription'};
+ at: 'Client Version Report'
+ put:
+ {'gs'.
+ '--client'.
+ 'version'};
+ at: 'Gem Version Report'
+ put:
+ {'gs'.
+ '--gem'.
+ 'version'};
+ at: 'Stone Version Report'
+ put:
+ {'gs'.
+ '--stone'.
+ 'version'};
+ at: 'Browser Preferences'
+ put:
+ {'limit'.
+ 'limit'.
+ ''};
+ at: 'Commit on Almost Out of Memory'
+ put:
+ {'gs'.
+ 'gs halt'.
+ 'halt'};
+ at: 'Help'
+ put:
+ {'man'.
+ '--all'.
+ ''};
+ at: 'Remove Continuations from Object Log'
+ put:
+ {'ol'.
+ '--continuation'.
+ 'clear'};
+ at: 'Clear Object Log'
+ put:
+ {'ol'.
+ 'ol clear'.
+ 'clear'};
+ at: 'Debug Continuations'
+ put:
+ {'ol'.
+ '--continuation'.
+ 'view'};
+ at: 'Update GemTools Launcher'
+ put:
+ {''.
+ ''};
+ at: 'Update GLASS'
+ put:
+ {''.
+ ''};
+ yourself
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/menuMapList.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/menuMapList.st
new file mode 100644
index 000000000..4bfe4e59b
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/menuMapList.st
@@ -0,0 +1,57 @@
+accessing
+menuMapList
+ ^ {('GemTools Launcher Menu' asText allBold).
+ (' Transactions' asText allBold).
+ ' Commit'.
+ ' Abort'.
+ ' Auto Abort'.
+ ' Auto Commit'.
+ ' Auto Migrate'.
+ (' Find' asText allBold).
+ ' Class...'.
+ ' Hierarchy Browser...'.
+ ' Class References...'.
+ ' Method...'.
+ ' String...'.
+ ' Senders...'.
+ ' Case Sensitive String...'.
+ (' Tools' asText allBold).
+ ' System Browser'.
+ ' Open Workspaces'.
+ ' File Browser'.
+ ' Process Browser'.
+ ' Inspect UndefinedSymbols'.
+ ' Inspect Sent But Not Implemented'.
+ ' Test Runner'.
+ ' Monticello'.
+ (' Admin' asText allBold).
+ (' Repository' asText allBold).
+ ' List backup files'.
+ ' Backup'.
+ ' Restore from Backup'.
+ ' Mark for Collection'.
+ (' DoIt' asText allBold).
+ ' Changed packages & methods'.
+ (' Configuration Reports' asText allBold).
+ ' Gem Configuration Report'.
+ ' Stone Configuration Report'.
+ ' Empty Object Log'.
+ ' File Size Report'.
+ ' Object Log'.
+ ' User Session Report'.
+ (' Version Report' asText allBold).
+ ' Client Version Report'.
+ ' Gem Version Report'.
+ ' Stone Version Report'.
+ ' Browser Preferences'.
+ ' Commit on Almost Out of Memory'.
+ ' Popup on debug'.
+ ' Send Bug Report'.
+ ' Help'.
+ (' Debug...' asText allBold).
+ ' Remove Continuations from Object Log'.
+ ' Clear Object Log'.
+ ' Debug Continuations'.
+ (' Update...' asText allBold).
+ ' Update GemTools Launcher'.
+ ' Update GLASS'}
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/repositoryListBackup.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/repositoryListBackup.selectedIndex..st
new file mode 100644
index 000000000..cad3f2b24
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/repositoryListBackup.selectedIndex..st
@@ -0,0 +1,3 @@
+menu actions
+repositoryListBackup: listElement selectedIndex: index
+ ^ (self topez toolInstanceFor: 'gemtool') gemtoolbuList
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/repositoryMFC.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/repositoryMFC.selectedIndex..st
new file mode 100644
index 000000000..d2de17d14
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/repositoryMFC.selectedIndex..st
@@ -0,0 +1,6 @@
+menu actions
+repositoryMFC: listElement selectedIndex: index
+ | gsTool |
+ gsTool := self topez toolInstanceFor: 'gs'.
+ gsTool gsMfc.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/repositoryMakeBackup.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/repositoryMakeBackup.selectedIndex..st
new file mode 100644
index 000000000..2492aa061
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/repositoryMakeBackup.selectedIndex..st
@@ -0,0 +1,3 @@
+menu actions
+repositoryMakeBackup: listElement selectedIndex: index
+ ^ (self topez toolInstanceFor: 'gemtool') gemtoolbuBackup
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/repositoryRestoreFromBackup.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/repositoryRestoreFromBackup.selectedIndex..st
new file mode 100644
index 000000000..718042e51
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/repositoryRestoreFromBackup.selectedIndex..st
@@ -0,0 +1,3 @@
+menu actions
+repositoryRestoreFromBackup: listElement selectedIndex: index
+ ^ (self topez toolInstanceFor: 'gemtool') gemtoolbuRestore
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/toolMonticelloBrowser.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/toolMonticelloBrowser.selectedIndex..st
new file mode 100644
index 000000000..1acd18b28
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/toolMonticelloBrowser.selectedIndex..st
@@ -0,0 +1,7 @@
+menu actions
+toolMonticelloBrowser: listElement selectedIndex: index
+ | monticelloTool block |
+ monticelloTool := self topez toolInstanceFor: 'mc'.
+ block := [ monticelloTool mclist: '' ].
+ monticelloTool mcBrowseWorkingCopies: block label: 'Working Copies'.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/toolOpenWorkspaces.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/toolOpenWorkspaces.selectedIndex..st
new file mode 100644
index 000000000..d745cd515
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/toolOpenWorkspaces.selectedIndex..st
@@ -0,0 +1,14 @@
+menu actions
+toolOpenWorkspaces: listElement selectedIndex: index
+ '"Try the following tode script commands, instead:
+cd # cd to /home
+touch st sample # create a smalltalk node named sample (`man touch` for more info)
+edit sample # the workspace is saved to disk in the home dir for the current stone
+./sample # returns the result of evaluating the smalltalk in the st node
+rm sample # delete the sample node ... when done
+eval `3->4` # evaluate st from commandline
+"'
+ editUsing:
+ ((TDEditorSpec topez: topez editorAspect: #'workspace')
+ windowLabel: 'Workspace on ' , nil printString).
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/toolProcessBrowser.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/toolProcessBrowser.selectedIndex..st
new file mode 100644
index 000000000..d34e93335
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/toolProcessBrowser.selectedIndex..st
@@ -0,0 +1,6 @@
+menu actions
+toolProcessBrowser: listElement selectedIndex: index
+ | psTool |
+ psTool := self topez toolInstanceFor: 'ps'.
+ psTool pslist.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/toolSentButNotImplemented.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/toolSentButNotImplemented.selectedIndex..st
new file mode 100644
index 000000000..157384c11
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/toolSentButNotImplemented.selectedIndex..st
@@ -0,0 +1,7 @@
+menu actions
+toolSentButNotImplemented: listElement selectedIndex: index
+ | portTool |
+ portTool := self topez toolInstanceFor: 'port'.
+ portTool portsentButNotImplemented
+ editUsing: (TDEditorSpec topez: listElement topez editorAspect: #'edit').
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/toolSystemBrowser.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/toolSystemBrowser.selectedIndex..st
new file mode 100644
index 000000000..429157cdd
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/toolSystemBrowser.selectedIndex..st
@@ -0,0 +1,6 @@
+menu actions
+toolSystemBrowser: listElement selectedIndex: index
+ | browseTool |
+ browseTool := self topez toolInstanceFor: 'browse'.
+ browseTool browseClassHierarchy: Object label: 'Hierarchy for Object'.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/toolTestClass.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/toolTestClass.selectedIndex..st
new file mode 100644
index 000000000..6c99c2385
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/toolTestClass.selectedIndex..st
@@ -0,0 +1,17 @@
+menu actions
+toolTestClass: listElement selectedIndex: index
+ | findTool testTool block clsNamePattern list classNames className |
+ findTool := self topez toolInstanceFor: 'find'.
+ clsNamePattern := (GsTextInteraction
+ prompt: 'Test Class Name Fragment:'
+ template: 'Test') signal.
+ list := findTool findClass: clsNamePattern.
+ classNames := list collect: [ :cls | cls className asString ].
+ className := (GsChoiceInteraction
+ prompt: 'Choose a class'
+ labels: classNames
+ values: classNames) signal.
+ className ifNil: [ ^ false ].
+ testTool := self topez toolInstanceFor: 'test'.
+ testTool testclass: {className}.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/toolUndefinedSymbols.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/toolUndefinedSymbols.selectedIndex..st
new file mode 100644
index 000000000..04b17f151
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/toolUndefinedSymbols.selectedIndex..st
@@ -0,0 +1,7 @@
+menu actions
+toolUndefinedSymbols: listElement selectedIndex: index
+ | portTool |
+ portTool := self topez toolInstanceFor: 'port'.
+ portTool portundefinedSymbols
+ editUsing: (TDEditorSpec topez: listElement topez editorAspect: #'edit').
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/transactionsAbort.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/transactionsAbort.selectedIndex..st
new file mode 100644
index 000000000..9826c23d9
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/transactionsAbort.selectedIndex..st
@@ -0,0 +1,4 @@
+menu actions
+transactionsAbort: listElement selectedIndex: index
+ (self topez toolInstanceFor: 'abort') abort.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/transactionsAutoAbort.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/transactionsAutoAbort.selectedIndex..st
new file mode 100644
index 000000000..c729e585f
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/transactionsAutoAbort.selectedIndex..st
@@ -0,0 +1,4 @@
+menu actions
+transactionsAutoAbort: listElement selectedIndex: index
+ self notify: 'Auto Abort not available'.
+ ^ false
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/transactionsAutoCommit.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/transactionsAutoCommit.selectedIndex..st
new file mode 100644
index 000000000..e655513df
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/transactionsAutoCommit.selectedIndex..st
@@ -0,0 +1,6 @@
+menu actions
+transactionsAutoCommit: listElement selectedIndex: index
+ | tool |
+ tool := self topez toolInstanceFor: 'limit'.
+ tool limitAutoCommit: tool limitAutoCommit not.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/transactionsAutoMigrate.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/transactionsAutoMigrate.selectedIndex..st
new file mode 100644
index 000000000..19cbbd301
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/transactionsAutoMigrate.selectedIndex..st
@@ -0,0 +1,6 @@
+menu actions
+transactionsAutoMigrate: listElement selectedIndex: index
+ | tool |
+ tool := self topez toolInstanceFor: 'limit'.
+ tool limitAutoMigrate: tool limitAutoMigrate not.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/transactionsCommit.selectedIndex..st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/transactionsCommit.selectedIndex..st
new file mode 100644
index 000000000..61a7e0871
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/transactionsCommit.selectedIndex..st
@@ -0,0 +1,4 @@
+menu actions
+transactionsCommit: listElement selectedIndex: index
+ (self topez toolInstanceFor: 'commit') commit.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/windowLocation.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/windowLocation.st
new file mode 100644
index 000000000..8137016a5
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/windowLocation.st
@@ -0,0 +1,4 @@
+accessing
+windowLocation
+ windowLocation ifNil: [ windowLocation := #'classCategories' ].
+ ^ windowLocation
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/windowName.st b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/windowName.st
new file mode 100644
index 000000000..420398458
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/instance/windowName.st
@@ -0,0 +1,4 @@
+accessing
+windowName
+ windowName ifNil: [ windowName := #'gemtoolsLauncherMenu' ].
+ ^ windowName
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/methodProperties.json b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/methodProperties.json
new file mode 100644
index 000000000..52b6b1cf6
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/methodProperties.json
@@ -0,0 +1,47 @@
+{
+ "class" : {
+ },
+ "instance" : {
+ "clientList:listElement:" : "dkh 02/04/2015 12:25",
+ "debugRemoveObjectLogContinuations:selectedIndex:" : "dkh 02/07/2015 12:34",
+ "debugViewObjectLogContinuations:selectedIndex:" : "dkh 02/07/2015 12:39",
+ "doitChangedPackagesAndMethods:selectedIndex:" : "dkh 02/07/2015 09:39",
+ "doitClearObjectLog:selectedIndex:" : "dkh 02/07/2015 10:46",
+ "doitClientVersionReport:selectedIndex:" : "dkh 02/07/2015 11:24",
+ "doitFileSizeReport:selectedIndex:" : "dkh 02/08/2015 09:03",
+ "doitGemConfigReport:selectedIndex:" : "dkh 02/07/2015 10:24",
+ "doitGemVersionReport:selectedIndex:" : "dkh 02/07/2015 11:25",
+ "doitSessionReport:selectedIndex:" : "dkh 02/08/2015 15:46",
+ "doitStoneConfigReport:selectedIndex:" : "dkh 02/07/2015 10:26",
+ "doitStoneVersionReport:selectedIndex:" : "dkh 02/07/2015 11:25",
+ "doitViewObjectLog:selectedIndex:" : "dkh 02/07/2015 10:58",
+ "findClass:selectedIndex:" : "dkh 03/21/2015 15:34",
+ "findClassHierarchy:selectedIndex:" : "dkh 03/21/2015 15:34",
+ "findClassReferences:selectedIndex:" : "dkh 03/21/2015 12:04",
+ "findMethodImplementors:selectedIndex:" : "dkh 03/21/2015 12:03",
+ "findMethodSenders:selectedIndex:" : "dkh 03/21/2015 12:04",
+ "findStringCaseSensitive:selectedIndex:" : "dkh 02/06/2015 13:47",
+ "findStringNoCase:selectedIndex:" : "dkh 03/21/2015 12:05",
+ "help:selectedIndex:" : "dkh 02/07/2015 12:07",
+ "itemSelected:listElement:selectedIndex:shiftPressed:" : "dkh 02/07/2015 12:47",
+ "menuActionSpec:" : "dkh 02/07/2015 12:45",
+ "menuCommandMap" : "dkh 02/08/2015 16:24",
+ "menuMapList" : "dkh 02/07/2015 12:46",
+ "repositoryListBackup:selectedIndex:" : "dkh 03/21/2015 15:35",
+ "repositoryMFC:selectedIndex:" : "dkh 02/08/2015 11:05",
+ "repositoryMakeBackup:selectedIndex:" : "dkh 03/21/2015 15:35",
+ "repositoryRestoreFromBackup:selectedIndex:" : "dkh 03/21/2015 15:35",
+ "toolMonticelloBrowser:selectedIndex:" : "dkh 02/06/2015 15:01",
+ "toolOpenWorkspaces:selectedIndex:" : "dkh 02/07/2015 09:43",
+ "toolProcessBrowser:selectedIndex:" : "dkh 02/06/2015 14:40",
+ "toolSentButNotImplemented:selectedIndex:" : "dkh 02/06/2015 15:58",
+ "toolSystemBrowser:selectedIndex:" : "dkh 02/06/2015 14:11",
+ "toolTestClass:selectedIndex:" : "dkh 02/06/2015 14:57",
+ "toolUndefinedSymbols:selectedIndex:" : "dkh 02/06/2015 15:58",
+ "transactionsAbort:selectedIndex:" : "dkh 02/04/2015 13:53",
+ "transactionsAutoAbort:selectedIndex:" : "dkh 02/04/2015 13:01",
+ "transactionsAutoCommit:selectedIndex:" : "dkh 02/04/2015 13:54",
+ "transactionsAutoMigrate:selectedIndex:" : "dkh 02/04/2015 13:54",
+ "transactionsCommit:selectedIndex:" : "dkh 02/04/2015 13:54",
+ "windowLocation" : "dkh 02/04/2015 12:11",
+ "windowName" : "dkh 02/04/2015 12:22" } }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/properties.json b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/properties.json
new file mode 100644
index 000000000..2c4439019
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGemToolsMenuBar.class/properties.json
@@ -0,0 +1,14 @@
+{
+ "category" : "Tode-GemStone-Server-Core",
+ "classinstvars" : [
+ ],
+ "classvars" : [
+ ],
+ "commentStamp" : "",
+ "instvars" : [
+ ],
+ "name" : "TDGemToolsMenuBar",
+ "pools" : [
+ ],
+ "super" : "TDStandardToolBuilder",
+ "type" : "normal" }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitConflict.class/instance/common.st b/repository/Tode-GemStone-Server-Core.package/TDGitConflict.class/instance/common.st
index b9e11cfef..fc0ed57e0 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGitConflict.class/instance/common.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitConflict.class/instance/common.st
@@ -1,4 +1,4 @@
accessing
common
- ^common
+ ^common
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitDiff.class/instance/asMergeOperation.st b/repository/Tode-GemStone-Server-Core.package/TDGitDiff.class/instance/asMergeOperation.st
new file mode 100644
index 000000000..5267a32e5
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitDiff.class/instance/asMergeOperation.st
@@ -0,0 +1,30 @@
+converting
+asMergeOperation
+ | them us stage view |
+ us := source.
+ them := destination.
+ view := #'usVsThem'.
+ editOp = 'A'
+ ifTrue: [ stage := #'added' ]
+ ifFalse: [
+ editOp = 'D'
+ ifTrue: [ stage := #'deleted' ]
+ ifFalse: [
+ editOp = 'M'
+ ifTrue: [ stage := #'modified' ]
+ ifFalse: [
+ editOp = 'U'
+ ifTrue: [
+ "unmerged ... shouldn't see this"
+ self error: 'Unexpected edit operation: ' , editOp printString ]
+ ifFalse: [ self error: 'Unknown edit operation: ' , editOp printString ] ] ] ].
+ ^ TDGitMergeOperation new
+ baseDirectory: self baseDirectory;
+ filePath: self filePath;
+ us: us;
+ ancestor: nil;
+ them: them;
+ stage: stage;
+ view: view;
+ resolved: true;
+ yourself
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitDiff.class/instance/source..st b/repository/Tode-GemStone-Server-Core.package/TDGitDiff.class/instance/source..st
index 8bb297255..7fbaeb318 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGitDiff.class/instance/source..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitDiff.class/instance/source..st
@@ -1,5 +1,7 @@
accessing
source: aString
(aString beginsWith: 'fatal')
- ifTrue: [ self halt ].
+ ifTrue: [
+ self inform: 'Error extracting source: ' , aString.
+ source := aString ].
source := aString
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitDiff.class/methodProperties.json b/repository/Tode-GemStone-Server-Core.package/TDGitDiff.class/methodProperties.json
index ffa9dc7d8..0b6e1a650 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGitDiff.class/methodProperties.json
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitDiff.class/methodProperties.json
@@ -2,6 +2,7 @@
"class" : {
},
"instance" : {
+ "asMergeOperation" : "dkh 01/26/2015 13:14",
"baseDirectory" : "dkh 10/06/2013 10:38",
"baseDirectory:" : "dkh 05/10/2014 19:01",
"destination" : "dkh 05/30/2014 07:07",
@@ -11,7 +12,6 @@
"editOp:" : "dkh 05/10/2014 19:17",
"filePath" : "dkh 10/06/2013 10:38",
"filePath:" : "dkh 05/10/2014 19:01",
- "hasFileTreeSmalltalkSource" : "dkh 05/21/2014 10:42",
"hasSameSource" : "dkh 05/29/2014 21:12",
"label" : "dkh 05/10/2014 20:11",
"mergeSource" : "dkh 05/29/2014 21:12",
@@ -20,5 +20,5 @@
"printText" : "dkh 05/10/2014 19:41",
"selectedSource" : "dkh 05/29/2014 21:12",
"source" : "dkh 05/30/2014 07:06",
- "source:" : "dkh 05/29/2014 21:11",
+ "source:" : "dkh 09/07/2015 10:40",
"windowLabel" : "dkh 10/06/2013 10:39" } }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/README.md b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/README.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/ancestor..st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/ancestor..st
new file mode 100644
index 000000000..7b3160432
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/ancestor..st
@@ -0,0 +1,3 @@
+accessing
+ancestor: anObject
+ ancestor := anObject
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/ancestor.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/ancestor.st
new file mode 100644
index 000000000..feea4c807
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/ancestor.st
@@ -0,0 +1,4 @@
+accessing
+ancestor
+ ancestor ifNil: [ ^ '' ].
+ ^ ancestor
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/applyTo..st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/applyTo..st
new file mode 100644
index 000000000..9dbcebb05
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/applyTo..st
@@ -0,0 +1,9 @@
+merge
+applyTo: aTDGitMerger
+ self selectedSourceRaw
+ ifNil: [ aTDGitMerger gitTool gitrmIn: self baseDirectory with: ' -rf ' , self filePath ]
+ ifNotNil: [ :src |
+ self baseDirectory
+ forceNewFileNamed: self filePath
+ do: [ :fileStream | fileStream nextPutAll: src withUnixLineEndings encodeAsUTF8intoString ].
+ aTDGitMerger gitTool gitaddIn: self baseDirectory with: self filePath ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/baseDirectory..st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/baseDirectory..st
new file mode 100644
index 000000000..79a1248d6
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/baseDirectory..st
@@ -0,0 +1,3 @@
+as yet unclassified
+baseDirectory: aDirectory
+ baseDirectory := aDirectory
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/baseDirectory.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/baseDirectory.st
new file mode 100644
index 000000000..6e52f3eef
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/baseDirectory.st
@@ -0,0 +1,3 @@
+as yet unclassified
+baseDirectory
+ ^ baseDirectory
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/calculateStage.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/calculateStage.st
new file mode 100644
index 000000000..9bb09edd6
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/calculateStage.st
@@ -0,0 +1,14 @@
+as yet unclassified
+calculateStage
+ ancestor
+ ifNil: [
+ us
+ ifNil: [
+ them
+ ifNil: [ self error: 'illegal stage, ancestor, us and them nil' ]
+ ifNotNil: [ ^ #'adddedByThem' ] ]
+ ifNotNil: [ them ifNil: [ ^ #'addedByUs' ] ifNotNil: [ ^ #'addedByBoth' ] ] ]
+ ifNotNil: [
+ us
+ ifNil: [ them ifNil: [ ^ #'deletedByBoth' ] ifNotNil: [ ^ #'deletedByUs' ] ]
+ ifNotNil: [ them ifNil: [ ^ #'deletedByThem' ] ifNotNil: [ ^ #'modifiedByBoth' ] ] ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/defaultSelection.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/defaultSelection.st
new file mode 100644
index 000000000..e3607d4c2
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/defaultSelection.st
@@ -0,0 +1,23 @@
+as yet unclassified
+defaultSelection
+ self stage == #'adddedByThem'
+ ifTrue: [ ^ #'them' ].
+ stage == #'addedByUs'
+ ifTrue: [ ^ #'us' ].
+ stage == #'addedByBoth'
+ ifTrue: [ ^ #'us' ].
+ stage == #'deletedByBoth'
+ ifTrue: [ ^ #'us' ].
+ stage == #'deletedByUs'
+ ifTrue: [ ^ #'us' ].
+ stage == #'deletedByThem'
+ ifTrue: [ ^ #'us' ].
+ stage == #'modifiedByBoth'
+ ifTrue: [ ^ #'us' ].
+ stage == #'added'
+ ifTrue: [ ^ #'them' ].
+ stage == #'deleted'
+ ifTrue: [ ^ #'them' ].
+ stage == #'modified'
+ ifTrue: [ ^ #'them' ].
+ self error: 'unknown stage'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/defaultView.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/defaultView.st
new file mode 100644
index 000000000..191712eac
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/defaultView.st
@@ -0,0 +1,19 @@
+as yet unclassified
+defaultView
+ self resolved
+ ifTrue: [ ^ self selection ].
+ self stage == #'adddedByThem'
+ ifTrue: [ ^ #'ancestorVsThem' ].
+ stage == #'addedByUs'
+ ifTrue: [ ^ #'ancestorVsUs' ].
+ stage == #'addedByBoth'
+ ifTrue: [ ^ #'usVsThem' ].
+ stage == #'deletedByBoth'
+ ifTrue: [ ^ #'ancestorVsUs' ].
+ stage == #'deletedByUs'
+ ifTrue: [ ^ #'ancestorVsUs' ].
+ stage == #'deletedByThem'
+ ifTrue: [ ^ #'ancestorVsThem' ].
+ stage == #'modifiedByBoth'
+ ifTrue: [ ^ #'usVsThem' ].
+ self error: 'unknown stage'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/editDefinition.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/editDefinition.st
new file mode 100644
index 000000000..af02268de
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/editDefinition.st
@@ -0,0 +1,4 @@
+accessing
+editDefinition
+ editDefinition ifNil: [ ^ '' ].
+ ^ editDefinition
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/elementSource..st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/elementSource..st
new file mode 100644
index 000000000..0bd910060
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/elementSource..st
@@ -0,0 +1,4 @@
+as yet unclassified
+elementSource: aSTONString
+ self editDefinition: (self objectSerializer fromString: aSTONString) asString.
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/filePath..st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/filePath..st
new file mode 100644
index 000000000..903d0839d
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/filePath..st
@@ -0,0 +1,3 @@
+as yet unclassified
+filePath: aString
+ filePath := aString
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/filePath.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/filePath.st
new file mode 100644
index 000000000..c25ec9993
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/filePath.st
@@ -0,0 +1,3 @@
+as yet unclassified
+filePath
+ ^ filePath
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/formatSource..st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/formatSource..st
new file mode 100644
index 000000000..03cde17fb
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/formatSource..st
@@ -0,0 +1,16 @@
+as yet unclassified
+formatSource: methodSource
+ | ar firstLine stSource |
+ self hasFileTreeSmalltalkSource
+ ifFalse: [
+ "from a non-st file ... formatting not possible"
+ ^ methodSource ].
+ methodSource isEmpty
+ ifTrue: [ ^ methodSource ].
+ ar := self stSource: methodSource.
+ firstLine := ar at: 1.
+ stSource := (ar at: 2) trimBoth.
+ firstLine
+ add: String cr;
+ add: (super formatSource: stSource).
+ ^ firstLine
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/hasFileTreeSmalltalkSource.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/hasFileTreeSmalltalkSource.st
new file mode 100644
index 000000000..f7db0f986
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/hasFileTreeSmalltalkSource.st
@@ -0,0 +1,3 @@
+testing
+hasFileTreeSmalltalkSource
+ ^ self filePath endsWith: '.st'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/hasTag.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/hasTag.st
new file mode 100644
index 000000000..042e56931
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/hasTag.st
@@ -0,0 +1,3 @@
+testing
+hasTag
+ ^ self tag notNil
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/imageMethodSource.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/imageMethodSource.st
new file mode 100644
index 000000000..25e449592
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/imageMethodSource.st
@@ -0,0 +1,10 @@
+smalltalk source
+imageMethodSource
+ | beh src sel cat |
+ self methodClass isNil
+ ifTrue: [ ^ '' ].
+ beh := self methodBehavior.
+ sel := self methodSelector.
+ src := (beh compiledMethodAt: sel ifAbsent: [ ^ '' ]) sourceString.
+ cat := beh categoryOfSelector: sel.
+ ^ cat , String lf , src
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/initEditDefinition.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/initEditDefinition.st
new file mode 100644
index 000000000..577cd195e
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/initEditDefinition.st
@@ -0,0 +1,3 @@
+as yet unclassified
+initEditDefinition
+ editDefinition ifNil: [ self editDefinition: self selectedSourceRaw ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/isConflict.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/isConflict.st
new file mode 100644
index 000000000..de40dc61d
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/isConflict.st
@@ -0,0 +1,3 @@
+testing
+isConflict
+ ^ (#(#'added' #'modified' #'deleted') includes: self stage) not
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/labelString.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/labelString.st
new file mode 100644
index 000000000..41d064f0a
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/labelString.st
@@ -0,0 +1,24 @@
+accessing
+labelString
+ labelString ifNotNil: [ ^ labelString ].
+ self stage == #'adddedByThem'
+ ifTrue: [ ^ 'added by them ' ].
+ stage == #'addedByUs'
+ ifTrue: [ ^ 'added by us ' ].
+ stage == #'addedByBoth'
+ ifTrue: [ ^ 'both added ' ].
+ stage == #'deletedByBoth'
+ ifTrue: [ ^ 'both deleted ' ].
+ stage == #'deletedByUs'
+ ifTrue: [ ^ 'deleted by us ' ].
+ stage == #'deletedByThem'
+ ifTrue: [ ^ 'deleted by them' ].
+ stage == #'modifiedByBoth'
+ ifTrue: [ ^ 'both modified ' ].
+ stage == #'added'
+ ifTrue: [ ^ 'added ' ].
+ stage == #'deleted'
+ ifTrue: [ ^ 'deleted ' ].
+ stage == #'modified'
+ ifTrue: [ ^ 'modified ' ].
+ self error: 'unknown stage'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/mergeSource..st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/mergeSource..st
new file mode 100644
index 000000000..908203482
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/mergeSource..st
@@ -0,0 +1,3 @@
+as yet unclassified
+mergeSource: aStringOrText
+ self shouldNotImplement
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/mergeSource.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/mergeSource.st
new file mode 100644
index 000000000..64e8161ab
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/mergeSource.st
@@ -0,0 +1,65 @@
+as yet unclassified
+mergeSource
+ | diff from to |
+ view == #'ancestor'
+ ifTrue: [ ^ self ancestor ].
+ view == #'us'
+ ifTrue: [ ^ self us ].
+ view == #'them'
+ ifTrue: [ ^ self them ].
+ view == #'custom'
+ ifTrue: [ ^ self editDefinition ].
+ view == #'ancestorVsUs'
+ ifTrue: [
+ from := self ancestor.
+ to := self us ]
+ ifFalse: [
+ view == #'ancestorVsThem'
+ ifTrue: [
+ from := self ancestor.
+ to := self them ]
+ ifFalse: [
+ view == #'ancestorVsCustom'
+ ifTrue: [
+ from := self ancestor.
+ to := self editDefinition ]
+ ifFalse: [
+ view == #'usVsThem'
+ ifTrue: [
+ from := self us.
+ to := self them ]
+ ifFalse: [
+ view == #'usVsCustom'
+ ifTrue: [
+ from := self us.
+ to := self editDefinition ]
+ ifFalse: [
+ view == #'themVsUs'
+ ifTrue: [
+ from := self them.
+ to := self us ]
+ ifFalse: [
+ view == #'themVsCustom'
+ ifTrue: [
+ from := self them.
+ to := self editDefinition ]
+ ifFalse: [
+ view == #'imageVsCustom'
+ ifTrue: [
+ from := self imageMethodSource.
+ to := self editDefinition ]
+ ifFalse: [
+ view == #'imageVsThem'
+ ifTrue: [
+ from := self imageMethodSource.
+ to := self them ]
+ ifFalse: [
+ view == #'imageVsUs'
+ ifTrue: [
+ from := self imageMethodSource.
+ to := self us ]
+ ifFalse: [ self error: 'Unknown view: ' , view printString ] ] ] ] ] ] ] ] ] ].
+ diff := TextDiffBuilder
+ from: (self formatSource: from) withSqueakLineEndings
+ to: (self formatSource: to) withSqueakLineEndings.
+ ^ diff buildTextPatch
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/methodSelector.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/methodSelector.st
new file mode 100644
index 000000000..f6fc502d6
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/methodSelector.st
@@ -0,0 +1,19 @@
+smalltalk source
+methodSelector
+ | methodSource methodNode src |
+ self hasFileTreeSmalltalkSource
+ ifFalse: [ ^ nil ].
+ src := ancestor notNil
+ ifTrue: [ ancestor ]
+ ifFalse: [
+ us notNil
+ ifTrue: [ us ]
+ ifFalse: [
+ them notNil
+ ifTrue: [ them ]
+ ifFalse: [ self error: 'no method ... no selector' ] ] ].
+ methodSource := (self stSource: src) at: 2.
+ methodNode := RBParser
+ parseMethod: methodSource
+ onError: [ :err :pos | ^ nil ].
+ ^ methodNode selector
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/printOn..st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/printOn..st
new file mode 100644
index 000000000..56d5a2b3c
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/printOn..st
@@ -0,0 +1,10 @@
+as yet unclassified
+printOn: aStream
+ aStream
+ nextPutAll: self labelString;
+ space;
+ nextPutAll: self filePath.
+ self resolved
+ ifTrue: [ aStream nextPutAll: ' (' , self selection asString , ')' ].
+ self hasTag
+ ifTrue: [ aStream nextPutAll: ' [' , self tag , ']' ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/printText.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/printText.st
new file mode 100644
index 000000000..331c19aff
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/printText.st
@@ -0,0 +1,5 @@
+as yet unclassified
+printText
+ ^ Text
+ string: self printString
+ attribute: (TextEmphasis perform: self selectionAttribute)
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/resolveSafely.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/resolveSafely.st
new file mode 100644
index 000000000..bcaf299ef
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/resolveSafely.st
@@ -0,0 +1,4 @@
+as yet unclassified
+resolveSafely
+ self stage == #'deletedByBoth'
+ ifTrue: [ ^ self selectUs ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/resolved..st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/resolved..st
new file mode 100644
index 000000000..fd824cc22
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/resolved..st
@@ -0,0 +1,3 @@
+as yet unclassified
+resolved: aBool
+ resolved := aBool
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/resolved.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/resolved.st
new file mode 100644
index 000000000..388ffecc4
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/resolved.st
@@ -0,0 +1,4 @@
+as yet unclassified
+resolved
+ resolved ifNil: [ resolved := false ].
+ ^ resolved
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/safeToIgnore.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/safeToIgnore.st
new file mode 100644
index 000000000..b4e4edf39
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/safeToIgnore.st
@@ -0,0 +1,5 @@
+testing
+safeToIgnore
+ (self resolved and: [ self stage == #'deletedByBoth' ])
+ ifTrue: [ ^ us = them ].
+ ^ false
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectAncestor.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectAncestor.st
new file mode 100644
index 000000000..7883115e1
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectAncestor.st
@@ -0,0 +1,3 @@
+as yet unclassified
+selectAncestor
+ self selection: #'ancestor'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectCustom.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectCustom.st
new file mode 100644
index 000000000..179f511b6
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectCustom.st
@@ -0,0 +1,3 @@
+as yet unclassified
+selectCustom
+ self selection: #'custom'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectDeletion.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectDeletion.st
new file mode 100644
index 000000000..e6d28f01f
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectDeletion.st
@@ -0,0 +1,5 @@
+as yet unclassified
+selectDeletion
+ self
+ editDefinition: nil;
+ selectCustom
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectThem.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectThem.st
new file mode 100644
index 000000000..1d9c6b802
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectThem.st
@@ -0,0 +1,3 @@
+as yet unclassified
+selectThem
+ self selection: #'them'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectUs.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectUs.st
new file mode 100644
index 000000000..2765cc761
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectUs.st
@@ -0,0 +1,3 @@
+as yet unclassified
+selectUs
+ self selection: #'us'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectedSource.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectedSource.st
new file mode 100644
index 000000000..31d0c7d30
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectedSource.st
@@ -0,0 +1,13 @@
+as yet unclassified
+selectedSource
+ ^ self selection == #'ancestor'
+ ifTrue: [ self ancestor ]
+ ifFalse: [
+ self selection == #'us'
+ ifTrue: [ self us ]
+ ifFalse: [
+ self selection == #'them'
+ ifTrue: [ self them ]
+ ifFalse: [
+ "#'custom'"
+ self editDefinition ] ] ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectedSourceRaw.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectedSourceRaw.st
new file mode 100644
index 000000000..3c20cc7fb
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectedSourceRaw.st
@@ -0,0 +1,13 @@
+as yet unclassified
+selectedSourceRaw
+ ^ self selection == #'ancestor'
+ ifTrue: [ ancestor ]
+ ifFalse: [
+ self selection == #'us'
+ ifTrue: [ us ]
+ ifFalse: [
+ self selection == #'them'
+ ifTrue: [ them ]
+ ifFalse: [
+ "#'custom'"
+ editDefinition ] ] ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selection..st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selection..st
new file mode 100644
index 000000000..79ac66492
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selection..st
@@ -0,0 +1,5 @@
+accessing
+selection: aSymbol
+ self resolved: true.
+ super selection: aSymbol.
+ self view: aSymbol
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectionAttribute.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectionAttribute.st
new file mode 100644
index 000000000..b7bb93f5a
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/selectionAttribute.st
@@ -0,0 +1,20 @@
+as yet unclassified
+selectionAttribute
+ ^ self resolved
+ ifTrue: [
+ (self selection == #'us' or: [ selection == #'them' ])
+ ifTrue: [
+ self selectedSourceRaw isNil
+ ifTrue: [ #'struckOut' ]
+ ifFalse: [
+ self isConflict
+ ifTrue: [ #'underlined' ]
+ ifFalse: [ #'normal' ] ] ]
+ ifFalse: [
+ self selectedSourceRaw isNil
+ ifTrue: [ #'struckOut' ]
+ ifFalse: [
+ self isConflict
+ ifTrue: [ #'italic' ]
+ ifFalse: [ #'normal' ] ] ] ]
+ ifFalse: [ #'bold' ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/stage..st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/stage..st
new file mode 100644
index 000000000..72def2d2e
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/stage..st
@@ -0,0 +1,3 @@
+accessing
+stage: aSymbol
+ stage := aSymbol
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/stage.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/stage.st
new file mode 100644
index 000000000..6f85fb93f
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/stage.st
@@ -0,0 +1,4 @@
+accessing
+stage
+ stage ifNil: [ stage := self calculateStage ].
+ ^ stage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/stonContents..st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/stonContents..st
new file mode 100644
index 000000000..9ab51978a
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/stonContents..st
@@ -0,0 +1,3 @@
+as yet unclassified
+stonContents: aSTONString
+ self elementSource: (self objectSerializer fromString: aSTONString)
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/tag..st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/tag..st
new file mode 100644
index 000000000..b35f73f74
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/tag..st
@@ -0,0 +1,3 @@
+accessing
+tag: anObject
+ tag := anObject
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/tag.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/tag.st
new file mode 100644
index 000000000..bf918dd4a
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/tag.st
@@ -0,0 +1,3 @@
+accessing
+tag
+ ^ tag
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/them..st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/them..st
new file mode 100644
index 000000000..fd9bd4882
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/them..st
@@ -0,0 +1,3 @@
+accessing
+them: anObject
+ them := anObject
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/them.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/them.st
new file mode 100644
index 000000000..dc04de4a2
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/them.st
@@ -0,0 +1,4 @@
+accessing
+them
+ them ifNil: [ ^ '' ].
+ ^ them
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/us..st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/us..st
new file mode 100644
index 000000000..d32b44d8b
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/us..st
@@ -0,0 +1,3 @@
+accessing
+us: anObject
+ us := anObject
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/us.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/us.st
new file mode 100644
index 000000000..c12ffda34
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/us.st
@@ -0,0 +1,4 @@
+accessing
+us
+ us ifNil: [ ^ '' ].
+ ^ us
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/view..st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/view..st
new file mode 100644
index 000000000..aa7d4539c
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/view..st
@@ -0,0 +1,3 @@
+accessing
+view: anObject
+ view := anObject
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/view.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/view.st
new file mode 100644
index 000000000..f470f8bf9
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/view.st
@@ -0,0 +1,4 @@
+accessing
+view
+ view ifNil: [ view := self defaultView ].
+ ^ view
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewAncestor.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewAncestor.st
new file mode 100644
index 000000000..51368fd07
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewAncestor.st
@@ -0,0 +1,3 @@
+as yet unclassified
+viewAncestor
+ self view: #'ancestor'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewAncestorVsCustom.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewAncestorVsCustom.st
new file mode 100644
index 000000000..7f8f5376c
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewAncestorVsCustom.st
@@ -0,0 +1,3 @@
+as yet unclassified
+viewAncestorVsCustom
+ self view: #'ancestorVsCustom'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewAncestorVsThem.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewAncestorVsThem.st
new file mode 100644
index 000000000..d960f065f
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewAncestorVsThem.st
@@ -0,0 +1,3 @@
+as yet unclassified
+viewAncestorVsThem
+ self view: #'ancestorVsThem'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewAncestorVsUs.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewAncestorVsUs.st
new file mode 100644
index 000000000..904eac135
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewAncestorVsUs.st
@@ -0,0 +1,3 @@
+as yet unclassified
+viewAncestorVsUs
+ self view: #'ancestorVsUs'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewCustom.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewCustom.st
new file mode 100644
index 000000000..bfc14e0c3
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewCustom.st
@@ -0,0 +1,3 @@
+as yet unclassified
+viewCustom
+ self view: #'custom'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewImageVsCustom.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewImageVsCustom.st
new file mode 100644
index 000000000..71a13d782
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewImageVsCustom.st
@@ -0,0 +1,3 @@
+as yet unclassified
+viewImageVsCustom
+ self view: #'imageVsCustom'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewImageVsThem.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewImageVsThem.st
new file mode 100644
index 000000000..cb6c7795b
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewImageVsThem.st
@@ -0,0 +1,3 @@
+as yet unclassified
+viewImageVsThem
+ self view: #'imageVsThem'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewImageVsUs.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewImageVsUs.st
new file mode 100644
index 000000000..2b785e4a7
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewImageVsUs.st
@@ -0,0 +1,3 @@
+as yet unclassified
+viewImageVsUs
+ self view: #'imageVsUs'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewThem.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewThem.st
new file mode 100644
index 000000000..9ca8c654f
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewThem.st
@@ -0,0 +1,3 @@
+as yet unclassified
+viewThem
+ self view: #'them'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewThemVsCustom.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewThemVsCustom.st
new file mode 100644
index 000000000..6ef4a7c24
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewThemVsCustom.st
@@ -0,0 +1,3 @@
+as yet unclassified
+viewThemVsCustom
+ self view: #'themVsCustom'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewThemVsUs.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewThemVsUs.st
new file mode 100644
index 000000000..db797137b
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewThemVsUs.st
@@ -0,0 +1,3 @@
+as yet unclassified
+viewThemVsUs
+ self view: #'themVsUs'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewUs.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewUs.st
new file mode 100644
index 000000000..156f98c5d
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewUs.st
@@ -0,0 +1,3 @@
+as yet unclassified
+viewUs
+ self view: #'us'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewUsVsCustom.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewUsVsCustom.st
new file mode 100644
index 000000000..661a19ae6
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewUsVsCustom.st
@@ -0,0 +1,3 @@
+as yet unclassified
+viewUsVsCustom
+ self view: #'usVsCustom'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewUsVsThem.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewUsVsThem.st
new file mode 100644
index 000000000..3b9130d8e
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/viewUsVsThem.st
@@ -0,0 +1,3 @@
+as yet unclassified
+viewUsVsThem
+ self view: #'usVsThem'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/windowLabel.st b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/windowLabel.st
new file mode 100644
index 000000000..090797dfe
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/instance/windowLabel.st
@@ -0,0 +1,8 @@
+as yet unclassified
+windowLabel
+ ^ '['
+ ,
+ (self resolved
+ ifTrue: [ 'selection: ' , self selection asString printString ]
+ ifFalse: [ 'selection: none' ])
+ , ' view: ' , self view asString printString , '] ' , self printString
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/methodProperties.json b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/methodProperties.json
new file mode 100644
index 000000000..60bde4a9c
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/methodProperties.json
@@ -0,0 +1,67 @@
+{
+ "class" : {
+ },
+ "instance" : {
+ "ancestor" : "dkh 01/24/2015 14:59",
+ "ancestor:" : "dkh 01/24/2015 14:59",
+ "applyTo:" : "dkh 09/07/2015 11:10",
+ "baseDirectory" : "dkh 01/24/2015 14:54",
+ "baseDirectory:" : "dkh 01/24/2015 14:54",
+ "calculateStage" : "dkh 01/24/2015 21:38",
+ "defaultSelection" : "dkh 01/26/2015 13:16",
+ "defaultView" : "dkh 01/30/2015 14:26",
+ "editDefinition" : "dkh 01/30/2015 14:31",
+ "elementSource:" : "dkh 06/25/2015 15:50",
+ "filePath" : "dkh 01/24/2015 14:54",
+ "filePath:" : "dkh 01/24/2015 14:54",
+ "formatSource:" : "dkh 01/25/2015 10:01",
+ "hasFileTreeSmalltalkSource" : "dkh 01/25/2015 09:59",
+ "hasTag" : "dkh 01/26/2015 13:34",
+ "imageMethodSource" : "dkh 01/30/2015 11:11",
+ "initEditDefinition" : "dkh 01/30/2015 14:37",
+ "isConflict" : "dkh 01/25/2015 15:05",
+ "labelString" : "dkh 01/25/2015 14:35",
+ "mergeSource" : "dkh 01/30/2015 11:13",
+ "mergeSource:" : "dkh 01/25/2015 08:59",
+ "methodSelector" : "dkh 01/30/2015 11:10",
+ "printOn:" : "dkh 01/26/2015 13:39",
+ "printText" : "dkh 01/24/2015 14:54",
+ "resolveSafely" : "dkh 01/30/2015 14:10",
+ "resolved" : "dkh 01/24/2015 14:54",
+ "resolved:" : "dkh 01/24/2015 14:54",
+ "safeToIgnore" : "dkh 01/30/2015 14:03",
+ "selectAncestor" : "dkh 01/24/2015 19:38",
+ "selectCustom" : "dkh 01/30/2015 14:27",
+ "selectDeletion" : "dkh 01/30/2015 14:34",
+ "selectThem" : "dkh 01/24/2015 19:39",
+ "selectUs" : "dkh 01/24/2015 19:38",
+ "selectedSource" : "dkh 01/25/2015 08:04",
+ "selectedSourceRaw" : "dkh 01/25/2015 15:00",
+ "selection:" : "dkh 01/25/2015 09:02",
+ "selectionAttribute" : "dkh 01/25/2015 15:10",
+ "stage" : "dkh 01/24/2015 21:34",
+ "stage:" : "dkh 01/25/2015 14:33",
+ "stonContents:" : "dkh 06/25/2015 15:50",
+ "tag" : "dkh 01/26/2015 13:25",
+ "tag:" : "dkh 01/26/2015 13:25",
+ "them" : "dkh 01/24/2015 15:08",
+ "them:" : "dkh 01/24/2015 15:08",
+ "us" : "dkh 01/24/2015 15:09",
+ "us:" : "dkh 01/24/2015 15:09",
+ "view" : "dkh 01/25/2015 08:39",
+ "view:" : "dkh 01/25/2015 07:48",
+ "viewAncestor" : "dkh 01/25/2015 08:23",
+ "viewAncestorVsCustom" : "dkh 01/25/2015 08:24",
+ "viewAncestorVsThem" : "dkh 01/25/2015 08:24",
+ "viewAncestorVsUs" : "dkh 01/25/2015 08:24",
+ "viewCustom" : "dkh 01/25/2015 08:23",
+ "viewImageVsCustom" : "dkh 01/30/2015 11:14",
+ "viewImageVsThem" : "dkh 01/30/2015 10:43",
+ "viewImageVsUs" : "dkh 01/30/2015 11:13",
+ "viewThem" : "dkh 01/25/2015 08:53",
+ "viewThemVsCustom" : "dkh 01/25/2015 08:25",
+ "viewThemVsUs" : "dkh 01/25/2015 08:25",
+ "viewUs" : "dkh 01/25/2015 08:53",
+ "viewUsVsCustom" : "dkh 01/25/2015 08:25",
+ "viewUsVsThem" : "dkh 01/25/2015 08:26",
+ "windowLabel" : "dkh 01/25/2015 08:36" } }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/properties.json b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/properties.json
new file mode 100644
index 000000000..b0b9ed433
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitMergeOperation.class/properties.json
@@ -0,0 +1,25 @@
+{
+ "category" : "Tode-GemStone-Server-Core",
+ "classinstvars" : [
+ ],
+ "classvars" : [
+ ],
+ "commentStamp" : "",
+ "instvars" : [
+ "baseDirectory",
+ "filePath",
+ "source",
+ "common",
+ "destination",
+ "resolved",
+ "ancestor",
+ "us",
+ "them",
+ "stage",
+ "view",
+ "tag" ],
+ "name" : "TDGitMergeOperation",
+ "pools" : [
+ ],
+ "super" : "TDMergeOperation",
+ "type" : "normal" }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitTool.class/instance/gitcatfile.gitObjectId..st b/repository/Tode-GemStone-Server-Core.package/TDGitTool.class/instance/gitcatfile.gitObjectId..st
new file mode 100644
index 000000000..e8baea967
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitTool.class/instance/gitcatfile.gitObjectId..st
@@ -0,0 +1,9 @@
+as yet unclassified
+gitcatfile: gitRepoDirectory gitObjectId: gitObjectId
+ | result |
+ result := self
+ performGitCommand: 'cat-file'
+ in: gitRepoDirectory
+ with: '-p ' , gitObjectId
+ logging: false.
+ ^ result
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitTool.class/instance/gitmergetool.mergerCompletionBlock.mergerAbortBlock.windowLabel..st b/repository/Tode-GemStone-Server-Core.package/TDGitTool.class/instance/gitmergetool.mergerCompletionBlock.mergerAbortBlock.windowLabel..st
index fc68af2a5..af84e8653 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGitTool.class/instance/gitmergetool.mergerCompletionBlock.mergerAbortBlock.windowLabel..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitTool.class/instance/gitmergetool.mergerCompletionBlock.mergerAbortBlock.windowLabel..st
@@ -1,25 +1,44 @@
as yet unclassified
gitmergetool: gitRepoDirectory mergerCompletionBlock: aMergerCompletionBlock mergerAbortBlock: aMergerAbortBlock windowLabel: label
- | dictionary conflicts merger mergeTool |
+ | dictionary conflicts merger mergeTool diffs |
dictionary := self gitlsfiles: gitRepoDirectory.
- dictionary isEmpty
- ifTrue: [ ^ 'No conflicts' ].
conflicts := OrderedCollection new.
- dictionary keys
- do: [ :path |
- gitRepoDirectory
- readOnlyFileNamed: path
- do: [ :fileStream |
- | triplet conflict |
- triplet := self parseSourceConflictsOn: fileStream.
- conflict := TDGitConflict new
- baseDirectory: gitRepoDirectory;
- filePath: path;
- source: (triplet at: 1);
- common: (triplet at: 2);
- destination: (triplet at: 3);
- yourself.
- conflicts add: conflict ] ].
+ dictionary
+ keysAndValuesDo: [ :path :stages |
+ | conflict us them ancestor labelString |
+ "stages at: 1 - common ancestor
+ stages at: 2 - us
+ stages at: 3 - them"
+ labelString := us := them := ancestor := nil.
+ (stages at: 1)
+ ifNotNil: [ :oc | ancestor := self gitcatfile: gitRepoDirectory gitObjectId: (oc at: 2) ].
+ (stages at: 2)
+ ifNotNil: [ :oc | us := self gitcatfile: gitRepoDirectory gitObjectId: (oc at: 2) ].
+ (stages at: 3)
+ ifNotNil: [ :oc | them := self gitcatfile: gitRepoDirectory gitObjectId: (oc at: 2) ].
+ conflict := TDGitMergeOperation new
+ baseDirectory: gitRepoDirectory;
+ filePath: path;
+ us: us;
+ ancestor: ancestor;
+ them: them;
+ labelString: labelString;
+ yourself.
+ conflict resolveSafely.
+ conflicts add: conflict ].
+ diffs := (self
+ gitdifftool: ''
+ destination: ''
+ cached: true
+ filePath: ''
+ gitRepoDirectory: gitRepoDirectory
+ diffClass: TDGitDiff) collect: [ :diff | diff asMergeOperation ].
+ conflicts addAll: diffs.
+ conflicts := conflicts sorted: [ :a :b | a filePath <= b filePath ].
+ conflicts isEmpty
+ ifTrue: [
+ self inform: 'No conflicts or diffs'.
+ ^ 'No conflicts' ].
merger := TDGitMerger new
conflicts: conflicts;
gitTool: self;
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitTool.class/instance/gitrmIn.with..st b/repository/Tode-GemStone-Server-Core.package/TDGitTool.class/instance/gitrmIn.with..st
new file mode 100644
index 000000000..111a23d5f
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitTool.class/instance/gitrmIn.with..st
@@ -0,0 +1,3 @@
+as yet unclassified
+gitrmIn: gitRepoDir with: args
+ ^ self performGitCommand: 'rm' in: gitRepoDir with: args
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDGitTool.class/methodProperties.json b/repository/Tode-GemStone-Server-Core.package/TDGitTool.class/methodProperties.json
index 727b8d286..149d8b72c 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDGitTool.class/methodProperties.json
+++ b/repository/Tode-GemStone-Server-Core.package/TDGitTool.class/methodProperties.json
@@ -18,6 +18,7 @@
"gitaddIn:with:" : "dkh 08/09/2013 17:45",
"gitbranch" : "dkh 05/28/2014 16:15",
"gitbranchIn:with:" : "dkh 05/28/2014 16:15",
+ "gitcatfile:gitObjectId:" : "dkh 01/24/2015 15:24",
"gitcheckout" : "dkh 10/06/2013 12:44",
"gitcheckoutIn:with:" : "dkh 08/09/2013 17:51",
"gitclone" : "dkh 05/20/2014 14:25",
@@ -54,7 +55,7 @@
"gitmergetool" : "dkh 09/04/2013 00:05",
"gitmergetool:" : "dkh 05/28/2014 21:07",
"gitmergetool:mergerCompletionBlock:mergerAbortBlock:" : "dkh 05/30/2014 06:55",
- "gitmergetool:mergerCompletionBlock:mergerAbortBlock:windowLabel:" : "dkh 05/30/2014 06:55",
+ "gitmergetool:mergerCompletionBlock:mergerAbortBlock:windowLabel:" : "dkh 01/31/2015 11:15",
"gitpull" : "dkh 10/06/2013 12:44",
"gitpullIn:with:" : "dkh 08/10/2013 08:43",
"gitpush" : "dkh 10/06/2013 12:44",
@@ -62,6 +63,7 @@
"gitreset" : "dkh 05/28/2014 20:59",
"gitresetIn:with:" : "dkh 05/28/2014 21:00",
"gitrevparseIn:with:" : "dkh 07/02/2014 13:05",
+ "gitrmIn:with:" : "dkh 01/30/2015 13:57",
"gitshowIn:with:" : "dkh 05/11/2014 18:24",
"gitstatus" : "dkh 10/06/2013 12:42",
"gitstatusIn:with:" : "dkh 08/09/2013 17:47",
diff --git a/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/instance/clientList.listElement..st b/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/instance/clientList.listElement..st
index f05016414..0739ade17 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/instance/clientList.listElement..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/instance/clientList.listElement..st
@@ -13,9 +13,11 @@ clientList: miniTool listElement: listElement
objectLogEntries
do: [ :ole |
| one two three |
- two := ole labelString.
- two size > 35
- ifTrue: [ two := (two copyFrom: 1 to: 35) , '...' ].
+ two := ole label.
+ ole hasContinuation
+ ifTrue: [ two := ole labelString , ' (' , two , ')' ].
+ two size > 50
+ ifTrue: [ two := (two copyFrom: 1 to: 50) , '...' ].
labels
add:
{(one := priorityLabels at: ole priority).
diff --git a/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/instance/enableMenuItemsFor..st b/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/instance/enableMenuItemsFor..st
index d335641c1..788f29deb 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/instance/enableMenuItemsFor..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/instance/enableMenuItemsFor..st
@@ -8,7 +8,7 @@ enableMenuItemsFor: objectLogEntry
disabled remove: symbol ].
objectLogEntry hasContinuation
ifTrue: [ enable value: #'continuation' ].
- ^ STON
+ ^ self objectSerializer
toString:
{#'setMenuCategories:'.
enabled.
diff --git a/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/instance/objectLogBlock..st b/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/instance/objectLogBlock..st
index e63bcc62a..6728b6c4d 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/instance/objectLogBlock..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/instance/objectLogBlock..st
@@ -1,4 +1,4 @@
initialization
objectLogBlock: anObject
- objectLogBlock := anObject
+ objectLogBlock := anObject
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/instance/objectLogBlock.st b/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/instance/objectLogBlock.st
index 5070c3c4b..e897d1163 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/instance/objectLogBlock.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/instance/objectLogBlock.st
@@ -1,4 +1,4 @@
accessing
objectLogBlock
- ^objectLogBlock
+ ^objectLogBlock
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/instance/reversed..st b/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/instance/reversed..st
index de5f33159..fed28cf5f 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/instance/reversed..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/instance/reversed..st
@@ -1,4 +1,4 @@
accessing
reversed: anObject
- reversed := anObject
+ reversed := anObject
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/methodProperties.json b/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/methodProperties.json
index 81bb2b9b8..8d331a6b9 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/methodProperties.json
+++ b/repository/Tode-GemStone-Server-Core.package/TDObjectLogEntryBrowser.class/methodProperties.json
@@ -4,10 +4,10 @@
"instance" : {
"attachContinuation:" : "dkh 06/03/2014 06:12",
"attachContinuation:selectedIndex:" : "dkh 06/03/2014 06:15",
- "clientList:listElement:" : "dkh 06/05/2014 19:03",
+ "clientList:listElement:" : "dkh 12/02/2014 16:11",
"debugContinuation:" : "dkh 06/03/2014 06:15",
"debugContinuation:selectedIndex:" : "dkh 06/03/2014 07:23",
- "enableMenuItemsFor:" : "dkh 06/03/2014 05:54",
+ "enableMenuItemsFor:" : "dkh 06/25/2015 16:00",
"itemSelected:listElement:selectedIndex:shiftPressed:" : "dkh 06/03/2014 05:56",
"menuActionSpec:" : "dkh 06/03/2014 08:05",
"objectLogBlock" : "dkh 06/02/2014 20:44",
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonClassEntryClientListElementBuilder.class/README.md b/repository/Tode-GemStone-Server-Core.package/TDProfMonClassEntryClientListElementBuilder.class/README.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonClassEntryClientListElementBuilder.class/instance/menuActionSpec.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonClassEntryClientListElementBuilder.class/instance/menuActionSpec.st
new file mode 100644
index 000000000..cd894a043
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonClassEntryClientListElementBuilder.class/instance/menuActionSpec.st
@@ -0,0 +1,5 @@
+menu action specs
+menuActionSpec
+ ^ {#('Object Creation for class...' nil #'visitObjectCreationForClassMenuAction:selectionIndex:').
+ #('Object Creation for method...' nil #'visitObjectCreationForMethodMenuAction:selectionIndex:').
+ #('-')} , super menuActionSpec
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonClassEntryClientListElementBuilder.class/instance/visitObjectCreationForClassMenuAction.selectionIndex..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonClassEntryClientListElementBuilder.class/instance/visitObjectCreationForClassMenuAction.selectionIndex..st
new file mode 100644
index 000000000..c68d8c62c
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonClassEntryClientListElementBuilder.class/instance/visitObjectCreationForClassMenuAction.selectionIndex..st
@@ -0,0 +1,24 @@
+menu actions
+visitObjectCreationForClassMenuAction: listElement selectionIndex: selectionIndex
+ | classes classNames className cls classEntry |
+ classes := self object classInstancesCreated.
+ classNames := (classes collect: [ :each | each theNonMetaClass name asString ])
+ asArray sorted.
+ className := (GsChoiceInteraction
+ prompt: 'Choose a class'
+ labels: classNames
+ values: classNames) signal.
+ className == nil
+ ifTrue: [ ^ false ].
+ cls := (Smalltalk at: className asSymbol) class.
+ classEntry := TDProfMonitorClassEntry new
+ tallyClass: cls;
+ tally: (self object objCreationCounts at: cls);
+ profMon: self object profMonitor;
+ yourself.
+ classEntry
+ editUsing:
+ ((TDEditorSpec topez: listElement topez editorAspect: #'profMonResults')
+ windowLabel: classEntry windowLabel;
+ yourself).
+ ^ true
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonClassEntryClientListElementBuilder.class/instance/visitObjectCreationForMethodMenuAction.selectionIndex..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonClassEntryClientListElementBuilder.class/instance/visitObjectCreationForMethodMenuAction.selectionIndex..st
new file mode 100644
index 000000000..41cd5562e
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonClassEntryClientListElementBuilder.class/instance/visitObjectCreationForMethodMenuAction.selectionIndex..st
@@ -0,0 +1,36 @@
+menu actions
+visitObjectCreationForMethodMenuAction: listElement selectionIndex: selectionIndex
+ | classes classNames className cls classEntry methodEntry sampleDict |
+ classes := self object classInstancesCreated.
+ classNames := (classes collect: [ :each | each theNonMetaClass name asString ])
+ asArray sorted.
+ className := (GsChoiceInteraction
+ prompt: 'Choose a class'
+ labels: classNames
+ values: classNames) signal.
+ className == nil
+ ifTrue: [ ^ false ].
+ cls := (Smalltalk at: className asSymbol) class.
+ classEntry := TDProfMonitorClassEntry new
+ tallyClass: cls;
+ tally: (self object objCreationCounts at: cls);
+ profMon: self object profMonitor;
+ yourself.
+ sampleDict := self object profMonitor profMonitor results at: 2.
+ sampleDict
+ keysAndValuesDo: [ :ar :d |
+ (ar at: 1) = cls
+ ifTrue: [
+ | entry |
+ entry := d at: self object profMonEntry cmethod.
+ methodEntry := TDProfMonitorObjectCreationEntry new
+ profMonEntry: entry values any;
+ profMon: classEntry;
+ yourself.
+ methodEntry
+ editUsing:
+ ((TDEditorSpec topez: listElement topez editorAspect: #'profMonResults')
+ windowLabel: methodEntry windowLabel;
+ yourself).
+ ^ true ] ].
+ ^ false
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonClassEntryClientListElementBuilder.class/methodProperties.json b/repository/Tode-GemStone-Server-Core.package/TDProfMonClassEntryClientListElementBuilder.class/methodProperties.json
new file mode 100644
index 000000000..07edc692a
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonClassEntryClientListElementBuilder.class/methodProperties.json
@@ -0,0 +1,7 @@
+{
+ "class" : {
+ },
+ "instance" : {
+ "menuActionSpec" : "dkh 07/03/2015 17:28",
+ "visitObjectCreationForClassMenuAction:selectionIndex:" : "dkh 07/03/2015 17:24",
+ "visitObjectCreationForMethodMenuAction:selectionIndex:" : "dkh 07/03/2015 17:45" } }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonClassEntryClientListElementBuilder.class/properties.json b/repository/Tode-GemStone-Server-Core.package/TDProfMonClassEntryClientListElementBuilder.class/properties.json
new file mode 100644
index 000000000..f59e7ae19
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonClassEntryClientListElementBuilder.class/properties.json
@@ -0,0 +1,14 @@
+{
+ "category" : "Tode-GemStone-Server-Core",
+ "classinstvars" : [
+ ],
+ "classvars" : [
+ ],
+ "commentStamp" : "",
+ "instvars" : [
+ ],
+ "name" : "TDProfMonClassEntryClientListElementBuilder",
+ "pools" : [
+ ],
+ "super" : "TDProfMonEntryClientListElementBuilder",
+ "type" : "normal" }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/clientList..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/clientList..st
index aa20ce637..595a0439b 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/clientList..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/clientList..st
@@ -1,7 +1,7 @@
as yet unclassified
clientList: listElement
- ^ ({('elapsed CPU time: ' , self object elapsedTime asString , ' ms').
- 'tally % smpl% ms class and method name'.
- '----- ----- ----- ----- ---------------------'}
- , (self object profMonResults collect: [ :entry | entry printSampleString ]))
- -> nil
\ No newline at end of file
+ | header |
+ header := self object clientListHeading.
+ headerSize := header size.
+ clientList := self object clientListEntries.
+ ^ (header , (clientList collect: [ :entry | entry printSampleString ])) -> nil
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/headerSize.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/headerSize.st
new file mode 100644
index 000000000..cc4100753
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/headerSize.st
@@ -0,0 +1,3 @@
+as yet unclassified
+headerSize
+ ^ headerSize
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/itemSelected.at.shiftPressed..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/itemSelected.at.shiftPressed..st
index 52d5728b8..5c7f4058a 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/itemSelected.at.shiftPressed..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/itemSelected.at.shiftPressed..st
@@ -2,11 +2,13 @@ as yet unclassified
itemSelected: listElement at: index shiftPressed: shiftPressed
| entry |
index ifNil: [ ^ nil ].
- index <= 3
+ index <= self headerSize
ifTrue: [ ^ nil ].
- entry := self object profMonResults at: index - 3.
+ entry := clientList at: index - self headerSize.
entry parentEntry: nil.
entry
editUsing:
- (TDEditorSpec topez: listElement topez editorAspect: #'profMonResults').
+ ((TDEditorSpec topez: listElement topez editorAspect: #'profMonResults')
+ windowLabel: entry windowLabel;
+ yourself).
^ nil
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/menuActionSpec.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/menuActionSpec.st
index dc82b1e09..f2a06b65c 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/menuActionSpec.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/menuActionSpec.st
@@ -1,9 +1,3 @@
menu action specs
menuActionSpec
- "label, shortcut character, actionSymbol"
-
- "works in concert with menuActionBlock"
-
- ^ {#('sort by tally' nil #'sortByTallyMenuAction:').
- #('sort by total' nil #'sortByTotalMenuAction:').
- #('-')} , self basicMenuActionSpec
\ No newline at end of file
+ ^ self tallyMenuActionSpec , {#('-')} , self basicMenuActionSpec
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/sortByClassNameMenuAction..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/sortByClassNameMenuAction..st
new file mode 100644
index 000000000..ef748d820
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/sortByClassNameMenuAction..st
@@ -0,0 +1,4 @@
+menu actions
+sortByClassNameMenuAction: listElement
+ self object resortByClassName.
+ ^ #'refreshView'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/sortByClassTallyMenuAction..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/sortByClassTallyMenuAction..st
new file mode 100644
index 000000000..b3d1ca6ff
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/sortByClassTallyMenuAction..st
@@ -0,0 +1,4 @@
+menu actions
+sortByClassTallyMenuAction: listElement
+ self object resortByClassTally.
+ ^ #'refreshView'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/sortByTallyMenuAction..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/sortByTallyMenuAction..st
index be3371ac4..96189f110 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/sortByTallyMenuAction..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/sortByTallyMenuAction..st
@@ -1,4 +1,4 @@
-menu action specs
+menu actions
sortByTallyMenuAction: listElement
self object resortByTally.
^ #'refreshView'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/sortByTotalMenuAction..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/sortByTotalMenuAction..st
index 4d9122762..17d6dad91 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/sortByTotalMenuAction..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/sortByTotalMenuAction..st
@@ -1,4 +1,4 @@
-menu action specs
+menu actions
sortByTotalMenuAction: listElement
self object resortByTotal.
^ #'refreshView'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/tallyMenuActionSpec.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/tallyMenuActionSpec.st
new file mode 100644
index 000000000..f9c29702a
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/instance/tallyMenuActionSpec.st
@@ -0,0 +1,9 @@
+menu action specs
+tallyMenuActionSpec
+ ^ self object objectCreationTally
+ ifTrue: [
+ {#('sort by class tally' nil #'sortByClassTallyMenuAction:').
+ #('sort by class name' nil #'sortByClassNameMenuAction:')} ]
+ ifFalse: [
+ {#('sort by tally' nil #'sortByTallyMenuAction:').
+ #('sort by total' nil #'sortByTotalMenuAction:')} ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/methodProperties.json b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/methodProperties.json
index 57f0267d3..17daef859 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/methodProperties.json
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/methodProperties.json
@@ -2,9 +2,13 @@
"class" : {
},
"instance" : {
- "clientList:" : "dkh 03/20/2014 20:40",
+ "clientList:" : "dkh 06/11/2015 14:53",
"defaultEditorWindowLocation" : "dkh 09/27/2013 17:02",
- "itemSelected:at:shiftPressed:" : "dkh 04/19/2014 09:36",
- "menuActionSpec" : "dkh 08/10/2014 18:17",
+ "headerSize" : "dkh 06/10/2015 16:08",
+ "itemSelected:at:shiftPressed:" : "dkh 07/03/2015 13:30",
+ "menuActionSpec" : "dkh 07/02/2015 15:04",
+ "sortByClassNameMenuAction:" : "dkh 07/03/2015 15:34",
+ "sortByClassTallyMenuAction:" : "dkh 07/03/2015 15:34",
"sortByTallyMenuAction:" : "dkh 08/10/2014 18:16",
- "sortByTotalMenuAction:" : "dkh 08/10/2014 18:16" } }
+ "sortByTotalMenuAction:" : "dkh 08/10/2014 18:16",
+ "tallyMenuActionSpec" : "dkh 07/03/2015 15:45" } }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/properties.json b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/properties.json
index c14b063fb..d79f9b2f4 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/properties.json
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonClientListElementBuilder.class/properties.json
@@ -6,7 +6,8 @@
],
"commentStamp" : "",
"instvars" : [
- ],
+ "headerSize",
+ "clientList" ],
"name" : "TDProfMonClientListElementBuilder",
"pools" : [
],
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonEntryClientListElementBuilder.class/instance/clientArray.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonEntryClientListElementBuilder.class/instance/clientArray.st
deleted file mode 100644
index 593b303c6..000000000
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonEntryClientListElementBuilder.class/instance/clientArray.st
+++ /dev/null
@@ -1,10 +0,0 @@
-as yet unclassified
-clientArray
- | list |
- list := Array new.
- (self object parents asArray sort: [ :a :b | a total >= b total ])
- do: [ :entry | list add: entry ].
- list add: self object.
- (self object children asArray sort: [ :a :b | a total >= b total ])
- do: [ :entry | list add: entry ].
- ^ list
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonEntryClientListElementBuilder.class/instance/clientList..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonEntryClientListElementBuilder.class/instance/clientList..st
index 3bd771793..8a7826fa3 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonEntryClientListElementBuilder.class/instance/clientList..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonEntryClientListElementBuilder.class/instance/clientList..st
@@ -1,16 +1,18 @@
as yet unclassified
clientList: listElement
| list |
- list := Array new.
- list
- add: ' % % Parent';
- add: ' self total total local Method';
- add: 'tally Time Time ms % Child';
- add: '----- ---- ------ ----- ----- -----------'.
+ list := self object clientEntryListColumnLabels.
+ headerSize := list size.
self object parentEntry ifNotNil: [ list add: '<<<' ].
+ clientList := {}.
(self object parents asArray sort: [ :a :b | a total >= b total ])
- do: [ :entry | list add: entry printParentString ].
+ do: [ :entry |
+ clientList add: entry.
+ list add: entry printParentString ].
+ clientList add: self object.
list add: self object printSenderString.
(self object children asArray sort: [ :a :b | a total >= b total ])
- do: [ :entry | list add: entry printChildString ].
+ do: [ :entry |
+ clientList add: entry.
+ list add: entry printChildString ].
^ list -> nil
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonEntryClientListElementBuilder.class/instance/itemSelected.at.shiftPressed..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonEntryClientListElementBuilder.class/instance/itemSelected.at.shiftPressed..st
index be6487664..4b48348fa 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonEntryClientListElementBuilder.class/instance/itemSelected.at.shiftPressed..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonEntryClientListElementBuilder.class/instance/itemSelected.at.shiftPressed..st
@@ -2,9 +2,9 @@ as yet unclassified
itemSelected: listElement at: listIndex shiftPressed: shiftPressed
| index entry offset highlightIndex |
listIndex ifNil: [ ^ nil ].
- listIndex <= 4
+ listIndex <= headerSize
ifTrue: [ ^ nil ].
- index := listIndex - 4.
+ index := listIndex - headerSize.
offset := 0.
self object parentEntry ifNotNil: [ offset := 1 ].
index == offset
@@ -12,7 +12,7 @@ itemSelected: listElement at: listIndex shiftPressed: shiftPressed
entry := self object parentEntry.
highlightIndex := self object parentIndex ]
ifFalse: [
- entry := self clientArray at: index - offset.
+ entry := clientList at: index - offset.
entry == self object
ifFalse: [
entry
@@ -27,5 +27,6 @@ itemSelected: listElement at: listIndex shiftPressed: shiftPressed
editUsing:
((TDEditorSpec topez: listElement topez editorAspect: #'profMonResults')
highlightIndex: highlightIndex;
+ windowLabel: entry windowLabel;
yourself).
^ nil
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonEntryClientListElementBuilder.class/methodProperties.json b/repository/Tode-GemStone-Server-Core.package/TDProfMonEntryClientListElementBuilder.class/methodProperties.json
index fff857704..c27d16e33 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonEntryClientListElementBuilder.class/methodProperties.json
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonEntryClientListElementBuilder.class/methodProperties.json
@@ -2,11 +2,10 @@
"class" : {
},
"instance" : {
- "clientArray" : "dkh 09/28/2013 10:03",
- "clientList:" : "dkh 03/20/2014 20:40",
+ "clientList:" : "dkh 06/11/2015 14:55",
"defaultEditorWindowLocation" : "dkh 09/27/2013 19:38",
"defaultEditorWindowName" : "dkh 09/27/2013 21:20",
- "itemSelected:at:shiftPressed:" : "dkh 06/04/2014 15:20",
+ "itemSelected:at:shiftPressed:" : "dkh 07/03/2015 14:54",
"menuActionBlock" : "dkh 08/10/2014 19:18",
"menuActionSpec" : "dkh 08/10/2014 18:53",
"parentMenuActionSpec" : "dkh 08/10/2014 19:15" } }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonEntryClientListElementBuilder.class/properties.json b/repository/Tode-GemStone-Server-Core.package/TDProfMonEntryClientListElementBuilder.class/properties.json
index 53d622365..d82d2b99c 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonEntryClientListElementBuilder.class/properties.json
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonEntryClientListElementBuilder.class/properties.json
@@ -6,7 +6,8 @@
],
"commentStamp" : "",
"instvars" : [
- ],
+ "headerSize",
+ "clientList" ],
"name" : "TDProfMonEntryClientListElementBuilder",
"pools" : [
],
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonObjCreationClientListElementBuilder.class/README.md b/repository/Tode-GemStone-Server-Core.package/TDProfMonObjCreationClientListElementBuilder.class/README.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonObjCreationClientListElementBuilder.class/instance/menuActionSpec.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonObjCreationClientListElementBuilder.class/instance/menuActionSpec.st
new file mode 100644
index 000000000..e8b675fc0
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonObjCreationClientListElementBuilder.class/instance/menuActionSpec.st
@@ -0,0 +1,3 @@
+menu action specs
+menuActionSpec
+ ^ self basicMenuActionSpec
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonObjCreationClientListElementBuilder.class/methodProperties.json b/repository/Tode-GemStone-Server-Core.package/TDProfMonObjCreationClientListElementBuilder.class/methodProperties.json
new file mode 100644
index 000000000..c488aa58f
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonObjCreationClientListElementBuilder.class/methodProperties.json
@@ -0,0 +1,5 @@
+{
+ "class" : {
+ },
+ "instance" : {
+ "menuActionSpec" : "dkh 07/02/2015 15:34" } }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonObjCreationClientListElementBuilder.class/properties.json b/repository/Tode-GemStone-Server-Core.package/TDProfMonObjCreationClientListElementBuilder.class/properties.json
new file mode 100644
index 000000000..bcf5199fd
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonObjCreationClientListElementBuilder.class/properties.json
@@ -0,0 +1,14 @@
+{
+ "category" : "Tode-GemStone-Server-Core",
+ "classinstvars" : [
+ ],
+ "classvars" : [
+ ],
+ "commentStamp" : "",
+ "instvars" : [
+ ],
+ "name" : "TDProfMonObjCreationClientListElementBuilder",
+ "pools" : [
+ ],
+ "super" : "TDProfMonClientListElementBuilder",
+ "type" : "normal" }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/buildObjectCreationEntries.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/buildObjectCreationEntries.st
new file mode 100644
index 000000000..d89ff4788
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/buildObjectCreationEntries.st
@@ -0,0 +1,42 @@
+private
+buildObjectCreationEntries
+ self objectCreationTally
+ ifFalse: [ ^ self ].
+ objectCreationMethodToClassMap := IdentityKeyValueDictionary new.
+ objectCreationClassToMethodMap := IdentityKeyValueDictionary new.
+ objCreationCounts := IdentityKeyValueDictionary new.
+ (profMonitor results at: 2)
+ keysAndValuesDo: [ :k :d |
+ | cls tally |
+ cls := k at: 1.
+ cls
+ ifNotNil: [
+ tally := objCreationCounts
+ at: cls
+ ifAbsent: [ objCreationCounts at: cls put: 0 ].
+ d
+ valuesDo: [ :d2 |
+ d2
+ valuesDo: [ :e |
+ e cclass isNil
+ ifFalse: [ tally := tally + e tally ].
+ (objectCreationMethodToClassMap
+ at: e cmethod
+ ifAbsent: [ objectCreationMethodToClassMap at: e cmethod put: IdentitySet new ])
+ add: cls.
+ false
+ ifTrue: [
+ (objectCreationClassToMethodMap
+ at: cls
+ ifAbsent: [ objectCreationClassToMethodMap at: cls put: IdentitySet new ])
+ add: e cmethod ] ] ].
+ objCreationCounts at: cls put: tally ] ].
+ objCreationTallyTotal := 0.
+ objCreationClasses := Array new.
+ objCreationCounts
+ keysAndValuesDo: [ :k :v |
+ objCreationClasses add: (Array with: k with: v).
+ objCreationTallyTotal := objCreationTallyTotal + v ].
+ objCreationClasses := objCreationClasses
+ asSortedCollection: [ :x :y | (x at: 2) > (y at: 2) ].
+ objCreationClasses := objCreationClasses collect: [ :x | x at: 1 ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/clientListColumnLabels.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/clientListColumnLabels.st
new file mode 100644
index 000000000..bf850c87f
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/clientListColumnLabels.st
@@ -0,0 +1,9 @@
+client list
+clientListColumnLabels
+ ^ self objectCreationTally
+ ifTrue: [
+ {(' ' , sortKey , ' % class name').
+ '---------- ----- ---------------------'} ]
+ ifFalse: [
+ {(' ' , sortKey , ' ms % class and method name').
+ '---------- ---------- ----- ---------------------'} ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/clientListEntries.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/clientListEntries.st
new file mode 100644
index 000000000..dac2f5a62
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/clientListEntries.st
@@ -0,0 +1,5 @@
+client list
+clientListEntries
+ ^ clientListEntries := self sortKey = 'total'
+ ifTrue: [ self profMonitorEntries select: [ :entry | entry total >= self tallyLimit ] ]
+ ifFalse: [ self profMonitorEntries select: [ :entry | entry tally >= self tallyLimit ] ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/clientListHeading.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/clientListHeading.st
new file mode 100644
index 000000000..522145c3c
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/clientListHeading.st
@@ -0,0 +1,16 @@
+client list
+clientListHeading
+ | heading line |
+ heading := {('TALLYING: ' , self tallying)}.
+ line := self sampling == #'cpu'
+ ifTrue: [ 'elapsed CPU time: ' , self elapsedTime asString , ' ms' ]
+ ifFalse: [ 'elapsed REAL time: ' , self elapsedTime asString , ' ms' ].
+ heading add: line.
+ self objectCreationTally
+ ifFalse: [
+ | res |
+ res := profMonitor results.
+ res size > 2
+ ifTrue: [ heading add: (res at: 4) ] ].
+ heading add: ''.
+ ^ heading , self clientListColumnLabels
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/elapsedTime.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/elapsedTime.st
index 2cc3c2ea7..68e4afa8f 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/elapsedTime.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/elapsedTime.st
@@ -1,3 +1,3 @@
-as yet unclassified
+accessing
elapsedTime
^ elapsedTime
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/objCreationClasses.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/objCreationClasses.st
new file mode 100644
index 000000000..789dd72ed
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/objCreationClasses.st
@@ -0,0 +1,3 @@
+accessing
+objCreationClasses
+ ^ objCreationClasses
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/objCreationCounts.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/objCreationCounts.st
new file mode 100644
index 000000000..b47a66252
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/objCreationCounts.st
@@ -0,0 +1,3 @@
+accessing
+objCreationCounts
+ ^ objCreationCounts
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/objectCreationMethodToClassMap.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/objectCreationMethodToClassMap.st
new file mode 100644
index 000000000..7e95127f2
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/objectCreationMethodToClassMap.st
@@ -0,0 +1,3 @@
+accessing
+objectCreationMethodToClassMap
+ ^ objectCreationMethodToClassMap
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/objectCreationTally.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/objectCreationTally.st
new file mode 100644
index 000000000..bf594c4c6
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/objectCreationTally.st
@@ -0,0 +1,3 @@
+testing
+objectCreationTally
+ ^ (traceObjCreation bitAnd: 1) ~~ 0
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/profMon..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/profMon..st
deleted file mode 100644
index a5b749e47..000000000
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/profMon..st
+++ /dev/null
@@ -1,9 +0,0 @@
-as yet unclassified
-profMon: aProfMon
- | endTime startTime |
- endTime := aProfMon endTime.
- startTime := aProfMon startTime.
- self profMonResults: aProfMon results.
- endTime >= startTime
- ifTrue: [ elapsedTime := endTime - startTime ]
- ifFalse: [ elapsedTime := endTime + (16rffffffff - startTime) ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/profMonResults..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/profMonResults..st
deleted file mode 100644
index 7839418f0..000000000
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/profMonResults..st
+++ /dev/null
@@ -1,8 +0,0 @@
-as yet unclassified
-profMonResults: aProfMonResults
- profMonResults := ((aProfMonResults at: 1) sortDescending: 'tally')
- collect: [ :each |
- TDProfMonitorEntry new
- profMonEntry: each;
- profMon: self;
- yourself ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/profMonResults.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/profMonResults.st
deleted file mode 100644
index 5c97fe9aa..000000000
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/profMonResults.st
+++ /dev/null
@@ -1,3 +0,0 @@
-as yet unclassified
-profMonResults
- ^ profMonResults
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/profMonitor..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/profMonitor..st
new file mode 100644
index 000000000..315e7b8b4
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/profMonitor..st
@@ -0,0 +1,13 @@
+accessing
+profMonitor: aProfMonitor
+ | endTime startTime |
+ endTime := aProfMonitor endTime.
+ startTime := aProfMonitor startTime.
+ (aProfMonitor respondsTo: #'sampling')
+ ifTrue: [ sampling := aProfMonitor perform: #'sampling' ].
+ traceObjCreation := aProfMonitor instVarNamed: #'traceObjCreation'.
+ profMonitor := aProfMonitor.
+ endTime >= startTime
+ ifTrue: [ elapsedTime := endTime - startTime ]
+ ifFalse: [ elapsedTime := endTime + (16rffffffff - startTime) ].
+ self buildObjectCreationEntries
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/profMonitor.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/profMonitor.st
new file mode 100644
index 000000000..e776bff74
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/profMonitor.st
@@ -0,0 +1,3 @@
+accessing
+profMonitor
+ ^ profMonitor
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/profMonitorEntries.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/profMonitorEntries.st
new file mode 100644
index 000000000..1101bfaa5
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/profMonitorEntries.st
@@ -0,0 +1,8 @@
+accessing
+profMonitorEntries
+ profMonitorEntries
+ ifNil: [
+ self objectCreationTally
+ ifTrue: [ self resortByClass: self sortKey ]
+ ifFalse: [ self resortBy: self sortKey ] ].
+ ^ profMonitorEntries
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/resortBy..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/resortBy..st
index 1b77ed406..d0c55a76c 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/resortBy..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/resortBy..st
@@ -1,11 +1,20 @@
-as yet unclassified
+sorting
resortBy: aString
- "no optimal, but hey more work is planned"
+ "not optimal, but hey more work is planned"
- profMonResults := ((profMonResults collect: [ :each | each profMonEntry ])
- sortDescending: aString)
- collect: [ :each |
- TDProfMonitorEntry new
- profMonEntry: each;
- profMon: self;
- yourself ]
\ No newline at end of file
+ sortKey := aString.
+ profMonitorEntries := self objectCreationTally
+ ifTrue: [
+ ((profMonitor results at: 1) sortDescending: sortKey)
+ collect: [ :each |
+ TDProfMonitorClassTallyEntry new
+ profMonEntry: each;
+ profMon: self;
+ yourself ] ]
+ ifFalse: [
+ ((profMonitor results at: 1) sortDescending: sortKey)
+ collect: [ :each |
+ TDProfMonitorEntry new
+ profMonEntry: each;
+ profMon: self;
+ yourself ] ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/resortByClass..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/resortByClass..st
new file mode 100644
index 000000000..8ce189891
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/resortByClass..st
@@ -0,0 +1,15 @@
+sorting
+resortByClass: aSortKey
+ "not optimal, but hey more work is planned"
+
+ sortKey := aSortKey.
+ profMonitorEntries := objCreationClasses
+ collect: [ :cls |
+ TDProfMonitorClassEntry new
+ tallyClass: cls;
+ tally: (objCreationCounts at: cls);
+ profMon: self;
+ yourself ].
+ profMonitorEntries := sortKey = 'tallyClassName'
+ ifTrue: [ profMonitorEntries sortAscending: sortKey ]
+ ifFalse: [ profMonitorEntries sortDescending: sortKey ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/resortByClassName.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/resortByClassName.st
new file mode 100644
index 000000000..a9a7c8876
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/resortByClassName.st
@@ -0,0 +1,3 @@
+sorting
+resortByClassName
+ self resortByClass: 'tallyClassName'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/resortByClassTally.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/resortByClassTally.st
new file mode 100644
index 000000000..0cd543568
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/resortByClassTally.st
@@ -0,0 +1,3 @@
+sorting
+resortByClassTally
+ self resortByClass: 'tally'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/resortByTally.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/resortByTally.st
index f56ff7105..75a4038ea 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/resortByTally.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/resortByTally.st
@@ -1,3 +1,3 @@
-as yet unclassified
+sorting
resortByTally
self resortBy: 'tally'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/resortByTotal.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/resortByTotal.st
index 0eedb26f2..ebc55c299 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/resortByTotal.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/resortByTotal.st
@@ -1,3 +1,3 @@
-as yet unclassified
+sorting
resortByTotal
self resortBy: 'total'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/sampling.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/sampling.st
new file mode 100644
index 000000000..89fdc863c
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/sampling.st
@@ -0,0 +1,4 @@
+accessing
+sampling
+ sampling ifNil: [ ^ #'cpu' ].
+ ^ sampling
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/sortKey..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/sortKey..st
new file mode 100644
index 000000000..31fb1485a
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/sortKey..st
@@ -0,0 +1,5 @@
+accessing
+sortKey: aString
+ "aString -> tally or total"
+
+ sortKey := aString
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/sortKey.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/sortKey.st
new file mode 100644
index 000000000..207a414a7
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/sortKey.st
@@ -0,0 +1,4 @@
+accessing
+sortKey
+ sortKey ifNil: [ ^ 'total' ].
+ ^ sortKey
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/tallyLimit..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/tallyLimit..st
new file mode 100644
index 000000000..d79bdba7e
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/tallyLimit..st
@@ -0,0 +1,3 @@
+accessing
+tallyLimit: anInteger
+ tallyLimit := anInteger
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/tallyLimit.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/tallyLimit.st
new file mode 100644
index 000000000..6ff40a051
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/tallyLimit.st
@@ -0,0 +1,4 @@
+accessing
+tallyLimit
+ tallyLimit ifNil: [ ^ 0 ].
+ ^ tallyLimit
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/tallying.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/tallying.st
new file mode 100644
index 000000000..ae5da8bc7
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/tallying.st
@@ -0,0 +1,21 @@
+accessing
+tallying
+ | iv |
+ traceObjCreation ifNil: [ ^ 'execTime' ].
+ iv := traceObjCreation. "following must agree with VM C code in profileStatsWord() and code in setOptions:
+ 16r4 for elapsed time sampling, tally object faults
+ 16r8 for elapsed time sampling, tally page faults
+ 16r10 for elapsed time sampling, tally eden bytes used
+ 16r20 for elapsed time sampling, tally temp obj memory gc time
+ "
+ (iv bitAnd: 16r4) ~~ 0
+ ifTrue: [ ^ 'objFaults' ].
+ (iv bitAnd: 16r8) ~~ 0
+ ifTrue: [ ^ 'pageFaults' ].
+ (iv bitAnd: 16r10) ~~ 0
+ ifTrue: [ ^ 'edenUsage' ].
+ (iv bitAnd: 16r20) ~~ 0
+ ifTrue: [ ^ 'gcTime' ].
+ (iv bitAnd: 16r1) ~~ 0
+ ifTrue: [ ^ 'objCreation' ].
+ ^ 'execTime' "assume just time sampling"
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/totalClassTally.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/totalClassTally.st
new file mode 100644
index 000000000..412af4e5c
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/totalClassTally.st
@@ -0,0 +1,3 @@
+accessing
+totalClassTally
+ ^ objCreationTallyTotal
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/totalSamples.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/totalSamples.st
index 8a5c119ed..2d6442426 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/totalSamples.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/totalSamples.st
@@ -1,8 +1,8 @@
-as yet unclassified
+accessing
totalSamples
totalSamples
ifNil: [
totalSamples := 0.
- self profMonResults
+ self profMonitorEntries
do: [ :each | totalSamples := totalSamples + each sampleTally ] ].
^ totalSamples
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/totalTally.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/totalTally.st
index e031ddee5..874a22654 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/totalTally.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/instance/totalTally.st
@@ -1,7 +1,8 @@
-as yet unclassified
+accessing
totalTally
totalTally
ifNil: [
totalTally := 0.
- self profMonResults do: [ :each | totalTally := totalTally + each tally ] ].
+ self profMonitorEntries
+ do: [ :each | totalTally := totalTally + each tally ] ].
^ totalTally
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/methodProperties.json b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/methodProperties.json
index 18e95e3aa..46796a93c 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/methodProperties.json
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/methodProperties.json
@@ -2,12 +2,30 @@
"class" : {
"initialize" : "dkh 09/27/2013 17:00" },
"instance" : {
+ "buildObjectCreationEntries" : "dkh 07/03/2015 16:40",
+ "clientListColumnLabels" : "dkh 07/02/2015 16:20",
+ "clientListEntries" : "dkh 07/02/2015 10:06",
+ "clientListHeading" : "dkh 07/02/2015 14:39",
"elapsedTime" : "dkh 09/27/2013 20:50",
- "profMon:" : "dkh 09/27/2013 20:49",
- "profMonResults" : "dkh 09/27/2013 16:18",
- "profMonResults:" : "dkh 09/27/2013 19:42",
- "resortBy:" : "dkh 08/10/2014 18:24",
+ "objCreationClasses" : "dkh 07/02/2015 14:57",
+ "objCreationCounts" : "dkh 07/02/2015 14:57",
+ "objectCreationMethodToClassMap" : "dkh 07/03/2015 16:58",
+ "objectCreationTally" : "dkh 07/02/2015 09:30",
+ "profMonitor" : "dkh 07/02/2015 16:31",
+ "profMonitor:" : "dkh 07/02/2015 14:56",
+ "profMonitorEntries" : "dkh 07/03/2015 15:49",
+ "resortBy:" : "dkh 07/02/2015 16:41",
+ "resortByClass:" : "dkh 07/03/2015 16:00",
+ "resortByClassName" : "dkh 07/03/2015 15:41",
+ "resortByClassTally" : "dkh 07/03/2015 15:41",
"resortByTally" : "dkh 08/10/2014 18:19",
"resortByTotal" : "dkh 08/10/2014 18:19",
- "totalSamples" : "dkh 09/27/2013 20:43",
- "totalTally" : "dkh 09/27/2013 16:43" } }
+ "sampling" : "dkh 06/10/2015 15:12",
+ "sortKey" : "dkh 07/03/2015 15:51",
+ "sortKey:" : "dkh 06/11/2015 09:19",
+ "tallyLimit" : "dkh 06/11/2015 09:37",
+ "tallyLimit:" : "dkh 06/11/2015 09:35",
+ "tallying" : "dkh 07/02/2015 16:17",
+ "totalClassTally" : "dkh 07/02/2015 15:23",
+ "totalSamples" : "dkh 07/02/2015 10:03",
+ "totalTally" : "dkh 07/02/2015 10:03" } }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/properties.json b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/properties.json
index 5a36559ef..5f8ec435e 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/properties.json
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitor.class/properties.json
@@ -6,10 +6,21 @@
],
"commentStamp" : "",
"instvars" : [
- "profMonResults",
"totalTally",
"totalSamples",
- "elapsedTime" ],
+ "elapsedTime",
+ "sampling",
+ "sortKey",
+ "tallyLimit",
+ "traceObjCreation",
+ "profMonitor",
+ "profMonitorEntries",
+ "clientListEntries",
+ "objCreationCounts",
+ "objectCreationClassToMethodMap",
+ "objectCreationMethodToClassMap",
+ "objCreationClasses",
+ "objCreationTallyTotal" ],
"name" : "TDProfMonitor",
"pools" : [
],
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/README.md b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/README.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/class/initialize.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/class/initialize.st
new file mode 100644
index 000000000..e04cfdcf1
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/class/initialize.st
@@ -0,0 +1,8 @@
+as yet unclassified
+initialize
+ "self initialize"
+
+ TDTopezServer
+ registerEditorClass: TDProfMonObjCreationClientListElementBuilder
+ for: TDProfMonitorClassEntry
+ aspect: #'profMonResults'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/clientListColumnLabels.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/clientListColumnLabels.st
new file mode 100644
index 000000000..9ac779624
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/clientListColumnLabels.st
@@ -0,0 +1,4 @@
+client list
+clientListColumnLabels
+ ^ {' tally % class'.
+ '---------- ----- ---------------------'}
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/clientListEntries.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/clientListEntries.st
new file mode 100644
index 000000000..dac2f5a62
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/clientListEntries.st
@@ -0,0 +1,5 @@
+client list
+clientListEntries
+ ^ clientListEntries := self sortKey = 'total'
+ ifTrue: [ self profMonitorEntries select: [ :entry | entry total >= self tallyLimit ] ]
+ ifFalse: [ self profMonitorEntries select: [ :entry | entry tally >= self tallyLimit ] ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/clientListHeading.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/clientListHeading.st
new file mode 100644
index 000000000..b565dd5bd
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/clientListHeading.st
@@ -0,0 +1,5 @@
+client list
+clientListHeading
+ | heading |
+ heading := {('Object Creation tally for ' , self tallyClassName)}.
+ ^ heading , self clientListColumnLabels
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/objCreationCounts.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/objCreationCounts.st
new file mode 100644
index 000000000..6b33ec911
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/objCreationCounts.st
@@ -0,0 +1,3 @@
+TDProfMon compat
+objCreationCounts
+ ^ self profMon objCreationCounts
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/objectCreationMethodToClassMap.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/objectCreationMethodToClassMap.st
new file mode 100644
index 000000000..98a5e7011
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/objectCreationMethodToClassMap.st
@@ -0,0 +1,3 @@
+TDProfMon compat
+objectCreationMethodToClassMap
+ ^ self profMon objectCreationMethodToClassMap
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/overallTotal.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/overallTotal.st
new file mode 100644
index 000000000..9a5490633
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/overallTotal.st
@@ -0,0 +1,3 @@
+TDProfMon compat
+overallTotal
+ ^ self profMon totalClassTally
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/parentEntry..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/parentEntry..st
new file mode 100644
index 000000000..c519409b8
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/parentEntry..st
@@ -0,0 +1,2 @@
+accessing
+parentEntry: aProfMonitorObject
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/printSampleOn..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/printSampleOn..st
new file mode 100644
index 000000000..4ffd125db
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/printSampleOn..st
@@ -0,0 +1,11 @@
+reporting
+printSampleOn: aStream
+ | tallyPct |
+ tallyPct := self tally asFloat * 100.0 / self overallTotal.
+ aStream
+ nextPutAll: (self tally asString width: -10);
+ nextPutAll: ' ';
+ nextPutAll: (tallyPct asStringUsingFormat: #(-6 2 false));
+ nextPutAll: ' ';
+ nextPutAll: self tallyClassName;
+ yourself
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/printSampleString.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/printSampleString.st
new file mode 100644
index 000000000..d4dd28c45
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/printSampleString.st
@@ -0,0 +1,7 @@
+reporting
+printSampleString
+ | ws str |
+ str := String new.
+ ws := PrintStream printingOn: str.
+ self printSampleOn: ws.
+ ^ ws _collection
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/profMon..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/profMon..st
new file mode 100644
index 000000000..572db48e6
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/profMon..st
@@ -0,0 +1,3 @@
+accessing
+profMon: aProfMonitor
+ profMon := aProfMonitor
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/profMon.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/profMon.st
new file mode 100644
index 000000000..a07acda6d
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/profMon.st
@@ -0,0 +1,3 @@
+accessing
+profMon
+ ^ profMon
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/profMonitor.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/profMonitor.st
new file mode 100644
index 000000000..0fe45511b
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/profMonitor.st
@@ -0,0 +1,3 @@
+TDProfMon compat
+profMonitor
+ ^ self profMon
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/profMonitorEntries.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/profMonitorEntries.st
new file mode 100644
index 000000000..b1abeefdf
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/profMonitorEntries.st
@@ -0,0 +1,22 @@
+accessing
+profMonitorEntries
+ | sampleDict tallySet entries |
+ sampleDict := self profMon profMonitor results at: 2.
+ tallySet := IdentitySet new.
+ sampleDict
+ keysAndValuesDo: [ :ar :d |
+ (ar at: 1) = tallyClass
+ ifTrue: [
+ d
+ valuesDo: [ :d2 |
+ d2
+ valuesDo: [ :e |
+ e cclass isNil
+ ifFalse: [ tallySet add: e ] ] ] ] ].
+ entries := (tallySet sortDescending: self sortKey)
+ collect: [ :each |
+ TDProfMonitorObjectCreationEntry new
+ profMonEntry: each;
+ profMon: self;
+ yourself ].
+ ^ entries
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/sortKey..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/sortKey..st
new file mode 100644
index 000000000..31fb1485a
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/sortKey..st
@@ -0,0 +1,5 @@
+accessing
+sortKey: aString
+ "aString -> tally or total"
+
+ sortKey := aString
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/sortKey.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/sortKey.st
new file mode 100644
index 000000000..207a414a7
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/sortKey.st
@@ -0,0 +1,4 @@
+accessing
+sortKey
+ sortKey ifNil: [ ^ 'total' ].
+ ^ sortKey
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/tally..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/tally..st
new file mode 100644
index 000000000..ad19368f6
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/tally..st
@@ -0,0 +1,4 @@
+accessing
+tally: anObject
+
+ tally := anObject
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/tally.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/tally.st
new file mode 100644
index 000000000..68d9dabf1
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/tally.st
@@ -0,0 +1,4 @@
+accessing
+tally
+
+ ^tally
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/tallyClass..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/tallyClass..st
new file mode 100644
index 000000000..334791aef
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/tallyClass..st
@@ -0,0 +1,5 @@
+accessing
+tallyClass: anObject
+ tallyClass := anObject.
+ tallyClassName := nil.
+ self tallyClassName
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/tallyClass.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/tallyClass.st
new file mode 100644
index 000000000..f685fe60c
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/tallyClass.st
@@ -0,0 +1,4 @@
+accessing
+tallyClass
+
+ ^tallyClass
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/tallyClassName.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/tallyClassName.st
new file mode 100644
index 000000000..dee9eff0d
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/tallyClassName.st
@@ -0,0 +1,5 @@
+accessing
+tallyClassName
+ tallyClassName
+ ifNil: [ tallyClassName := self tallyClass theNonMetaClass name asString ].
+ ^ tallyClassName
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/tallyLimit.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/tallyLimit.st
new file mode 100644
index 000000000..a664ace7b
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/tallyLimit.st
@@ -0,0 +1,3 @@
+accessing
+tallyLimit
+ ^ self profMon tallyLimit
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/tallying.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/tallying.st
new file mode 100644
index 000000000..5b2093b31
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/tallying.st
@@ -0,0 +1,3 @@
+TDProfMon compat
+tallying
+ ^ 'objCreation'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/totalSamples.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/totalSamples.st
new file mode 100644
index 000000000..02e3c662d
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/totalSamples.st
@@ -0,0 +1,5 @@
+TDProfMon compat
+totalSamples
+ | total |
+ total := 0.
+ ^ total
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/totalTally.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/totalTally.st
new file mode 100644
index 000000000..b42acfeba
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/totalTally.st
@@ -0,0 +1,3 @@
+TDProfMon compat
+totalTally
+ ^ tally
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/windowLabel.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/windowLabel.st
new file mode 100644
index 000000000..f44067a74
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/instance/windowLabel.st
@@ -0,0 +1,3 @@
+accessing
+windowLabel
+ ^ self tallyClassName
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/methodProperties.json b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/methodProperties.json
new file mode 100644
index 000000000..0c39356ed
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/methodProperties.json
@@ -0,0 +1,29 @@
+{
+ "class" : {
+ "initialize" : "dkh 07/02/2015 15:33" },
+ "instance" : {
+ "clientListColumnLabels" : "dkh 07/02/2015 16:20",
+ "clientListEntries" : "dkh 07/02/2015 16:22",
+ "clientListHeading" : "dkh 07/03/2015 15:54",
+ "objCreationCounts" : "dkh 07/03/2015 17:17",
+ "objectCreationMethodToClassMap" : "dkh 07/03/2015 17:03",
+ "overallTotal" : "dkh 07/02/2015 15:19",
+ "parentEntry:" : "dkh 07/02/2015 15:31",
+ "printSampleOn:" : "dkh 07/03/2015 15:54",
+ "printSampleString" : "dkh 07/02/2015 16:25",
+ "profMon" : "dkh 07/02/2015 15:15",
+ "profMon:" : "dkh 07/02/2015 15:15",
+ "profMonitor" : "dkh 07/03/2015 17:27",
+ "profMonitorEntries" : "dkh 07/02/2015 16:45",
+ "sortKey" : "dkh 07/02/2015 16:23",
+ "sortKey:" : "dkh 07/02/2015 16:23",
+ "tally" : "dkh 07/02/2015 15:15",
+ "tally:" : "dkh 07/02/2015 15:15",
+ "tallyClass" : "dkh 07/02/2015 15:15",
+ "tallyClass:" : "dkh 07/03/2015 15:58",
+ "tallyClassName" : "dkh 07/03/2015 15:53",
+ "tallyLimit" : "dkh 07/02/2015 16:24",
+ "tallying" : "dkh 07/02/2015 16:48",
+ "totalSamples" : "dkh 07/02/2015 16:50",
+ "totalTally" : "dkh 07/02/2015 16:46",
+ "windowLabel" : "dkh 07/03/2015 15:54" } }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/properties.json b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/properties.json
new file mode 100644
index 000000000..ae5517500
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassEntry.class/properties.json
@@ -0,0 +1,19 @@
+{
+ "category" : "Tode-GemStone-Server-Core",
+ "classinstvars" : [
+ ],
+ "classvars" : [
+ ],
+ "commentStamp" : "",
+ "instvars" : [
+ "profMon",
+ "tallyClass",
+ "tallyClassName",
+ "tally",
+ "sortKey",
+ "clientListEntries" ],
+ "name" : "TDProfMonitorClassEntry",
+ "pools" : [
+ ],
+ "super" : "Object",
+ "type" : "normal" }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassTallyEntry.class/README.md b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassTallyEntry.class/README.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassTallyEntry.class/class/initialize.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassTallyEntry.class/class/initialize.st
new file mode 100644
index 000000000..b41b64d3b
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassTallyEntry.class/class/initialize.st
@@ -0,0 +1,8 @@
+as yet unclassified
+initialize
+ "self initialize"
+
+ TDTopezServer
+ registerEditorClass: TDProfMonClassEntryClientListElementBuilder
+ for: TDProfMonitorEntry
+ aspect: #'profMonResults'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassTallyEntry.class/instance/classInstancesCreated.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassTallyEntry.class/instance/classInstancesCreated.st
new file mode 100644
index 000000000..efd2a3f7a
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassTallyEntry.class/instance/classInstancesCreated.st
@@ -0,0 +1,3 @@
+accessing
+classInstancesCreated
+ self halt
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassTallyEntry.class/instance/printSampleOn..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassTallyEntry.class/instance/printSampleOn..st
new file mode 100644
index 000000000..8b94b29f3
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassTallyEntry.class/instance/printSampleOn..st
@@ -0,0 +1,20 @@
+reporting
+printSampleOn: aStream
+ | tallyPct totalPct sortKey |
+ sortKey := self profMon sortKey.
+ sortKey = 'tally'
+ ifTrue: [
+ tallyPct := self tally asFloat * 100.0 / self overallTotal.
+ aStream
+ nextPutAll: (self tally asString width: -10);
+ nextPutAll: ' ';
+ nextPutAll: (tallyPct asStringUsingFormat: #(-6 2 false));
+ nextPutAll: ' ' ]
+ ifFalse: [
+ totalPct := self total asFloat * 100.0 / self overallTotal.
+ aStream
+ nextPutAll: (self total asString width: -10);
+ nextPutAll: ' ';
+ nextPutAll: (totalPct asStringUsingFormat: #(-5 1 false));
+ nextPutAll: ' ' ].
+ aStream nextPutAll: (self profMonEntry asStringWidth: 25)
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassTallyEntry.class/methodProperties.json b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassTallyEntry.class/methodProperties.json
new file mode 100644
index 000000000..92dab5269
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassTallyEntry.class/methodProperties.json
@@ -0,0 +1,6 @@
+{
+ "class" : {
+ "initialize" : "dkh 07/03/2015 13:25" },
+ "instance" : {
+ "classInstancesCreated" : "dkh 07/03/2015 16:56",
+ "printSampleOn:" : "dkh 07/02/2015 16:41" } }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassTallyEntry.class/properties.json b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassTallyEntry.class/properties.json
new file mode 100644
index 000000000..de2201b47
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorClassTallyEntry.class/properties.json
@@ -0,0 +1,14 @@
+{
+ "category" : "Tode-GemStone-Server-Core",
+ "classinstvars" : [
+ ],
+ "classvars" : [
+ ],
+ "commentStamp" : "",
+ "instvars" : [
+ ],
+ "name" : "TDProfMonitorClassTallyEntry",
+ "pools" : [
+ ],
+ "super" : "TDProfMonitorEntry",
+ "type" : "normal" }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/children.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/children.st
index 2ea0e2750..b6dbfa335 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/children.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/children.st
@@ -5,7 +5,7 @@ children
children ifNil: [ ^ #() ].
^ children
collect: [ :each |
- TDProfMonitorEntry new
+ self class new
profMon: profMon;
profMonEntry: each;
master: self;
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/clientEntryListColumnLabels.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/clientEntryListColumnLabels.st
new file mode 100644
index 000000000..7855dec6b
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/clientEntryListColumnLabels.st
@@ -0,0 +1,18 @@
+as yet unclassified
+clientEntryListColumnLabels
+ | list |
+ list := Array new.
+ self fullEntryReport
+ ifTrue: [
+ list
+ add: ' % % Parent';
+ add: ' self total total local Method';
+ add: ' tally total Time Time ms % Child';
+ add: ' ----- ----- ----- ----- ---------- ----- -----------' ]
+ ifFalse: [
+ list
+ add: ' Parent';
+ add: ' total Method';
+ add: ' tally total % Child';
+ add: ' ---------- ---------- ------ -----------' ].
+ ^ list
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/fullEntryReport.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/fullEntryReport.st
new file mode 100644
index 000000000..6726fa331
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/fullEntryReport.st
@@ -0,0 +1,3 @@
+as yet unclassified
+fullEntryReport
+ ^ self profMon tallying = 'execTime'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/listIndex.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/listIndex.st
index 568e16c2f..4f5ee1456 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/listIndex.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/listIndex.st
@@ -1,3 +1,3 @@
as yet unclassified
listIndex
- ^ self profMon profMonResults indexOf: self
\ No newline at end of file
+ ^ self profMon clientListEntries indexOf: self
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/methodTallyMs.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/methodTallyMs.st
new file mode 100644
index 000000000..bfa48daf9
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/methodTallyMs.st
@@ -0,0 +1,3 @@
+as yet unclassified
+methodTallyMs
+ ^ self tally * self overallElapsedTime asFloat / self overallTotalSamples
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/methodMs.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/methodTotalMs.st
similarity index 87%
rename from repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/methodMs.st
rename to repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/methodTotalMs.st
index e573994dd..175a11a2f 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/methodMs.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/methodTotalMs.st
@@ -1,3 +1,3 @@
as yet unclassified
-methodMs
+methodTotalMs
^ self total * self overallElapsedTime asFloat / self overallTotalSamples
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/parents.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/parents.st
index 6322762b2..133cd90c9 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/parents.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/parents.st
@@ -5,7 +5,7 @@ parents
parents ifNil: [ ^ #() ].
^ parents
collect: [ :each |
- TDProfMonitorEntry new
+ self class new
profMon: profMon;
profMonEntry: each;
master: self;
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printChildOn..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printChildOn..st
index 5c4771ae7..bf9d93ece 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printChildOn..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printChildOn..st
@@ -6,13 +6,17 @@ printChildOn: aStream
methodMs := self master total * elapsedTime asFloat / totalSamples.
cMap := self master childTallies.
ct := cMap at: self profMonEntry otherwise: 0.
+ self printParentChildSpacerOn: aStream.
+ self fullEntryReport
+ ifTrue: [
+ aStream
+ nextPutAll:
+ (ct * elapsedTime asFloat / totalSamples asStringUsingFormat: #(-10 1 false));
+ nextPutAll: ' ';
+ nextPutAll:
+ (ct * elapsedTime * 100.0 / totalSamples / methodMs
+ asStringUsingFormat: #(-5 1 false)) ]
+ ifFalse: [ self printParentChildTallyPctOn: aStream ].
aStream
- nextPutAll: ' ';
- nextPutAll:
- (ct * elapsedTime asFloat / totalSamples asStringUsingFormat: #(-6 1 false));
- nextPutAll: ' ';
- nextPutAll:
- (ct * elapsedTime * 100.0 / totalSamples / methodMs
- asStringUsingFormat: #(-6 1 false));
- nextPutAll: ' ';
+ nextPutAll: ' ';
nextPutAll: (self profMonEntry asStringWidth: 12)
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printParentChildSpacerOn..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printParentChildSpacerOn..st
new file mode 100644
index 000000000..eff050e65
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printParentChildSpacerOn..st
@@ -0,0 +1,5 @@
+as yet unclassified
+printParentChildSpacerOn: aStream
+ self fullEntryReport
+ ifTrue: [ aStream nextPutAll: ' ' ]
+ ifFalse: [ aStream nextPutAll: ' ' ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printParentChildTallyPctOn..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printParentChildTallyPctOn..st
new file mode 100644
index 000000000..b61a73525
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printParentChildTallyPctOn..st
@@ -0,0 +1,14 @@
+as yet unclassified
+printParentChildTallyPctOn: aStream
+ aStream
+ nextPutAll: (self tally asString width: -10);
+ nextPutAll: ' ';
+ nextPutAll: (self total asString width: -10);
+ nextPutAll: ' '.
+ master total = 0
+ ifTrue: [ aStream nextPutAll: (0.0 asStringUsingFormat: #(-6 1 false)) ]
+ ifFalse: [
+ aStream
+ nextPutAll:
+ (self total * 100.0 / master total asStringUsingFormat: #(-6 1 false)) ].
+ aStream nextPutAll: ' '
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printParentOn..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printParentOn..st
index b2304e995..9da1ae0af 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printParentOn..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printParentOn..st
@@ -6,13 +6,17 @@ printParentOn: aStream
methodMs := self master total * elapsedTime asFloat / totalSamples.
pMap := self master parentTallies.
pt := pMap at: self profMonEntry otherwise: 0.
+ self printParentChildSpacerOn: aStream.
+ self fullEntryReport
+ ifTrue: [
+ aStream
+ nextPutAll:
+ (pt * elapsedTime asFloat / totalSamples asStringUsingFormat: #(-10 1 false));
+ nextPutAll: ' ';
+ nextPutAll:
+ (pt * elapsedTime * 100.0 / totalSamples / methodMs
+ asStringUsingFormat: #(-5 1 false)) ]
+ ifFalse: [ self printParentChildTallyPctOn: aStream ].
aStream
- nextPutAll: ' ';
- nextPutAll:
- (pt * elapsedTime asFloat / totalSamples asStringUsingFormat: #(-6 1 false));
- nextPutAll: ' ';
- nextPutAll:
- (pt * elapsedTime * 100.0 / totalSamples / methodMs
- asStringUsingFormat: #(-6 1 false));
- nextPutAll: ' ';
+ nextPutAll: ' ';
nextPutAll: (self profMonEntry asStringWidth: 12)
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printSampleOn..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printSampleOn..st
index e55f8d4fb..bf89a599d 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printSampleOn..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printSampleOn..st
@@ -1,15 +1,24 @@
as yet unclassified
printSampleOn: aStream
- | tallyPct totalPct |
- tallyPct := self tally asFloat * 100.0 / self overallTotal.
- totalPct := self total asFloat * 100.0 / self overallTotal.
- aStream
- nextPutAll: (self tally asString width: -4);
- nextPutAll: ' ';
- nextPutAll: (tallyPct asStringUsingFormat: #(-6 2 false));
- nextPutAll: ' ';
- nextPutAll: (totalPct asStringUsingFormat: #(-6 2 false));
- nextPutAll: ' ';
- nextPutAll: (self methodMs asStringUsingFormat: #(-5 1 false));
- nextPutAll: ' ';
- nextPutAll: (self profMonEntry asStringWidth: 25)
\ No newline at end of file
+ | tallyPct totalPct sortKey |
+ sortKey := self profMon sortKey.
+ sortKey = 'tally'
+ ifTrue: [
+ tallyPct := self tally asFloat * 100.0 / self overallTotal.
+ aStream
+ nextPutAll: (self tally asString width: -10);
+ nextPutAll: ' ';
+ nextPutAll: (self methodTallyMs asStringUsingFormat: #(-10 1 false));
+ nextPutAll: ' ';
+ nextPutAll: (tallyPct asStringUsingFormat: #(-6 2 false));
+ nextPutAll: ' ' ]
+ ifFalse: [
+ totalPct := self total asFloat * 100.0 / self overallTotal.
+ aStream
+ nextPutAll: (self total asString width: -10);
+ nextPutAll: ' ';
+ nextPutAll: (self methodTotalMs asStringUsingFormat: #(-10 1 false));
+ nextPutAll: ' ';
+ nextPutAll: (totalPct asStringUsingFormat: #(-5 1 false));
+ nextPutAll: ' ' ].
+ aStream nextPutAll: (self profMonEntry asStringWidth: 25)
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printSenderOn..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printSenderOn..st
index f80370053..0ee2f85c0 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printSenderOn..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/printSenderOn..st
@@ -3,18 +3,35 @@ printSenderOn: aStream
| tallyPct totalPct methodMs elapsedPct |
tallyPct := self tally asFloat * 100.0 / self overallTotalSamples.
totalPct := self total asFloat * 100.0 / self overallTotalSamples.
- methodMs := self methodMs.
+ methodMs := self methodTotalMs.
elapsedPct := self tally * self overallElapsedTime * 100.0
/ self overallTotalSamples / methodMs.
+ aStream nextPut: $=.
+ self fullEntryReport
+ ifTrue: [
+ aStream
+ nextPutAll: (self tally asString width: -5);
+ nextPutAll: ' ';
+ nextPutAll: (self total asString width: -5);
+ nextPutAll: ' '.
+ aStream
+ nextPutAll: (tallyPct asStringUsingFormat: #(-5 1 false));
+ nextPutAll: ' ';
+ nextPutAll: (totalPct asStringUsingFormat: #(-5 1 false));
+ nextPutAll: ' ';
+ nextPutAll: (methodMs asStringUsingFormat: #(-10 1 false));
+ nextPutAll: ' ';
+ nextPutAll: (elapsedPct asStringUsingFormat: #(-5 1 false)) ]
+ ifFalse: [
+ aStream
+ nextPutAll: (self tally asString width: -10);
+ nextPutAll: ' ';
+ nextPutAll: (self total asString width: -10);
+ nextPutAll: ' '.
+ aStream
+ nextPutAll:
+ (self total asFloat * 100.0 / self overallTotal
+ asStringUsingFormat: #(-6 1 false)) ].
aStream
- nextPutAll: (self tally asString width: -4);
- nextPutAll: ' ';
- nextPutAll: (tallyPct asStringUsingFormat: #(-6 2 false));
- nextPutAll: ' ';
- nextPutAll: (totalPct asStringUsingFormat: #(-6 2 false));
- nextPutAll: ' ';
- nextPutAll: (methodMs asStringUsingFormat: #(-6 1 false));
- nextPutAll: ' ';
- nextPutAll: (elapsedPct asStringUsingFormat: #(-6 1 false));
nextPutAll: ' ';
nextPutAll: (self profMonEntry asStringWidth: 12)
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/windowLabel.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/windowLabel.st
new file mode 100644
index 000000000..281854cf0
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/instance/windowLabel.st
@@ -0,0 +1,3 @@
+as yet unclassified
+windowLabel
+ ^ self profMonEntry asStringWidth: 0
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/methodProperties.json b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/methodProperties.json
index 51d68a61a..c2ff145fc 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/methodProperties.json
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorEntry.class/methodProperties.json
@@ -3,12 +3,15 @@
"initialize" : "dkh 09/27/2013 21:06" },
"instance" : {
"childTallies" : "dkh 09/27/2013 21:18",
- "children" : "dkh 09/27/2013 21:13",
- "listIndex" : "dkh 09/27/2013 17:17",
+ "children" : "dkh 07/02/2015 16:51",
+ "clientEntryListColumnLabels" : "dkh 06/12/2015 11:27",
+ "fullEntryReport" : "dkh 06/11/2015 15:12",
+ "listIndex" : "dkh 07/02/2015 10:06",
"master" : "dkh 09/27/2013 20:37",
"master:" : "dkh 09/27/2013 20:37",
"method" : "dkh 09/27/2013 21:54",
- "methodMs" : "dkh 09/28/2013 06:58",
+ "methodTallyMs" : "dkh 06/11/2015 13:48",
+ "methodTotalMs" : "dkh 06/11/2015 13:47",
"overallElapsedTime" : "dkh 09/27/2013 20:50",
"overallTotal" : "dkh 09/27/2013 16:42",
"overallTotalSamples" : "dkh 09/27/2013 20:45",
@@ -17,16 +20,18 @@
"parentIndex" : "dkh 09/27/2013 21:43",
"parentIndex:" : "dkh 09/27/2013 21:43",
"parentTallies" : "dkh 09/27/2013 21:11",
- "parents" : "dkh 09/27/2013 21:13",
- "printChildOn:" : "dkh 09/27/2013 21:17",
+ "parents" : "dkh 07/02/2015 16:51",
+ "printChildOn:" : "dkh 06/11/2015 16:05",
"printChildString" : "dkh 09/27/2013 20:58",
"printLabelOn:" : "dkh 09/27/2013 21:37",
"printLabelString" : "dkh 09/27/2013 21:37",
- "printParentOn:" : "dkh 09/27/2013 21:17",
+ "printParentChildSpacerOn:" : "dkh 06/12/2015 11:25",
+ "printParentChildTallyPctOn:" : "dkh 06/12/2015 11:28",
+ "printParentOn:" : "dkh 06/11/2015 16:05",
"printParentString" : "dkh 09/27/2013 19:43",
- "printSampleOn:" : "dkh 09/28/2013 07:06",
+ "printSampleOn:" : "dkh 06/12/2015 11:26",
"printSampleString" : "dkh 09/27/2013 17:10",
- "printSenderOn:" : "dkh 09/28/2013 07:00",
+ "printSenderOn:" : "dkh 06/12/2015 11:28",
"printSenderString" : "dkh 09/27/2013 21:11",
"profMon" : "dkh 09/27/2013 16:29",
"profMon:" : "dkh 09/27/2013 16:30",
@@ -34,4 +39,5 @@
"profMonEntry:" : "dkh 09/27/2013 16:14",
"sampleTally" : "dkh 09/27/2013 21:10",
"tally" : "dkh 09/27/2013 16:25",
- "total" : "dkh 09/27/2013 16:50" } }
+ "total" : "dkh 09/27/2013 16:50",
+ "windowLabel" : "dkh 07/03/2015 13:34" } }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/README.md b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/README.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/classInstancesCreated.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/classInstancesCreated.st
new file mode 100644
index 000000000..3824737c8
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/classInstancesCreated.st
@@ -0,0 +1,3 @@
+accessing
+classInstancesCreated
+ ^ self profMon objectCreationMethodToClassMap at: self profMonEntry cmethod
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/fullEntryReport.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/fullEntryReport.st
new file mode 100644
index 000000000..fbe935028
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/fullEntryReport.st
@@ -0,0 +1,3 @@
+accessing
+fullEntryReport
+ ^ false
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/objCreationCounts.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/objCreationCounts.st
new file mode 100644
index 000000000..66ec3f163
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/objCreationCounts.st
@@ -0,0 +1,3 @@
+accessing
+objCreationCounts
+ ^ self profMon objCreationCounts
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/printChildOn..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/printChildOn..st
new file mode 100644
index 000000000..94c6feb26
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/printChildOn..st
@@ -0,0 +1,11 @@
+reporting
+printChildOn: aStream
+ | cMap ct totalSamples |
+ totalSamples := self overallTotalSamples.
+ cMap := self master childTallies.
+ ct := cMap at: self profMonEntry otherwise: 0.
+ self printParentChildSpacerOn: aStream.
+ self printParentChildTallyPctOn: aStream.
+ aStream
+ nextPutAll: ' ';
+ nextPutAll: (self profMonEntry asStringWidth: 12)
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/printParentOn..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/printParentOn..st
new file mode 100644
index 000000000..45488e7a8
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/printParentOn..st
@@ -0,0 +1,11 @@
+reporting
+printParentOn: aStream
+ | pMap pt totalSamples |
+ totalSamples := self overallTotalSamples.
+ pMap := self master parentTallies.
+ pt := pMap at: self profMonEntry otherwise: 0.
+ self printParentChildSpacerOn: aStream.
+ self printParentChildTallyPctOn: aStream.
+ aStream
+ nextPutAll: ' ';
+ nextPutAll: (self profMonEntry asStringWidth: 12)
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/printSampleOn..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/printSampleOn..st
new file mode 100644
index 000000000..8b94b29f3
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/printSampleOn..st
@@ -0,0 +1,20 @@
+reporting
+printSampleOn: aStream
+ | tallyPct totalPct sortKey |
+ sortKey := self profMon sortKey.
+ sortKey = 'tally'
+ ifTrue: [
+ tallyPct := self tally asFloat * 100.0 / self overallTotal.
+ aStream
+ nextPutAll: (self tally asString width: -10);
+ nextPutAll: ' ';
+ nextPutAll: (tallyPct asStringUsingFormat: #(-6 2 false));
+ nextPutAll: ' ' ]
+ ifFalse: [
+ totalPct := self total asFloat * 100.0 / self overallTotal.
+ aStream
+ nextPutAll: (self total asString width: -10);
+ nextPutAll: ' ';
+ nextPutAll: (totalPct asStringUsingFormat: #(-5 1 false));
+ nextPutAll: ' ' ].
+ aStream nextPutAll: (self profMonEntry asStringWidth: 25)
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/printSenderOn..st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/printSenderOn..st
new file mode 100644
index 000000000..33d2c4b3e
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/printSenderOn..st
@@ -0,0 +1,18 @@
+reporting
+printSenderOn: aStream
+ | tallyPct totalPct elapsdPct |
+ tallyPct := self tally asFloat * 100.0 / self overallTotalSamples.
+ totalPct := self total asFloat * 100.0 / self overallTotalSamples.
+ aStream nextPut: $=.
+ aStream
+ nextPutAll: (self tally asString width: -10);
+ nextPutAll: ' ';
+ nextPutAll: (self total asString width: -10);
+ nextPutAll: ' '.
+ aStream
+ nextPutAll:
+ (self total asFloat * 100.0 / self overallTotal
+ asStringUsingFormat: #(-6 1 false)).
+ aStream
+ nextPutAll: ' ';
+ nextPutAll: (self profMonEntry asStringWidth: 12)
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/profMonitor.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/profMonitor.st
new file mode 100644
index 000000000..b711bf196
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/profMonitor.st
@@ -0,0 +1,3 @@
+accessing
+profMonitor
+ ^ self profMon profMonitor
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/tallyClass.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/tallyClass.st
new file mode 100644
index 000000000..7fb344a7e
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/tallyClass.st
@@ -0,0 +1,3 @@
+accessing
+tallyClass
+ ^ self profMon tallyClass
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/tallyClassName.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/tallyClassName.st
new file mode 100644
index 000000000..54d235056
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/tallyClassName.st
@@ -0,0 +1,3 @@
+accessing
+tallyClassName
+ ^ self profMon tallyClassName
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/windowLabel.st b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/windowLabel.st
new file mode 100644
index 000000000..93aa11368
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/instance/windowLabel.st
@@ -0,0 +1,3 @@
+accessing
+windowLabel
+ ^ self tallyClassName , ' creation for ' , super windowLabel
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/methodProperties.json b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/methodProperties.json
new file mode 100644
index 000000000..4f8f60f60
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/methodProperties.json
@@ -0,0 +1,15 @@
+{
+ "class" : {
+ },
+ "instance" : {
+ "classInstancesCreated" : "dkh 07/03/2015 17:03",
+ "fullEntryReport" : "dkh 07/02/2015 17:01",
+ "objCreationCounts" : "dkh 07/03/2015 17:16",
+ "printChildOn:" : "dkh 07/02/2015 17:04",
+ "printParentOn:" : "dkh 07/02/2015 17:02",
+ "printSampleOn:" : "dkh 07/02/2015 14:43",
+ "printSenderOn:" : "dkh 07/02/2015 17:02",
+ "profMonitor" : "dkh 07/03/2015 17:24",
+ "tallyClass" : "dkh 07/03/2015 13:41",
+ "tallyClassName" : "dkh 07/03/2015 16:01",
+ "windowLabel" : "dkh 07/03/2015 15:54" } }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/properties.json b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/properties.json
new file mode 100644
index 000000000..4de6184ac
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfMonitorObjectCreationEntry.class/properties.json
@@ -0,0 +1,14 @@
+{
+ "category" : "Tode-GemStone-Server-Core",
+ "classinstvars" : [
+ ],
+ "classvars" : [
+ ],
+ "commentStamp" : "",
+ "instvars" : [
+ ],
+ "name" : "TDProfMonitorObjectCreationEntry",
+ "pools" : [
+ ],
+ "super" : "TDProfMonitorEntry",
+ "type" : "normal" }
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/installExampleOn..st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/installExampleOn..st
index 5aab3ac90..04f7e213e 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/installExampleOn..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/installExampleOn..st
@@ -1,3 +1,3 @@
-as yet unclassified
+initialization
installExampleOn: aTDTopezServer
"nothing for now"
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/installOn..st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/installOn..st
deleted file mode 100644
index eb4371ec2..000000000
--- a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/installOn..st
+++ /dev/null
@@ -1,3 +0,0 @@
-as yet unclassified
-installOn: aTDTopezServer
- super installOn: aTDTopezServer
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pf.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pf.st
index 3eadba534..b5b11574d 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pf.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pf.st
@@ -1,4 +1,11 @@
-as yet unclassified
pf
+pf
+ "self install"
+
- ^ [ :topez :objIn :tokens :command | self performSubCommand: topez objIn: objIn todeCommand: command ]
\ No newline at end of file
+ ^ [ :topez :objIn :tokens :command |
+ self
+ performSubCommand: topez
+ objIn: objIn
+ commandOptions: {#('help' $h #'none')}
+ todeCommand: command ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfManPage.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfManPage.st
index 20167013c..762025cef 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfManPage.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfManPage.st
@@ -1,17 +1,42 @@
-as yet unclassified
+pf
pfManPage
- ^ 'NAME
- pf - control ProfMonitor
+ | manPage |
+ manPage := TDManPage
+ commandName: 'pf'
+ fromString:
+ 'NAME
+ pf - profile Smalltalk method execution
SYNOPSIS
- pf start
- pf status
- pf stop
- pf gather
- pf report []
- pf vew []
- pf clean
+ pf []
DESCRIPTION
- default is 100
-'
\ No newline at end of file
+ The pf commands provides access to the ProfMonitor services.
+
+ The is the name of a specific profiling operation.
+
+ Commands:
+ clean Stop and clean up resources used by pf command
+ gather Analyze samples from file and produce report data structure
+ report Generate a string-based report from sampled data
+ start Begin sampling data
+ status Status of active prof monitor
+ stop Stop sampling
+ view Open prof monitor browser
+
+EXAMPLES
+
+ pf start
+ pf report
+ pf view
+'.
+ manPage subCommands
+ at: 'start' put: self pfstartManPage;
+ at: 'status' put: self pfstatusManPage;
+ at: 'stop' put: self pfstopManPage;
+ at: 'gather' put: self pfgatherManPage;
+ at: 'report' put: self pfreportManPage;
+ at: 'view' put: self pfviewManPage;
+ at: 'clean' put: self pfcleanManPage;
+ yourself.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfcleanManPage.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfcleanManPage.st
new file mode 100644
index 000000000..08add3483
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfcleanManPage.st
@@ -0,0 +1,18 @@
+pf
+pfcleanManPage
+ | manPage |
+ manPage := TDManPage
+ commandName: 'clean'
+ fromString:
+ 'NAME
+ pf clean - Stop and clean up resources used by pf command
+
+SYNOPSIS
+ pf clean
+
+DESCRIPTION
+
+EXAMPLES
+ pf clean
+'.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfgatherManPage.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfgatherManPage.st
new file mode 100644
index 000000000..d766070ca
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfgatherManPage.st
@@ -0,0 +1,18 @@
+pf
+pfgatherManPage
+ | manPage |
+ manPage := TDManPage
+ commandName: 'gather'
+ fromString:
+ 'NAME
+ pf gather - Analyze samples from file and produce report data structure
+
+SYNOPSIS
+ pf gather
+
+DESCRIPTION
+
+EXAMPLES
+ pf gather
+'.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfreportManPage.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfreportManPage.st
new file mode 100644
index 000000000..c4cc104bd
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfreportManPage.st
@@ -0,0 +1,18 @@
+pf
+pfreportManPage
+ | manPage |
+ manPage := TDManPage
+ commandName: 'report'
+ fromString:
+ 'NAME
+ pf report - Generate a string-based report from sampled data
+
+SYNOPSIS
+ pf report [--tally=]
+
+DESCRIPTION
+
+EXAMPLES
+ pf report
+'.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfstartManPage.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfstartManPage.st
new file mode 100644
index 000000000..8957a1f3d
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfstartManPage.st
@@ -0,0 +1,15 @@
+pf
+pfstartManPage
+ | manPage |
+ manPage := TDManPage commandName: 'start' fromString: 'NAME
+ pf start - Begin sampling data
+
+SYNOPSIS
+ pf start
+
+DESCRIPTION
+
+EXAMPLES
+ pf start
+'.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfstatusManPage.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfstatusManPage.st
new file mode 100644
index 000000000..a7a4dcdc4
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfstatusManPage.st
@@ -0,0 +1,18 @@
+pf
+pfstatusManPage
+ | manPage |
+ manPage := TDManPage
+ commandName: 'status'
+ fromString:
+ 'NAME
+ pf status - Generate a string-based status from sampled data
+
+SYNOPSIS
+ pf status
+
+DESCRIPTION
+
+EXAMPLES
+ pf status
+'.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfstopManPage.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfstopManPage.st
new file mode 100644
index 000000000..70bb08174
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfstopManPage.st
@@ -0,0 +1,18 @@
+pf
+pfstopManPage
+ | manPage |
+ manPage := TDManPage
+ commandName: 'stop'
+ fromString:
+ 'NAME
+ pf stop - Stop sampling
+
+SYNOPSIS
+ pf stop
+
+DESCRIPTION
+
+EXAMPLES
+ pf stop
+'.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfviewManPage.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfviewManPage.st
new file mode 100644
index 000000000..4d56c01be
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/pfviewManPage.st
@@ -0,0 +1,27 @@
+pf
+pfviewManPage
+ | manPage |
+ manPage := TDManPage
+ commandName: 'view'
+ fromString:
+ 'NAME
+ pf view - Open prof monitor browser
+
+SYNOPSIS
+ pf view [--label=] [--limit=] [--sort=tally|total]
+
+DESCRIPTION
+
+OPTIONS
+
+ --label=
+ --limit=
+ --sort=tally|total
+ total is default
+
+EXAMPLES
+ pf view
+ pf view --label=`Test Case 1`
+ pf view --label=`Test Case 1` --limit=25 --sort=total
+'.
+ ^ manPage
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/priority.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/priority.st
index 1b72f3b54..726a163d3 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/priority.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/priority.st
@@ -1,4 +1,4 @@
-as yet unclassified
+initialization
priority
^ 50
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/profMonitor..st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/profMonitor..st
index 925179c6e..26952dcef 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/profMonitor..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/profMonitor..st
@@ -1,3 +1,3 @@
-as yet unclassified
+pf
profMonitor: aProfMonitor
ProfMon := aProfMonitor
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/profMonitor.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/profMonitor.st
index badd7a090..0e9c3bd1d 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/profMonitor.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/profMonitor.st
@@ -1,3 +1,3 @@
-as yet unclassified
+pf
profMonitor
^ ProfMon
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/toolName.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/toolName.st
index 663c5c980..bcd5b3c13 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/toolName.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/toolName.st
@@ -1,3 +1,3 @@
-as yet unclassified
+initialization
toolName
^ 'profiler'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/toolReadMe.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/toolReadMe.st
index 21b376a7b..e0285ae01 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/toolReadMe.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/class/toolReadMe.st
@@ -1,3 +1,3 @@
-as yet unclassified
+initialization
toolReadMe
^ self commandPath , ' provides ProfMonitor suppport.'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/defaultLabel.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/defaultLabel.st
new file mode 100644
index 000000000..26a89bcd2
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/defaultLabel.st
@@ -0,0 +1,3 @@
+private
+defaultLabel
+ ^ 'Profile Monitor'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/defaultSortKey.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/defaultSortKey.st
new file mode 100644
index 000000000..f5bf40edd
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/defaultSortKey.st
@@ -0,0 +1,3 @@
+private
+defaultSortKey
+ ^ 'total'
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/defaultTallyLimit.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/defaultTallyLimit.st
new file mode 100644
index 000000000..f8888da9c
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/defaultTallyLimit.st
@@ -0,0 +1,3 @@
+private
+defaultTallyLimit
+ ^ 0
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfClean..st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfClean..st
new file mode 100644
index 000000000..8f44ac6c1
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfClean..st
@@ -0,0 +1,10 @@
+smalltalk api
+pfClean: aProfMonitor
+ aProfMonitor endTime
+ ifNotNil: [
+ [ aProfMonitor stopMonitoring ]
+ on: Error
+ do: [ :ignored | ] ].
+ [ aProfMonitor removeFile ]
+ on: Error
+ do: [ :ignored | ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfGather..st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfGather..st
new file mode 100644
index 000000000..4adac87e9
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfGather..st
@@ -0,0 +1,4 @@
+smalltalk api
+pfGather: aProfMonitor
+ self pfStop: aProfMonitor.
+ aProfMonitor results ifNil: [ aProfMonitor gatherResults ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfMonitor.block..st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfMonitor.block..st
new file mode 100644
index 000000000..cffec589b
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfMonitor.block..st
@@ -0,0 +1,5 @@
+smalltalk api
+pfMonitor: aProfMon block: aBlock
+ self pfStart: aProfMon.
+ aBlock
+ ensure: [ self pfStop: aProfMon ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfReport..st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfReport..st
new file mode 100644
index 000000000..0ee4c819d
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfReport..st
@@ -0,0 +1,3 @@
+smalltalk api
+pfReport: aProfMon
+ self pfReport: aProfMon tallyLimit: self defaultTallyLimit
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfReport.tallyLimit..st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfReport.tallyLimit..st
new file mode 100644
index 000000000..092f47337
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfReport.tallyLimit..st
@@ -0,0 +1,5 @@
+smalltalk api
+pfReport: aProfMon tallyLimit: limit
+ self pfStop: aProfMon.
+ self pfGather: aProfMon.
+ ^ aProfMon reportDownTo: limit
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfStart..1.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfStart..1.st
new file mode 100644
index 000000000..8a33458e1
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfStart..1.st
@@ -0,0 +1,5 @@
+smalltalk api
+pfStart
+ ^ ProfMonitor new
+ startMonitoring;
+ yourself
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfStatus..st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfStatus..st
new file mode 100644
index 000000000..b29713235
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfStatus..st
@@ -0,0 +1,9 @@
+smalltalk api
+pfStatus: aProfMon
+ aProfMon == nil
+ ifTrue: [ ^ 'not started' ].
+ aProfMon endTime == nil
+ ifTrue: [ ^ 'started at ' , aProfMon startTime printString ].
+ aProfMon results == nil
+ ifTrue: [ ^ 'results not gathered, ended at ' , aProfMon endTime printString ].
+ ^ 'results available, ended at ' , aProfMon endTime printString
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfStop..st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfStop..st
new file mode 100644
index 000000000..339f32067
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfStop..st
@@ -0,0 +1,5 @@
+smalltalk api
+pfStop: aProfMonitor
+ aProfMonitor endTime ~~ nil
+ ifTrue: [ ^ self ].
+ aProfMonitor stopMonitoring
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfview..st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfView.label.limit.sortKey..st
similarity index 55%
rename from repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfview..st
rename to repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfView.label.limit.sortKey..st
index 2e84c5614..0017a7379 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfview..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfView.label.limit.sortKey..st
@@ -1,15 +1,15 @@
-as yet unclassified
-pfview: label
+smalltalk api
+pfView: aProfMon label: label limit: limit sortKey: sortKey
"pf view"
- | profMon profMonitorView |
- self pfstop.
- profMon := self profMonitor.
- profMon results ifNil: [ profMon gatherResults ].
+ | profMonitorView |
+ self pfStop: aProfMon.
+ self pfGather: aProfMon.
profMonitorView := TDProfMonitor new
- profMon: profMon;
+ sortKey: sortKey;
+ tallyLimit: limit;
+ profMonitor: aProfMon;
yourself.
- profMon removeResults.
profMonitorView
editUsing:
((TDEditorSpec topez: topez editorAspect: #'profMonResults')
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfclean.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfclean.st
index 0e20c7f85..4627396af 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfclean.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfclean.st
@@ -1,16 +1,8 @@
-as yet unclassified
+tode commands
pfclean
"pf clean"
self profMonitor
ifNotNil: [ :profMon |
- [
- profMon endTime
- ifNotNil: [
- [ profMon stopMonitoring ]
- on: Error
- do: [ :ex | ] ].
- profMon removeFile ]
- on: Error
- do: [ :ex | ].
+ self pfClean: profMon.
self profMonitor: nil ]
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfgather.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfgather.st
index c2f2ec435..9ccd97513 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfgather.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfgather.st
@@ -1,4 +1,4 @@
-as yet unclassified
+tode commands
pfgather
"pf gather"
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfmonitor..st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfmonitor..st
index 7a75ff4db..02a400f2d 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfmonitor..st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfmonitor..st
@@ -1,5 +1,3 @@
-as yet unclassified
+tode commands
pfmonitor: aBlock
- self pfstart.
- aBlock
- ensure: [ self pfstop ]
\ No newline at end of file
+ self pfMonitor: self profMon block: aBlock
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfreport.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfreport.st
index 84eb25e2b..9be66b7f3 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfreport.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfreport.st
@@ -1,14 +1,13 @@
-as yet unclassified
+tode commands
pfreport
"pf report"
- | profMon tally report |
- self pfstop.
- tally := 100.
- tokens size > 1
- ifTrue: [ tally := (tokens at: 2) asNumber ].
- profMon := self profMonitor.
- profMon results ifNil: [ profMon gatherResults ].
- report := profMon reportDownTo: tally.
+ | limit report |
+ self getSubcommandOptsMixedLongShort: {#('limit' nil #'required')}.
+ subOptions
+ at: 'limit'
+ ifPresent: [ :arg | limit := arg asNumber ]
+ ifAbsent: [ limit := self defaultTallyLimit ].
+ report := self pfReport: self profMonitor tallyLimit: (limit max: 1).
report editUsing: (TDEditorSpec topez: topez editorAspect: #'edit').
- ^ profMon
\ No newline at end of file
+ ^ self profMonitor
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfstart..2.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfstart..2.st
new file mode 100644
index 000000000..dc51fc301
--- /dev/null
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfstart..2.st
@@ -0,0 +1,6 @@
+tode commands
+pfstart
+ "pf start"
+
+ self pfclean.
+ self class profMonitor: self pfStart
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfstart.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfstart.st
deleted file mode 100644
index dd080dbb5..000000000
--- a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfstart.st
+++ /dev/null
@@ -1,9 +0,0 @@
-as yet unclassified
-pfstart
- "pf start"
-
- | profMon |
- self pfclean.
- profMon := ProfMonitor new.
- self class profMonitor: profMon.
- profMon startMonitoring
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfstatus.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfstatus.st
index 1942b9c70..e508c9951 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfstatus.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfstatus.st
@@ -1,13 +1,5 @@
-as yet unclassified
+tode commands
pfstatus
"pf status"
- | profMon |
- profMon := self profMonitor.
- profMon == nil
- ifTrue: [ ^ 'not started' asText ].
- profMon endTime == nil
- ifTrue: [ ^ ('started at ' , profMon startTime printString) asText ].
- profMon results == nil
- ifTrue: [ ^ ('results not gathered, ended at ' , profMon endTime printString) asText ].
- ^ ('results available, ended at ' , profMon endTime printString) asText
\ No newline at end of file
+ ^ (self pfStatus: self profMonitor) asText
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfstop.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfstop.st
index b43ab666c..bb9df118f 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfstop.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfstop.st
@@ -1,9 +1,5 @@
-as yet unclassified
+tode commands
pfstop
"pf stop"
- | profMon |
- profMon := self profMonitor.
- profMon endTime ~~ nil
- ifTrue: [ ^ self ].
- profMon stopMonitoring
\ No newline at end of file
+ self pfStop: self profMonitor
\ No newline at end of file
diff --git a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfview.st b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfview.st
index 68413f94b..77f429d65 100644
--- a/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfview.st
+++ b/repository/Tode-GemStone-Server-Core.package/TDProfileTool.class/instance/pfview.st
@@ -1,9 +1,29 @@
-as yet unclassified
+tode commands
pfview
- "pf vew [