A small update: You are not forced to use a 'pharo-core' repository in your image folder if you provide a path to your own clone to the working copies of the bootstrapped packages. This way you can more easily share one local clone of the pharo-project/pharo repository. For the registration of your local repository use this script:
target := 'path/to/my/local/repository' asFileReference. repository := IceRepositoryCreator new location: target; 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). fileTreeRepository := (MCFileTreeRepository new directory: target / #src; yourself). repositoryGroup := MCRepositoryGroup withRepositories: { fileTreeRepository. MCCacheRepository uniqueInstance. }. MCWorkingCopy allManagers select: [ :wc | (wc repositoryGroup repositories reject: [ :repo | repo isCache ]) isEmpty ] thenDo: [ :wc | wc repositoryGroup: repositoryGroup ] 2017-06-26 13:14 GMT+02:00 Pavel Krivanek <pavel.kriva...@gmail.com>: > 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. > > https://ci.inria.fr/pharo/view/7.0/job/70-Bootstrap-32bit/ > > 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: 'g...@github.com:pharo-project/pharo.git'; > location: ('pharo-core' asFileReference ensureCreateDirectory); > subdirectory:'src'; > createRepository. > repository checkoutBranch: 'development'. > repository register. > > fork := (IceRemote name: 'myFork' url: ('g...@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 > >