Skip to content

Commit

Permalink
Merge remote-tracking branch 'ph/Pharo12' into 11454-UI-becomes-unres…
Browse files Browse the repository at this point in the history
…ponsive-when-blocked-on-a-custom-semaphore
  • Loading branch information
guillep committed May 29, 2024
2 parents ac67059 + 7375f01 commit 8b7f43f
Show file tree
Hide file tree
Showing 2,629 changed files with 46,279 additions and 42,582 deletions.
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/cleanup-report.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ A clear and concise description of what you expected to happen.
Do you require a refactoring? The addition of comments?

**Version information:**
- Version [e.g. Pharo 11.0]
- Version [e.g. Pharo 12.0]
- Commit [e.g. 22]

**Expected development cost**
Expand Down
2 changes: 1 addition & 1 deletion Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@ def runTests(architecture, prefix=''){
unstash "bootstrap${architecture}"
shell "bash -c 'bootstrap/scripts/run${prefix}Tests.sh ${architecture} ${env.STAGE_NAME}${prefix}'"
junit allowEmptyResults: true, testResults: "${env.STAGE_NAME}${prefix}*.xml"
} finally {
archiveArtifacts allowEmptyArchive: true, artifacts: "${env.STAGE_NAME}${prefix}*.xml", fingerprint: true
archiveArtifacts allowEmptyArchive: true, artifacts: "*.fuel", fingerprint: true
} finally {
// I am archiving the logs to check for crashes and errors.
if(fileExists('PharoDebug.log')){
shell "mv PharoDebug.log PharoDebug-${env.STAGE_NAME}${prefix}.log"
Expand Down
26 changes: 18 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
# Pharo

This repository contains sources of the [Pharo language](http://pharo.org/). Pharo is a pure object-oriented programming language and a powerful environment, focused on simplicity and immediate feedback (think IDE and OS rolled into one).
This repository contains sources of the [Pharo language](http://pharo.org/). Pharo is a pure object-oriented programming language and a powerful environment, focused on simplicity and immediate feedback (think IDE and OS rolled into one). Visit us on https://www.pharo.org or [Pharo Discord Server](https://discord.gg/QewZMZa)

<p align="center">
<a href="https://www.pharo.org">
<img alt="Pharo" src="https://img.shields.io/static/v1?style=for-the-badge&message=Pharo&color=3297d4&logo=Harbor&logoColor=FFFFFF&label=" />
</a>
<a href="https://discord.gg/QewZMZa">
<img alt="Discord online members" src="https://img.shields.io/discord/223421264751099906?color=5865F2&label=Discord&style=for-the-badge" />
</a>
<img alt="Commit activity per month" src="https://img.shields.io/github/commit-activity/m/pharo-project/pharo?style=for-the-badge" />
</p>

![Pharo screenshot](https://pbs.twimg.com/media/DBpdIGrXkAA8SJ1.jpg)

Expand All @@ -20,13 +30,13 @@ This repository contains only sources of the Pharo image. The virtual machine so

This repository is being built on a [Jenkins server](https://ci.inria.fr/pharo-ci-jenkins2) and uploaded to [files.pharo.org](https://files.pharo.org).

- [Latest build - 64bit](http://files.pharo.org/image/110/latest-64.zip)
- [Latest build - 32bit](http://files.pharo.org/image/110/latest.zip)
- [Latest build - 64bit](http://files.pharo.org/image/120/latest-64.zip)
- [Latest build - 32bit](http://files.pharo.org/image/120/latest.zip)

The minimal image contains the basic Pharo packages without the graphical user interface. It is useful as a base for server-side applications deployment.

- [Minimal image latest build - 64bit](http://files.pharo.org/image/110/latest-minimal-64.zip)
- [Minimal image latest build - 32bit](http://files.pharo.org/image/110/latest-minimal-32.zip)
- [Minimal image latest build - 64bit](http://files.pharo.org/image/120/latest-minimal-64.zip)
- [Minimal image latest build - 32bit](http://files.pharo.org/image/120/latest-minimal-32.zip)


## Bootstrapping Pharo from sources
Expand All @@ -39,13 +49,13 @@ The bootstrapping can be done on a properly-named branch using the following scr
./bootstrap/scripts/bootstrap.sh
```

This will generate and archive images at various stages of the bootstrap process up to the full image in `Pharo11.0-64bit-hhhhhhh.zip` where hhhhhhh is the hash of the current checkout. Additional information on the stages of the bootstrap and how to snapshot during the process are provided as comments in bootstrap.sh.
This will generate and archive images at various stages of the bootstrap process up to the full image in `Pharo12.0-64bit-hhhhhhh.zip` where hhhhhhh is the hash of the current checkout. Additional information on the stages of the bootstrap and how to snapshot during the process are provided as comments in bootstrap.sh.

* You can set the `BUILD_NUMBER` environment variable to a unique integer (this is typically used only for the [official builds](https://files.pharo.org/image/110/) and will default to `0` if not specified).
* You can set the `BUILD_NUMBER` environment variable to a unique integer (this is typically used only for the [official builds](https://files.pharo.org/image/120/) and will default to `0` if not specified).
* You can set the `BOOTSTRAP_ARCH` environment variable to either `64` (the default) or `32`.
* You can set the `BOOTSTRAP_REPOSITORY` and `BOOTSTRAP_CACHE` environment variables to do the bootstrap outside of the source repository.
* You can set the `BOOTSTRAP_VMTARGET` environment variable to make the bootstrap use a virtual machine already present in your system (otherwise it will download it).
* If you are on a branch that doesn't follow the expected naming convention ('`PharoX.Y`'), then the script will pick an appropriate default (such as `Pharo11.0`). To build Pharo11.0 from a custom branch, you need to set `BRANCH_NAME=Pharo11` before the bootstrap script is run.
* If you are on a branch that doesn't follow the expected naming convention ('`PharoX.Y`'), then the script will pick an appropriate default (such as `Pharo12.0`). To build Pharo12.0 from a custom branch, you need to set `BRANCH_NAME=Pharo12` before the bootstrap script is run.

### Bootstrapping with Docker

Expand Down
3 changes: 1 addition & 2 deletions bootstrap/scripts/03-metacello-bootstrap/01-loadMetacello.st
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ mcPackages := #(
'StartupPreferences'
'PragmaCollector'
'System-FileRegistry'
'Gofer-Core'
'MonticelloFileTree-Core'
'MonticelloFileTree-FileSystem-Utilities'
'Metacello-Base'
Expand Down Expand Up @@ -36,7 +35,7 @@ ConfigurationOf initialize.
MetacelloPlatform initialize.

"Init deprecated aliases for Pharo 12. To remove in Pharo 13"
{ MetacelloPlatform . MetacelloProject . MetacelloProjectSpec . MetacelloSpecLoader . MetacelloVersion . MetacelloVersionSpec } do: [ :class | class initialize ].
{ MetacelloPlatform . MetacelloProject . MetacelloProjectSpec . MetacelloTarget . MetacelloVersion . MetacelloVersionSpec } do: [ :class | class initialize ].

STONWriter initialize.

Expand Down
22 changes: 13 additions & 9 deletions bootstrap/scripts/4-build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -126,39 +126,43 @@ zip "${BOOTSTRAP_ARCHIVE_IMAGE_NAME}.zip" "${BOOTSTRAP_ARCHIVE_IMAGE_NAME}.image
# Archive binary Hermes packages
zip "${HERMES_ARCHIVE_NAME}.zip" *.hermes

# Archive RPackage definitions
# Archive Package definitions
zip "${RPACKAGE_ARCHIVE_NAME}.zip" protocolsKernel.txt

# Find st-cache path
[[ -z "${BOOTSTRAP_CACHE}" ]] && ST_CACHE='st-cache' || ST_CACHE="${BOOTSTRAP_CACHE}/st-cache"

# Installing RPackage
# Installing Package
echo $(date -u) "[Compiler] Initializing Bootstraped Image"
${VM} "${COMPILER_IMAGE_NAME}.image" # I have to run once the image so the next time it starts the CommandLineHandler.

echo $(date -u) "[Compiler] Adding more Kernel packages"
${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" loadHermes Hermes-Extensions.hermes --save
${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" loadHermes Math-Operations-Extensions.hermes Debugging-Core.hermes Kernel-Chronology-Extras.hermes Multilingual-Encodings.hermes ReflectionMirrors-Primitives.hermes --save --no-fail-on-undeclared
${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" loadHermes Math-Operations-Extensions.hermes Debugging-Core.hermes System-Time.hermes Multilingual-Encodings.hermes ReflectionMirrors-Primitives.hermes --save --no-fail-on-undeclared

# Now that System-Time is loaded, we can initialize the version
${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" perform --save ChronologyConstants initialize
${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" perform --save DateAndTime initialize
${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" perform --save SystemVersion setMajor:minor:patch:suffix:build:commitHash: ${PHARO_MAJOR} ${PHARO_MINOR} ${PHARO_PATCH} ${PHARO_SUFFIX} ${BUILD_NUMBER} ${PHARO_COMMIT_HASH}

${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" loadHermes InitializePackagesCommandLineHandler.hermes --save

${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" loadHermes Collections-Atomic.hermes AST-Core.hermes Collections-Arithmetic.hermes Jobs.hermes System-SourcesCondenser.hermes --save --no-fail-on-undeclared
${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" loadHermes Collections-Atomic.hermes AST-Core.hermes Collections-Arithmetic.hermes ClassDefinitionPrinters.hermes System-SourcesCondenser.hermes System-NumberPrinting.hermes --save --no-fail-on-undeclared

echo $(date -u) "[Compiler] Initializing the packages in the Kernel"
${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" initializePackages --protocols=protocolsKernel.txt --packages --save

# Installing compiler through Hermes
echo $(date -u) "[Compiler] Installing compiler through Hermes"
${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" loadHermes OpalCompiler-Core.hermes CodeImport.hermes CodeImportCommandLineHandlers.hermes --save --no-fail-on-undeclared
${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" loadHermes Debugging-Utils.hermes OpalCompiler-Core.hermes CodeImport.hermes CodeImportCommandLineHandlers.hermes --save --no-fail-on-undeclared
${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" eval --save "OpalCompiler register. CompilationContext initialize. OCASTTranslator initialize."
${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" st ${BOOTSTRAP_REPOSITORY}/bootstrap/scripts/01-initialization/01-init.st --no-source --save --quit

echo $(date -u) "[Compiler] Initializing Unicode"
${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" st ${BOOTSTRAP_REPOSITORY}/bootstrap/scripts/01-initialization/02-initUnicode.st --no-source --save --quit "${BOOTSTRAP_REPOSITORY}/resources/unicode/"

${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" loadHermes FileSystem-Core.hermes FileSystem-Disk.hermes --save --no-fail-on-undeclared
${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" loadHermes Random-Core.hermes System-Hashing.hermes Network-UUID.hermes FileSystem-Core.hermes FileSystem-Disk.hermes --save --no-fail-on-undeclared
${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" eval --save "PharoBootstrapInitialization initializeFileSystem"
${VM} "${COMPILER_IMAGE_NAME}.image" "${IMAGE_FLAGS}" eval --save "SourceFileArray initialize"
zip "${COMPILER_IMAGE_NAME}.zip" "${COMPILER_IMAGE_NAME}.image"

# Installing Traits through Hermes
Expand All @@ -169,8 +173,8 @@ ${VM} "${TRAITS_IMAGE_NAME}.image" "${IMAGE_FLAGS}" loadHermes Traits.hermes --s
${VM} "${TRAITS_IMAGE_NAME}.image" "${IMAGE_FLAGS}" loadHermes Kernel-Traits.hermes Collections-Abstract-Traits.hermes CodeImport-Traits.hermes --save
zip "${TRAITS_IMAGE_NAME}.zip" "${TRAITS_IMAGE_NAME}.image"

#Bootstrap Initialization: Class and RPackage initialization
echo $(date -u) "[Core] Class and RPackage initialization"
#Bootstrap Initialization: Class and Package initialization
echo $(date -u) "[Core] Class and Package initialization"
${VM} "${TRAITS_IMAGE_NAME}.image" "${IMAGE_FLAGS}" save ${CORE_IMAGE_NAME}
zip "${CORE_IMAGE_NAME}.zip" "${CORE_IMAGE_NAME}.image"

Expand Down
3 changes: 0 additions & 3 deletions bootstrap/scripts/emulation/shrink.st
Original file line number Diff line number Diff line change
Expand Up @@ -221,9 +221,6 @@
(Smalltalk globals at: cn) removeFromSystem ].

" final cleaning "
ChangeSet removeChangeSetsNamedSuchThat: [ :each | true ].
ChangeSet resetCurrentToNewUnnamedChangeSet.
Author reset.
SmalltalkImage classPool at: #Tools put: nil.
Job jobAnnouncer initialize.
EncodedCharSet initialize.
Expand Down
38 changes: 22 additions & 16 deletions bootstrap/scripts/envversion.sh
Original file line number Diff line number Diff line change
Expand Up @@ -47,34 +47,43 @@ function is_development_build() {
fi
}

function set_version_common() {
# HACK: Since this may beforehand a PR branch, I do not have all information I need. I assume I will have a tag indicating Pharo version.
# Note: do not use `--first-parent` here, since Jenkins is crazy and use the PR as the first parent wheras useful version information in the targeted branch.
# Set the common env vars extracting version information. Requires that prefix and suffix are set beforehand
PHARO_MAJOR="$(git describe --tags --first-parent | cut -d'-' -f 1 | cut -c 2- | cut -d'.' -f 1-1)"
PHARO_MINOR="$(git describe --tags --first-parent | cut -d'-' -f 1 | cut -c 2- | cut -d'.' -f 2-2)"
PHARO_PATCH="$(git describe --tags --first-parent | cut -d'-' -f 1 | cut -c 2- | cut -d'.' -f 3-3)"

# This will answer "Pharo7.0-PR"
PHARO_NAME_PREFIX="Pharo${PHARO_MAJOR}.${PHARO_MINOR}-${PHARO_SUFFIX}"
# This will answer "70"
PHARO_SHORT_VERSION="${PHARO_MAJOR}${PHARO_MINOR}"
}

# sets variables when we are in a release build
function set_version_release_variables() {
# I'm a release, I have all values needed in a TAG
# This will answer "Pharo7.0"
PHARO_NAME_PREFIX="Pharo$(git describe --long --tags --first-parent | cut -d'-' -f 1-2 | cut -c 2-)"
# This will be "70"
PHARO_SHORT_VERSION="$(git describe --long --tags --first-parent | cut -d'-' -f 1 | cut -c 2- | cut -d'.' -f 1-2 | sed 's/\.//')"
PHARO_SUFFIX=""
set_version_common
}

# sets variables when we are in a snapshot build
function set_version_snapshot_variables() {
# ensure we have BRANCH_NAME variable
ensure_branch_name
# This will answer "Pharo7.0-SNAPSHOT"
PHARO_NAME_PREFIX="${BRANCH_NAME}-SNAPSHOT"
# This will answer "70"
PHARO_SHORT_VERSION="$(git describe --long --tags --first-parent | cut -d'-' -f 1 | cut -c 2- | cut -d'.' -f 1-2 | sed 's/\.//')"
PHARO_SUFFIX="SNAPSHOT"
set_version_common
}

# sets variables when we are in a pull request build
function set_version_pull_request_variables() {
# I'm not development build, I should be a PR
# HACK: Since this is a PR branch, I do not have all information I need. I assume I will have a tag indicating Pharo version.
# Note: do not use `--first-parent` here, since Jenkins is crazy and use the PR as the first parent wheras useful version information in the targeted branch.
# This will answer "Pharo7.0-PR"
PHARO_NAME_PREFIX="Pharo$(git describe --long --tags | cut -d'-' -f 1 | cut -c 2- | cut -d'.' -f 1-2)-PR"
# This will answer "70"
PHARO_SHORT_VERSION="$(git describe --long --tags | cut -d'-' -f 1 | cut -c 2- | cut -d'.' -f 1-2 | sed 's/\.//')"
PHARO_SUFFIX="PR"
set_version_common
}

# sets all variables:
Expand All @@ -99,10 +108,7 @@ function set_version_variables() {
fi

PHARO_VM_VERSION=${PHARO_SHORT_VERSION}

# Prefix the commit hash with a g, to be compatible with git-describe commit hashes
# https://git-scm.com/docs/git-describe
PHARO_COMMIT_HASH="g$(git rev-parse --verify HEAD)"
PHARO_COMMIT_HASH="$(git rev-parse --verify HEAD)"
popd > /dev/null
}

2 changes: 1 addition & 1 deletion bootstrap/scripts/generateKernelHermesFiles.st
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ packageNames := #BaselineOfPharoBootstrap asClass kernelPackageNames, toExport.
environment := repository asRing2EnvironmentWith: packageNames.

environment fixProtoObjectClassSuperclass.
environment addGlobalsNamed: #(Undeclared Smalltalk UTF8TextConverter MacRomanTextConverter FileStream ChangeSet Character Processor).
environment addGlobalsNamed: #(Undeclared Smalltalk UTF8TextConverter MacRomanTextConverter FileStream Character Processor).

environment clean.

Expand Down
2 changes: 1 addition & 1 deletion bootstrap/scripts/generateSUnitHermesFiles.st
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ packageNames := #BaselineOfPharoBootstrap asClass kernelPackageNames, #BaselineO
environment := repository asRing2EnvironmentWith: packageNames.

environment fixProtoObjectClassSuperclass.
environment addGlobalsNamed: #(Undeclared Smalltalk UTF8TextConverter MacRomanTextConverter FileStream ChangeSet Character Processor).
environment addGlobalsNamed: #(Undeclared Smalltalk UTF8TextConverter MacRomanTextConverter FileStream Character Processor).

environment clean.

Expand Down
2 changes: 1 addition & 1 deletion bootstrap/scripts/generateTraitsHermesFiles.st
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ packageNames := #BaselineOfPharoBootstrap asClass kernelPackageNames, toExport.
environment := repository asRing2EnvironmentWith: packageNames.

environment fixProtoObjectClassSuperclass.
environment addGlobalsNamed: #(Undeclared Smalltalk UTF8TextConverter MacRomanTextConverter FileStream ChangeSet Character Processor).
environment addGlobalsNamed: #(Undeclared Smalltalk UTF8TextConverter MacRomanTextConverter FileStream Character Processor).

environment clean.

Expand Down
3 changes: 1 addition & 2 deletions bootstrap/scripts/getPharoVM.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
#!/usr/bin/env bash

set -x
set -e

if [ $# -lt 1 ]
then
Expand Down Expand Up @@ -35,7 +34,7 @@ else
if [ $RETRY_REMAINING -gt 0 ]
then
echo "Retry"
./$0 $PHARO $VM $ARCHITECTURE `expr $RETRY_REMAINING - 1`
$0 $PHARO $VM $ARCHITECTURE `expr $RETRY_REMAINING - 1`
else
echo "Failed to download the VM"
fi
Expand Down
2 changes: 1 addition & 1 deletion bootstrap/scripts/prepare_image.st
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
Iceberg enableMetacelloIntegration: true.
Iceberg remoteTypeSelector: #httpsUrl.

repositoryPathString := ((Smalltalk os environment at: 'BOOTSTRAP_REPOSITORY' ifAbsent: ['.']) asFileReference / 'bootstrap' / 'src') fullName.
repositoryPathString := ((Smalltalk os environment at: 'BOOTSTRAP_REPOSITORY' ifAbsent: ['.']) asFileReference / 'src') fullName.

Transcript show: ' [+] Loading tonel code to dump files for the Pharo bootstrap process from ' , repositoryPathString; cr.

Expand Down
6 changes: 4 additions & 2 deletions bootstrap/scripts/runKernelTests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,9 @@ export PHARO_CI_TESTING_ENVIRONMENT=1
./pharo bootstrap.image
#Adding packages removed from the bootstrap
./pharo bootstrap.image loadHermes Hermes-Extensions.hermes --save
./pharo bootstrap.image loadHermes Kernel-Chronology-Extras.hermes AST-Core.hermes Jobs.hermes InitializePackagesCommandLineHandler.hermes --save --no-fail-on-undeclared --on-duplication=ignore
./pharo bootstrap.image loadHermes System-Time.hermes AST-Core.hermes InitializePackagesCommandLineHandler.hermes Random-Core.hermes System-Model.hermes System-NumberPrinting.hermes --save --no-fail-on-undeclared --on-duplication=ignore
./pharo bootstrap.image perform --save ChronologyConstants initialize
./pharo bootstrap.image perform --save DateAndTime initialize

#Initializing the package manager
./pharo bootstrap.image initializePackages --packages --protocols=protocolsKernel.txt --save
Expand All @@ -66,7 +68,7 @@ export PHARO_CI_TESTING_ENVIRONMENT=1
./pharo bootstrap.image loadHermes Traits.hermes --save

#Loading Tests
./pharo bootstrap.image loadHermes SUnit-Core.hermes JenkinsTools-Core.hermes JenkinsTools-Core.hermes SUnit-Tests.hermes --save --no-fail-on-undeclared --on-duplication=ignore
./pharo bootstrap.image loadHermes Debugging-Utils.hermes SUnit-Core.hermes JenkinsTools-Core.hermes JenkinsTools-Core.hermes SUnit-Tests.hermes --save --no-fail-on-undeclared --on-duplication=ignore

#Running tests
./pharo bootstrap.image test --junit-xml-output --stage-name=${2} SUnit-Core SUnit-Tests
4 changes: 2 additions & 2 deletions bootstrap/scripts/testing/core/runTests.st
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ ClassTestCase removeSelector: #testClassComment.
HashTesterTest removeSelector: #testBasicBehaviour.


(RPackage organizer packages collect: #name) logCr.
(Package organizer packages collect: #name) logCr.

HDTestReport runPackages: (RPackage organizer packages collect: #name).
HDTestReport runPackages: (Package organizer packages collect: #name).

"HDTestReport runClasses: Smalltalk allClasses named: 'Tests'."

Expand Down
3 changes: 0 additions & 3 deletions bootstrap/src/.properties

This file was deleted.

1 change: 0 additions & 1 deletion bootstrap/src/BaselineOfPharoBootstrapProcess

This file was deleted.

1 change: 0 additions & 1 deletion bootstrap/src/Pharo30Bootstrap

This file was deleted.

Loading

0 comments on commit 8b7f43f

Please sign in to comment.