don’t need it.
I’m working on tool for that :)
> On 5 Jul 2017, at 10:02, Guillermo Polito <[email protected]> wrote:
>
> If you don't mind, I'll transform your script into a class and commit it
> somewhere :)
>
> On Wed, Jul 5, 2017 at 8:30 AM, Pavel Krivanek <[email protected]
> <mailto:[email protected]>> wrote:
> So loading of the PR packages is very simple. Do at the end:
>
> diff := IceDiff from: headCommit to: bootstrapCommit.
> diff changedPackages do: #reload.
>
>
>
> 2017-07-04 17:33 GMT+02:00 Pavel Krivanek <[email protected]
> <mailto:[email protected]>>:
> I prepared a script that should help you with the reviews of the pull
> requests on Pharo 7. We will later convert it into a more fancy tool. It does
> next steps:
>
> - sets the basic information: pull request number, path to your pharo
> repository clone, name of your fork.
> - registers the repository into Iceberg and sets pull and push target remotes
> - switches branch to a particular commit from which the Pharo image was
> bootstrapped
> - registers the repository into into Monticello packages to be able to do
> correct diffs
> - gets basic information about the pull request from GitHub (original
> repository, branch name)
> - registers the PR original repository into remotes if needed and fetches
> information from it
> - creates a new local branch to merge the PR
> - merges the PR branch
> - displays a simple tool that shows differences in done in this merged branch
>
> --------
>
> pullRequest := 73.
> target := '/path/pharo' asFileReference.
> myForkName := 'myFork'.
>
> repository := IceRepositoryCreator new location: target; subdirectory:'src';
> createRepository.
> repository register.
> fork := repository remotes detect: [ :remote | remote remoteName = myForkName
> ].
> repository pushRemote: fork.
> repository pullRemote: repository origin.
> 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 ].
>
> stonString := (ZnEasy get:
> 'https://api.github.com/repos/pharo-project/pharo/pulls/
> <https://api.github.com/repos/pharo-project/pharo/pulls/>', pullRequest
> asString) contents.
> head := (STONJSON fromString: stonString) at: 'head'.
> sshUrl := (head at: #repo) at: 'ssh_url'.
> branchName := head at: #ref.
> user := (sshUrl withoutPrefix: '[email protected]:') withoutSuffix:
> '/pharo.git'.
>
> fork := repository remotes detect: [ :remote | remote remoteName = user ]
> ifNone: [
> | newFork |
> newFork := (IceRemote name: user url: ('[email protected]:{1}/pharo.git'
> format: {user})).
> repository addRemote: newFork.
> newFork ].
>
> repository fetchFrom: fork.
>
> prMergedBranchName := 'pr', pullRequest asString.
> repository createBranch: prMergedBranchName.
> repository checkoutBranch: prMergedBranchName.
>
> commit := repository revparse: user, '/', branchName.
> bootstrapCommit := repository revparse: (SystemVersion current commitHash).
> [ repository backend merge: commit id ]
> on: IceMergeAborted
> do: [ :error | repository mergeConflictsWith: commit ] .
> headCommit := repository revparse: 'HEAD'.
>
> browser := GLMTabulator new.
> browser row: [:row | row column: #commits span: 2; column: #changes span: 3];
> row: #diff.
> browser transmit to: #commits.
> browser transmit to: #changes; from: #commits; andShow: [ :a :commitInfo |
> (IceDiffChangeTreeBuilder new entity: commitInfo; diff: (IceDiff from:
> commitInfo to: bootstrapCommit); buildOn: a) title: 'Changes'. ].
> browser transmit from: #commits; from: #changes; to: #diff; andShow: [
> :a |
> a diff title: 'Left: working copy / Right: incoming
> updates'; display: [ :commitInfo :change |
> { change theirVersion ifNil: ''. change
> myVersion ifNil: ''. }]].
> browser openOn: {headCommit}.
>
> --------
>
> The merge operation only changes the Git working copy, no code is loaded into
> the image. If you want to test the PR code, currently you need to open
> Iceberg and reload all packages in the Pharo repository (Packages tab, Reload
> all)
>
> Expect troubles :-)
>
> Cheers,
> -- Pavel
>
>
>
>
>
>
> --
>
> Guille Polito
>
> Research Engineer
> French National Center for Scientific Research - http://www.cnrs.fr
> <http://www.cnrs.fr/>
>
>
> Web: http://guillep.github.io <http://guillep.github.io/>
> Phone: +33 06 52 70 66 13