|
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 operator import itemgetter |
26 | 27 |
|
27 | 28 | try: |
28 | 29 | from . import __version__ |
@@ -382,6 +383,13 @@ def parse_args(args=None): |
382 | 383 | dest="include_assets", |
383 | 384 | help="include assets alongside release information; only applies if including releases", |
384 | 385 | ) |
| 386 | + parser.add_argument( |
| 387 | + "--latest-releases", |
| 388 | + type=int, |
| 389 | + default=0, |
| 390 | + dest="include_latest_releases", |
| 391 | + help="include certain number of the latest releases; only applies if including releases", |
| 392 | + ) |
385 | 393 | parser.add_argument( |
386 | 394 | "--throttle-limit", |
387 | 395 | dest="throttle_limit", |
@@ -1206,8 +1214,14 @@ def backup_releases(args, repo_cwd, repository, repos_template, include_assets=F |
1206 | 1214 | release_template = "{0}/{1}/releases".format(repos_template, repository_fullname) |
1207 | 1215 | releases = retrieve_data(args, release_template, query_args=query_args) |
1208 | 1216 |
|
| 1217 | + if args.include_latest_releases and args.include_latest_releases < len(releases): |
| 1218 | + releases = sorted(releases, key=itemgetter('tag_name'), reverse=True) |
| 1219 | + releases = releases[:args.include_latest_releases] |
| 1220 | + logger.info("Saving the latest {0} releases to disk".format(len(releases))) |
| 1221 | + else: |
| 1222 | + logger.info("Saving {0} releases to disk".format(len(releases))) |
| 1223 | + |
1209 | 1224 | # for each release, store it |
1210 | | - logger.info("Saving {0} releases to disk".format(len(releases))) |
1211 | 1225 | for release in releases: |
1212 | 1226 | release_name = release["tag_name"] |
1213 | 1227 | release_name_safe = release_name.replace("/", "__") |
|
0 commit comments