Pharo 7 provisional HOWTO

Hi,

this mail describes how to start to send pull requests to Pharo 7 Github repository from Pharo 7.
Preparations
=====================
– you need to have a Github account and set SSH keys. See https://help.github.com/articles/connecting-to-github-with-ssh/
– create own pharo-project/pharo repository fork. Go to https://github.com/pharo-project/pharo, click on “Fork” button and follow the instructions
Get Pharo 7 image
=====================
The CI jobs for the Pharo 7 defelopment are currently not fully set and we still do not publish Pharo 7 image to files.pharo.org so you cannot get it using zero-conf scripts. But we have a provisional CI job that bootstraps the Pharo 7 image.
There download a file named like Pharo7.0-32bit-hash.zip and decompress it. Unlike Pharo 6 images, the archive contains three files. Image, changes and sources. In Pharo 7 you have the sources file for every bootstrapped version. It has a commit hash in the name and it cannot be shared between different Pharo 7 imges, however it can be shared between images that were created as snapshots with the same bootstrapped image as ancestor.
Create local clone
=====================
You need a local clone of the Pharo repository. Because it contains a lot of small files, it is not a good idea to have own clone for every image. You can have only one and share them between images. But because of some current Monticello constraints you need to have the clone placed in the image directory in a folder with name ‘pharo-core’.
In this step we will clone the Pharo repository from pharo-project/pharo Github repository and add your fork as default pull target. We will update your fork repository to contain all latest commits from the Pharo repository in the branch named ‘development’. For latest stable version (Pharo 6) we use the master branch.
In the end we will checkout the repository to a particular commit from which the downloaded Pharo 7 image was bootstrapped. Imagine that you have a Pharo 7 image that is several days old and the development branch has already some commits that change code. If you would take this older image, checkout to the development branch and then do your commit, your would revert all changes done in not-loaded commits. The other option is to update your image to correspond to the repository latest commit which requires packages reloading.
If you checkout to a particular commit, you are in detached HEAD state. In this state you cannot do commits directly. You need to firstly create new a new branch which we will do anyway.
Evaluate the following code. This functionality will be later direct part of Iceberg UI. Do not forget to change the user name.
username := ‘YOUR-USER-NAME’.
repository := IceRepositoryCreator new
url: ‘git@github.com:pharo-project/pharo.git’;
location: (‘pharo-core’ asFileReference ensureCreateDirectory);
subdirectory:’src’;
createRepository.
repository checkoutBranch: ‘development’.
repository register.
fork := (IceRemote name: ‘myFork’ url: (‘git@github.com:{1}/pharo.git’ format: {username})).
repository addRemote: fork.
repository pushRemote: fork.
repository pullRemote: repository origin.
“update fork”
repository backend pullFrom: repository origin. “use this low-level form to prevent packages reloading”
repository push.
“checkout to the commit from which the image was bootstrapped”
repository checkoutBranch: (SystemVersion current commitHash).
Use already created clone
=====================
This is alternative to the previous step. Let’s suppose that you already have your local clone. You take some Pharo 7 image and you want to create commits. Then you need to create a symlink or move/copy the repository into your image directory. Remember, it must be named pharo-core (we do not use the name ‘pharo’ to avoid collision with VM executable).
In this step we will register an existing Pharo repository clone, set your fork as the push target, update your fork and then switch to the particular commit.
repository := IceRepositoryCreator new
location: (‘pharo-core’ asFileReference);
subdirectory:’src’;
createRepository.
repository register.
fork := repository remotes detect: [ :remote | remote remoteName = #myFork ].
repository pushRemote: fork.
repository pullRemote: repository origin.
repository checkoutBranch: ‘development’.
repository backend pullFrom: repository origin.
repository push.
repository checkoutBranch: (SystemVersion current commitHash).
Issue processing
=====================
– create new case on FogBugz to get the issue number
– open Iceberg and from the context menu on the ‘pharo’ repository do: Pharo – Create new branch from FogBugz issue, enter the issue ID and it will fill the full branch name for you
– create your changes (you can do it before the creation of the branch too)
– commit and push your changes in Iceberg, this way you will commit your branch to your fork repository. Remember that the Iceberg commit window has two buttons, one for local commit, the second for commit with immediate push. They can be very long because they contain the full branch (issue) name
– in Iceberg in the ‘pharo’ repository context menu do: Pharo – Create pull request, fill your
– fill your Github credentials
– leave the PR title, comment is not required, check the pull request head and base. The base MUST be pharo-project/pharo development. Create the pull requests
– go to https://github.com/pharo-project/pharo/pulls, check your pull requests and put URL of it into the issue record on FogBugz (as a comment). Resolve the issue as Fix review needed
Cheers,
— Pavel
Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: