Skip to content

Commit bbb2dae

Browse files
Update Branch.sync_with_upstream to correcly send required data. (#1199)
* Update Branch.sync_with_upstream to correcly send required data. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix lint errors. * Fix silly test error. --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent af2d9af commit bbb2dae

File tree

5 files changed

+38
-6
lines changed

5 files changed

+38
-6
lines changed

AUTHORS.rst

+2
Original file line numberDiff line numberDiff line change
@@ -226,3 +226,5 @@ Contributors
226226
- Thomas Buchner (@MrBatschner)
227227

228228
- Chris Cotter (@ccotter)
229+
230+
- Daniel Diniz (@devdanzin)

src/github3/repos/branch.py

+2-6
Original file line numberDiff line numberDiff line change
@@ -166,17 +166,13 @@ def protect(
166166
def sync_with_upstream(self) -> t.Mapping[str, str]:
167167
"""Synchronize this branch with the upstream.
168168
169-
.. warning::
170-
171-
This API endpoint is still in Beta per gitHub
172-
173169
.. versionadded:: 3.0.0
174170
175171
Sync a branch of a forked repository to keep it up-to-date with the
176172
upstream repository.
177173
178174
See also:
179-
https://docs.github.com/en/rest/reference/repos#sync-a-fork-branch-with-the-upstream-repository
175+
https://docs.github.com/en/rest/branches/branches#sync-a-fork-branch-with-the-upstream-repository
180176
181177
:returns:
182178
The dictionary described in the documentation
@@ -185,7 +181,7 @@ def sync_with_upstream(self) -> t.Mapping[str, str]:
185181
"""
186182
base = self._api.split("/branches", 1)[0]
187183
url = self._build_url("merge-upstream", base_url=base)
188-
json = self._json(self._post(url), 200)
184+
json = self._json(self._post(url, data={"branch": self.name}), 200)
189185
return json
190186

191187
@decorators.requires_auth
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"http_interactions": [{"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["github3.py/4.0.1"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["application/vnd.github.v3.full+json"], "Connection": ["keep-alive"], "Accept-Charset": ["utf-8"], "Content-Type": ["application/json"], "Authorization": ["token <AUTH_TOKEN>"]}, "method": "GET", "uri": "https://api.github.com/repos/devdanzin/cpython"}, "response": {"body": {"encoding": "utf-8", "base64_string": "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", "string": ""}, "headers": {"Date": ["Thu, 17 Oct 2024 15:20:14 GMT"], "Content-Type": ["application/json; charset=utf-8"], "Cache-Control": ["private, max-age=60, s-maxage=60"], "Vary": ["Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With"], "ETag": ["W/\"8f47f7c7601f53b27d896470216b96e512d311317207af2dae3ff4692348f62f\""], "Last-Modified": ["Thu, 17 Oct 2024 14:13:30 GMT"], "github-authentication-token-expiration": ["2025-01-15 11:11:08 -0300"], "X-GitHub-Media-Type": ["github.v3; param=full; format=json"], "x-accepted-github-permissions": ["metadata=read"], "x-github-api-version-selected": ["2022-11-28"], "X-RateLimit-Limit": ["5000"], "X-RateLimit-Remaining": ["4996"], "X-RateLimit-Reset": ["1729181822"], "X-RateLimit-Used": ["4"], "X-RateLimit-Resource": ["core"], "Access-Control-Expose-Headers": ["ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset"], "Access-Control-Allow-Origin": ["*"], "Strict-Transport-Security": ["max-age=31536000; includeSubdomains; preload"], "X-Frame-Options": ["deny"], "X-Content-Type-Options": ["nosniff"], "X-XSS-Protection": ["0"], "Referrer-Policy": ["origin-when-cross-origin, strict-origin-when-cross-origin"], "Content-Security-Policy": ["default-src 'none'"], "Content-Encoding": ["gzip"], "Transfer-Encoding": ["chunked"], "Server": ["github.com"], "X-GitHub-Request-Id": ["5820:26AC7A:4759A3:4BDA74:67112B2E"]}, "status": {"code": 200, "message": "OK"}, "url": "https://api.github.com/repos/devdanzin/cpython"}, "recorded_at": "2024-10-17T15:20:14"}, {"request": {"body": {"encoding": "utf-8", "string": ""}, "headers": {"User-Agent": ["github3.py/4.0.1"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["application/vnd.github.loki-preview+json"], "Connection": ["keep-alive"], "Accept-Charset": ["utf-8"], "Content-Type": ["application/json"], "Authorization": ["token <AUTH_TOKEN>"]}, "method": "GET", "uri": "https://api.github.com/repos/devdanzin/cpython/branches/main"}, "response": {"body": {"encoding": "utf-8", "base64_string": "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", "string": ""}, "headers": {"Date": ["Thu, 17 Oct 2024 15:20:14 GMT"], "Content-Type": ["application/json; charset=utf-8"], "Cache-Control": ["private, max-age=60, s-maxage=60"], "Vary": ["Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With"], "ETag": ["W/\"ff2877c6e7c6074caa640ac16bc243d0c41c49597a4972116cf3eebf0d5aaf68\""], "github-authentication-token-expiration": ["2025-01-15 11:11:08 -0300"], "X-GitHub-Media-Type": ["github.v3; param=loki-preview; format=json"], "x-accepted-github-permissions": ["contents=read"], "x-github-api-version-selected": ["2022-11-28"], "X-RateLimit-Limit": ["5000"], "X-RateLimit-Remaining": ["4995"], "X-RateLimit-Reset": ["1729181822"], "X-RateLimit-Used": ["5"], "X-RateLimit-Resource": ["core"], "Access-Control-Expose-Headers": ["ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset"], "Access-Control-Allow-Origin": ["*"], "Strict-Transport-Security": ["max-age=31536000; includeSubdomains; preload"], "X-Frame-Options": ["deny"], "X-Content-Type-Options": ["nosniff"], "X-XSS-Protection": ["0"], "Referrer-Policy": ["origin-when-cross-origin, strict-origin-when-cross-origin"], "Content-Security-Policy": ["default-src 'none'"], "Content-Encoding": ["gzip"], "Transfer-Encoding": ["chunked"], "Server": ["github.com"], "X-GitHub-Request-Id": ["5820:26AC7A:4759F5:4BDAC4:67112B2E"]}, "status": {"code": 200, "message": "OK"}, "url": "https://api.github.com/repos/devdanzin/cpython/branches/main"}, "recorded_at": "2024-10-17T15:20:14"}, {"request": {"body": {"encoding": "utf-8", "string": "{\"branch\": \"main\"}"}, "headers": {"User-Agent": ["github3.py/4.0.1"], "Accept-Encoding": ["gzip, deflate"], "Accept": ["application/vnd.github.v3.full+json"], "Connection": ["keep-alive"], "Accept-Charset": ["utf-8"], "Content-Type": ["application/json"], "Content-Length": ["18"], "Authorization": ["token <AUTH_TOKEN>"]}, "method": "POST", "uri": "https://api.github.com/repos/devdanzin/cpython/merge-upstream"}, "response": {"body": {"encoding": "utf-8", "base64_string": "H4sIAAAAAAAAA02MSwrDMAwFryK0bnuAXKMHCIotxYX4gywTTOjdq+6yfG+YuTBz77QzLvgeIfiQcRwThC0kjkAlglC3p1Q9SaNfojXDaN2UKUOblmpZMn3KCx+e051Xm+1fvIvONuq8bkolJIc3Eb8/6CBOGIgAAAA=", "string": ""}, "headers": {"Date": ["Thu, 17 Oct 2024 15:20:15 GMT"], "Content-Type": ["application/json; charset=utf-8"], "Cache-Control": ["private, max-age=60, s-maxage=60"], "Vary": ["Accept, Authorization, Cookie, X-GitHub-OTP,Accept-Encoding, Accept, X-Requested-With"], "ETag": ["W/\"5f066f9e4b594b308e099fe06dd359a6998faafa1d5d359df0e6a2e50d3b6de4\""], "github-authentication-token-expiration": ["2025-01-15 11:11:08 -0300"], "X-GitHub-Media-Type": ["github.v3; param=full; format=json"], "x-accepted-github-permissions": ["contents=write"], "x-github-api-version-selected": ["2022-11-28"], "X-RateLimit-Limit": ["5000"], "X-RateLimit-Remaining": ["4994"], "X-RateLimit-Reset": ["1729181822"], "X-RateLimit-Used": ["6"], "X-RateLimit-Resource": ["core"], "Access-Control-Expose-Headers": ["ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset"], "Access-Control-Allow-Origin": ["*"], "Strict-Transport-Security": ["max-age=31536000; includeSubdomains; preload"], "X-Frame-Options": ["deny"], "X-Content-Type-Options": ["nosniff"], "X-XSS-Protection": ["0"], "Referrer-Policy": ["origin-when-cross-origin, strict-origin-when-cross-origin"], "Content-Security-Policy": ["default-src 'none'"], "Content-Encoding": ["gzip"], "Transfer-Encoding": ["chunked"], "Server": ["github.com"], "X-GitHub-Request-Id": ["5820:26AC7A:475A21:4BDAEF:67112B2E"]}, "status": {"code": 200, "message": "OK"}, "url": "https://api.github.com/repos/devdanzin/cpython/merge-upstream"}, "recorded_at": "2024-10-17T15:20:15"}], "recorded_with": "betamax/0.9.0"}

tests/integration/test_repos_branch.py

+19
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,22 @@ def test_latest_sha_differs(self):
3333
latest_sha = branch.latest_sha(differs_from=sha)
3434

3535
assert not isinstance(latest_sha, bytes)
36+
37+
def test_sync_with_upstream(self):
38+
self.token_login()
39+
cassette_name = self.cassette_name("sync_with_upstream")
40+
betamax_kwargs = {
41+
"match_requests_on": ["method", "uri", "if-none-match"]
42+
}
43+
with self.recorder.use_cassette(cassette_name, **betamax_kwargs):
44+
repository = self.gh.repository("devdanzin", "cpython")
45+
branch = repository.branch("main")
46+
result = branch.sync_with_upstream()
47+
48+
msg = (
49+
"Successfully fetched and fast-forwarded"
50+
" from upstream python:main."
51+
)
52+
assert result["message"] == msg
53+
assert result["merge_type"] == "fast-forward"
54+
assert result["base_branch"] == "python:main"

tests/unit/test_repos_branch.py

+14
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
url_for_commits = helper.create_url_helper(
1212
"https://api.github.com/repos/octocat/Hello-World/commits/master"
1313
)
14+
url_for_sync = helper.create_url_helper(
15+
"https://api.github.com/repos/octocat/Hello-World/merge-upstream"
16+
)
1417

1518

1619
class TestBranch(helper.UnitHelper):
@@ -30,6 +33,13 @@ def test_latest_sha(self):
3033
url_for_commits(), headers=headers
3134
)
3235

36+
def test_sync_with_upstream(self):
37+
"""Verify the request fot syncing a branch with upstream."""
38+
self.instance.sync_with_upstream()
39+
self.session.post.assert_called_once_with(
40+
url_for_sync(), '{"branch": "master"}'
41+
)
42+
3343
def test_unprotect(self):
3444
"""Verify the request to unprotect a branch."""
3545
self.instance.unprotect()
@@ -44,6 +54,10 @@ class TestBranchRequiresAuth(helper.UnitRequiresAuthenticationHelper):
4454
described_class = github3.repos.branch.Branch
4555
example_data = get_example_data()
4656

57+
def test_sync_with_upstream(self):
58+
"""Verify that branch syncing with upstream requires authentication."""
59+
self.assert_requires_auth(self.instance.sync_with_upstream)
60+
4761
def test_protect(self):
4862
"""Verify that protecting a branch requires authentication."""
4963
self.assert_requires_auth(self.instance.protect)

0 commit comments

Comments
 (0)