Add option to skip prerelease versions.

Replace release sorting by tag with release sorting by creation date.
This commit is contained in:
BrOleg5
2024-01-05 20:26:08 +08:00
parent eb88def888
commit ab18e96ea8
2 changed files with 22 additions and 11 deletions

View File

@@ -125,10 +125,11 @@ CLI Help output::
keychain that holds the personal access or OAuth token keychain that holds the personal access or OAuth token
--releases include release information, not including assets or --releases include release information, not including assets or
binaries binaries
--assets include assets alongside release information; only
applies if including releases
--latest-releases INCLUDE_LATEST_RELEASES --latest-releases INCLUDE_LATEST_RELEASES
include certain number of the latest releases; only include certain number of the latest releases;
only applies if including releases
--skip-prerelease skip prerelease and draft versions; only applies if including releases
--assets include assets alongside release information; only
applies if including releases applies if including releases
--exclude [REPOSITORY [REPOSITORY ...]] --exclude [REPOSITORY [REPOSITORY ...]]
names of repositories to exclude from backup. names of repositories to exclude from backup.

View File

@@ -23,7 +23,7 @@ from urllib.error import HTTPError, URLError
from urllib.parse import quote as urlquote from urllib.parse import quote as urlquote
from urllib.parse import urlencode, urlparse from urllib.parse import urlencode, urlparse
from urllib.request import HTTPRedirectHandler, Request, build_opener, urlopen from urllib.request import HTTPRedirectHandler, Request, build_opener, urlopen
from operator import itemgetter from datetime import datetime
try: try:
from . import __version__ from . import __version__
@@ -377,12 +377,6 @@ def parse_args(args=None):
dest="include_releases", dest="include_releases",
help="include release information, not including assets or binaries", help="include release information, not including assets or binaries",
) )
parser.add_argument(
"--assets",
action="store_true",
dest="include_assets",
help="include assets alongside release information; only applies if including releases",
)
parser.add_argument( parser.add_argument(
"--latest-releases", "--latest-releases",
type=int, type=int,
@@ -390,6 +384,18 @@ def parse_args(args=None):
dest="include_latest_releases", dest="include_latest_releases",
help="include certain number of the latest releases; only applies if including releases", help="include certain number of the latest releases; only applies if including releases",
) )
parser.add_argument(
"--skip-prerelease",
action="store_true",
dest="skip_prerelease",
help="skip prerelease and draft versions; only applies if including releases",
)
parser.add_argument(
"--assets",
action="store_true",
dest="include_assets",
help="include assets alongside release information; only applies if including releases",
)
parser.add_argument( parser.add_argument(
"--throttle-limit", "--throttle-limit",
dest="throttle_limit", dest="throttle_limit",
@@ -1214,8 +1220,12 @@ def backup_releases(args, repo_cwd, repository, repos_template, include_assets=F
release_template = "{0}/{1}/releases".format(repos_template, repository_fullname) release_template = "{0}/{1}/releases".format(repos_template, repository_fullname)
releases = retrieve_data(args, release_template, query_args=query_args) releases = retrieve_data(args, release_template, query_args=query_args)
if args.skip_prerelease:
releases = [r for r in releases if r["prerelease"] == False and r["draft"] == False]
if args.include_latest_releases and args.include_latest_releases < len(releases): if args.include_latest_releases and args.include_latest_releases < len(releases):
releases = sorted(releases, key=itemgetter('tag_name'), reverse=True) releases.sort(key=lambda item: datetime.strptime(item["created_at"], "%Y-%m-%dT%H:%M:%SZ"), \
reverse=True)
releases = releases[:args.include_latest_releases] releases = releases[:args.include_latest_releases]
logger.info("Saving the latest {0} releases to disk".format(len(releases))) logger.info("Saving the latest {0} releases to disk".format(len(releases)))
else: else: