|
23 | 23 | from urllib.parse import quote as urlquote
|
24 | 24 | from urllib.parse import urlencode, urlparse
|
25 | 25 | from urllib.request import HTTPRedirectHandler, Request, build_opener, urlopen
|
| 26 | +from datetime import datetime |
26 | 27 |
|
27 | 28 | try:
|
28 | 29 | from . import __version__
|
@@ -376,6 +377,19 @@ def parse_args(args=None):
|
376 | 377 | dest="include_releases",
|
377 | 378 | help="include release information, not including assets or binaries",
|
378 | 379 | )
|
| 380 | + parser.add_argument( |
| 381 | + "--latest-releases", |
| 382 | + type=int, |
| 383 | + default=0, |
| 384 | + dest="number_of_latest_releases", |
| 385 | + help="include certain number of the latest releases; only applies if including releases", |
| 386 | + ) |
| 387 | + parser.add_argument( |
| 388 | + "--skip-prerelease", |
| 389 | + action="store_true", |
| 390 | + dest="skip_prerelease", |
| 391 | + help="skip prerelease and draft versions; only applies if including releases", |
| 392 | + ) |
379 | 393 | parser.add_argument(
|
380 | 394 | "--assets",
|
381 | 395 | action="store_true",
|
@@ -497,7 +511,7 @@ def get_github_host(args):
|
497 | 511 |
|
498 | 512 |
|
499 | 513 | def read_file_contents(file_uri):
|
500 |
| - return open(file_uri[len(FILE_URI_PREFIX) :], "rt").readline().strip() |
| 514 | + return open(file_uri[len(FILE_URI_PREFIX):], "rt").readline().strip() |
501 | 515 |
|
502 | 516 |
|
503 | 517 | def get_github_repo_url(args, repository):
|
@@ -1209,8 +1223,18 @@ def backup_releases(args, repo_cwd, repository, repos_template, include_assets=F
|
1209 | 1223 | release_template = "{0}/{1}/releases".format(repos_template, repository_fullname)
|
1210 | 1224 | releases = retrieve_data(args, release_template, query_args=query_args)
|
1211 | 1225 |
|
| 1226 | + if args.skip_prerelease: |
| 1227 | + releases = [r for r in releases if not r["prerelease"] and not r["draft"]] |
| 1228 | + |
| 1229 | + if args.number_of_latest_releases and args.number_of_latest_releases < len(releases): |
| 1230 | + releases.sort(key=lambda item: datetime.strptime(item["created_at"], "%Y-%m-%dT%H:%M:%SZ"), |
| 1231 | + reverse=True) |
| 1232 | + releases = releases[:args.number_of_latest_releases] |
| 1233 | + logger.info("Saving the latest {0} releases to disk".format(len(releases))) |
| 1234 | + else: |
| 1235 | + logger.info("Saving {0} releases to disk".format(len(releases))) |
| 1236 | + |
1212 | 1237 | # for each release, store it
|
1213 |
| - logger.info("Saving {0} releases to disk".format(len(releases))) |
1214 | 1238 | for release in releases:
|
1215 | 1239 | release_name = release["tag_name"]
|
1216 | 1240 | release_name_safe = release_name.replace("/", "__")
|
|
0 commit comments