Merge pull request #418 from KJ7LNW/improve-single-request-handling

Fix -R flag to allow backups of repositories not owned by user
This commit is contained in:
Jose Diaz-Gonzalez
2025-08-08 16:41:04 -04:00
committed by GitHub

View File

@@ -578,10 +578,15 @@ def retrieve_data_gen(args, template, query_args=None, single_request=False):
page = 0 page = 0
while True: while True:
page = page + 1 if single_request:
request_page, request_per_page = None, None
else:
page = page + 1
request_page, request_per_page = page, per_page
request = _construct_request( request = _construct_request(
per_page, request_per_page,
page, request_page,
query_args, query_args,
template, template,
auth, auth,
@@ -715,14 +720,22 @@ def _get_response(request, auth, template):
def _construct_request( def _construct_request(
per_page, page, query_args, template, auth, as_app=None, fine=False per_page, page, query_args, template, auth, as_app=None, fine=False
): ):
querystring = urlencode( all_query_args = {}
dict( if per_page:
list({"per_page": per_page, "page": page}.items()) all_query_args["per_page"] = per_page
+ list(query_args.items()) if page:
) all_query_args["page"] = page
) if query_args:
all_query_args.update(query_args)
request = Request(template + "?" + querystring) request_url = template
if all_query_args:
querystring = urlencode(all_query_args)
request_url = template + "?" + querystring
else:
querystring = ""
request = Request(request_url)
if auth is not None: if auth is not None:
if not as_app: if not as_app:
if fine: if fine:
@@ -735,7 +748,11 @@ def _construct_request(
request.add_header( request.add_header(
"Accept", "application/vnd.github.machine-man-preview+json" "Accept", "application/vnd.github.machine-man-preview+json"
) )
logger.info("Requesting {}?{}".format(template, querystring))
log_url = template
if querystring:
log_url += "?" + querystring
logger.info("Requesting {}".format(log_url))
return request return request
@@ -885,9 +902,13 @@ def retrieve_repositories(args, authenticated_user):
) )
if args.repository: if args.repository:
if "/" in args.repository:
repo_path = args.repository
else:
repo_path = "{0}/{1}".format(args.user, args.repository)
single_request = True single_request = True
template = "https://{0}/repos/{1}/{2}".format( template = "https://{0}/repos/{1}".format(
get_github_api_host(args), args.user, args.repository get_github_api_host(args), repo_path
) )
repos = retrieve_data(args, template, single_request=single_request) repos = retrieve_data(args, template, single_request=single_request)
@@ -928,6 +949,8 @@ def retrieve_repositories(args, authenticated_user):
def filter_repositories(args, unfiltered_repositories): def filter_repositories(args, unfiltered_repositories):
if args.repository:
return unfiltered_repositories
logger.info("Filtering repositories") logger.info("Filtering repositories")
repositories = [] repositories = []