Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pull request updater for azure client #3153

Merged
merged 5 commits into from
Mar 3, 2021

Conversation

milind009
Copy link
Contributor

Feature

Added support for updating pull requests for azure client (AzureDevOps). For updating pull requests (i.e pushing new file changes) implemented the following logic -

  • Check if the PR & PR source branch exists. If no, return nil else continue
  • Push the new file changes onto the PR source branch.

Caveat - Currently the AzureDevOps PR files diff UI shows the diff in commits instead of the actual diff in the file content. Hence, there is a temporary workaround to push file changes to the source branch to ensure the reviewer sees the exact files changes. The workaround is as follows -

  • Create a new temp branch from the PR target branch and push the new file changes in that branch.
  • Update the PR source branch head commit to this newly created branch head commit(hence preserving the commit history and pushing the new file changes)
  • Delete the temp branch

Testing

Added unit tests for the pull request updater implementation for azure client as well as the additional methods added in the azure client class.

@milind009 milind009 requested a review from a team as a code owner February 17, 2021 06:07
end

def temp_branch_name
"#{source_branch_name}-temp"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it be worth generating a short id, e.g. #{source_branch_name}-temp-Digest::SHA1.hexdigest(source_branch_name)[0..6]?

Thinking of the case where two jobs try to update the same PR or someone has stashed some changes in a -temp version of the current branch, in which case it would be deleted. Seems unlikely but have a feeling I've created branches with temp suffixes in the past when wrangling a rebase for example.

Copy link
Contributor Author

@milind009 milind009 Feb 22, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@feelepxyz Digest::SHA1.hexdigest(source_branch_name) produces consistent hashing. So for the case where we have two jobs trying to update the same PR, this might still result in issues right? I was thinking of using uuid (documentation) for uniquely identifying the temp branch. Thoughts?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah yes you're right, SHA1 is stable, uuid seems like a good candidate 👍

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool made an update accordingly

Copy link
Contributor

@feelepxyz feelepxyz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for adding tests 👍 added a few minor comments, otherwise looks good to me.

@milind009
Copy link
Contributor Author

Thanks for adding tests 👍 added a few minor comments, otherwise looks good to me.

Cool Thanks for reviewing it so promptly. Will make the suggested changes

source.organization + "/" + source.project +
"/_apis/git/pullrequests/" + pull_request_id)

JSON.parse(response.body)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not blocking for now, but we might want to handle non-200 responses here

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see we have some sort of handling in the get method of the azure client. Can you specify the scenarios that we might want to cover here?

@milind009
Copy link
Contributor Author

milind009 commented Mar 1, 2021

Hi, can we complete this PR? I actually want to use this code further in our service. Let me know if i need to add anything else. @jurre @feelepxyz

Copy link
Contributor

@feelepxyz feelepxyz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 👍 we don't expose this functionality ourselves so can't really test it further.

@feelepxyz feelepxyz merged commit 14a6190 into dependabot:main Mar 3, 2021
@milind009
Copy link
Contributor Author

Cool Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants