Pull requests reviews

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Pull requests reviews

Pavel Krivanek-3
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/', pullRequest asString) contents.
head := (STONJSON fromString: stonString) at: 'head'.
sshUrl := (head at: #repo) at: 'ssh_url'.
branchName := head at: #ref.
user := (sshUrl withoutPrefix: '[hidden email]:') withoutSuffix: '/pharo.git'.

fork := repository remotes detect: [ :remote | remote remoteName = user ] ifNone: [ 
| newFork |
newFork := (IceRemote name: user url: ('[hidden email]:{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


Reply | Threaded
Open this post in threaded view
|

Re: Pull requests reviews

Pavel Krivanek-3
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 <[hidden email]>:
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/', pullRequest asString) contents.
head := (STONJSON fromString: stonString) at: 'head'.
sshUrl := (head at: #repo) at: 'ssh_url'.
branchName := head at: #ref.
user := (sshUrl withoutPrefix: '[hidden email]:') withoutSuffix: '/pharo.git'.

fork := repository remotes detect: [ :remote | remote remoteName = user ] ifNone: [ 
| newFork |
newFork := (IceRemote name: user url: ('[hidden email]:{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



Reply | Threaded
Open this post in threaded view
|

Re: Pull requests reviews

Guillermo Polito
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 <[hidden email]> 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 <[hidden email]>:
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/', pullRequest asString) contents.
head := (STONJSON fromString: stonString) at: 'head'.
sshUrl := (head at: #repo) at: 'ssh_url'.
branchName := head at: #ref.
user := (sshUrl withoutPrefix: '[hidden email]:') withoutSuffix: '/pharo.git'.

fork := repository remotes detect: [ :remote | remote remoteName = user ] ifNone: [ 
| newFork |
newFork := (IceRemote name: user url: ('[hidden email]:{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



Web: http://guillep.github.io

Phone: +33 06 52 70 66 13

Reply | Threaded
Open this post in threaded view
|

Re: Pull requests reviews

EstebanLM
don’t need it. 
I’m working on tool for that :)

On 5 Jul 2017, at 10:02, Guillermo Polito <[hidden email]> 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 <[hidden email]> 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 <[hidden email]>:
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/', pullRequest asString) contents.
head := (STONJSON fromString: stonString) at: 'head'.
sshUrl := (head at: #repo) at: 'ssh_url'.
branchName := head at: #ref.
user := (sshUrl withoutPrefix: '[hidden email]:') withoutSuffix: '/pharo.git'.

fork := repository remotes detect: [ :remote | remote remoteName = user ] ifNone: [ 
| newFork |
newFork := (IceRemote name: user url: ('[hidden email]:{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


Phone: +33 06 52 70 66 13