Skip to content

Commit 8b95f18

Browse files
committed
Add ability to clone starred repos
1 parent 2b9549f commit 8b95f18

File tree

1 file changed

+25
-3
lines changed

1 file changed

+25
-3
lines changed

bin/github-backup

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ def get_github_repo_url(args, repository):
343343
repo_url = 'https://{0}@{1}/{2}/{3}.git'.format(
344344
auth,
345345
get_github_host(args),
346-
args.user,
346+
repository['owner']['login'],
347347
repository['name'])
348348
else:
349349
repo_url = repository['clone_url']
@@ -499,15 +499,25 @@ def retrieve_repositories(args):
499499
args.user,
500500
args.repository)
501501

502-
return retrieve_data(args, template, single_request=single_request)
502+
repos = retrieve_data(args, template, single_request=single_request)
503+
504+
if args.include_starred or args.include_everything:
505+
starred_template = 'https://{0}/user/starred'.format(
506+
get_github_api_host(args))
507+
starred_repos = retrieve_data(args, starred_template, single_request=False)
508+
for item in starred_repos:
509+
item.update({'is_starred': True})
510+
repos.extend(starred_repos)
511+
512+
return repos
503513

504514

505515
def filter_repositories(args, unfiltered_repositories):
506516
log_info('Filtering repositories')
507517

508518
repositories = []
509519
for r in unfiltered_repositories:
510-
if r['owner']['login'] == args.user:
520+
if r['owner']['login'] == args.user or is_starred_repo(args, r):
511521
repositories.append(r)
512522

513523
name_regex = None
@@ -547,6 +557,14 @@ def backup_repositories(args, output_directory, repositories):
547557
for repository in repositories:
548558
backup_cwd = os.path.join(output_directory, 'repositories')
549559
repo_cwd = os.path.join(backup_cwd, repository['name'])
560+
561+
# put starred repos in -o/starred/${owner}/${repo} to prevent collision of
562+
# any repositories with the same name
563+
if is_starred_repo(args, repository):
564+
backup_cwd = os.path.join(output_directory, 'starred')
565+
repo_cwd = os.path.join(backup_cwd, repository['owner']['login'],
566+
repository['name'])
567+
550568
repo_dir = os.path.join(repo_cwd, 'repository')
551569
repo_url = get_github_repo_url(args, repository)
552570

@@ -866,6 +884,10 @@ def json_dump(data, output_file):
866884
separators=(',', ': '))
867885

868886

887+
def is_starred_repo(args, repo):
888+
return (args.include_starred or args.include_everything) and repo.get('is_starred')
889+
890+
869891
def main():
870892
args = parse_args()
871893

0 commit comments

Comments
 (0)