Add option to include certain number of the latest releases.

This commit is contained in:
BrOleg5
2024-01-02 12:54:06 +08:00
parent a97f15b519
commit eb88def888
2 changed files with 20 additions and 2 deletions

View File

@@ -49,7 +49,8 @@ CLI Help output::
[-P] [-F] [--prefer-ssh] [-v] [-P] [-F] [--prefer-ssh] [-v]
[--keychain-name OSX_KEYCHAIN_ITEM_NAME] [--keychain-name OSX_KEYCHAIN_ITEM_NAME]
[--keychain-account OSX_KEYCHAIN_ITEM_ACCOUNT] [--keychain-account OSX_KEYCHAIN_ITEM_ACCOUNT]
[--releases] [--assets] [--exclude [REPOSITORY [REPOSITORY ...]] [--releases] [--assets] [--latest-releases INCLUDE_LATEST_RELEASES]
[--exclude [REPOSITORY [REPOSITORY ...]]
[--throttle-limit THROTTLE_LIMIT] [--throttle-pause THROTTLE_PAUSE] [--throttle-limit THROTTLE_LIMIT] [--throttle-pause THROTTLE_PAUSE]
USER USER
@@ -126,6 +127,9 @@ CLI Help output::
binaries binaries
--assets include assets alongside release information; only --assets include assets alongside release information; only
applies if including releases applies if including releases
--latest-releases INCLUDE_LATEST_RELEASES
include certain number of the latest releases; only
applies if including releases
--exclude [REPOSITORY [REPOSITORY ...]] --exclude [REPOSITORY [REPOSITORY ...]]
names of repositories to exclude from backup. names of repositories to exclude from backup.
--throttle-limit THROTTLE_LIMIT --throttle-limit THROTTLE_LIMIT

View File

@@ -23,6 +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
try: try:
from . import __version__ from . import __version__
@@ -382,6 +383,13 @@ def parse_args(args=None):
dest="include_assets", dest="include_assets",
help="include assets alongside release information; only applies if including releases", help="include assets alongside release information; only applies if including releases",
) )
parser.add_argument(
"--latest-releases",
type=int,
default=0,
dest="include_latest_releases",
help="include certain number of the latest releases; only applies if including releases",
)
parser.add_argument( parser.add_argument(
"--throttle-limit", "--throttle-limit",
dest="throttle_limit", dest="throttle_limit",
@@ -1206,8 +1214,14 @@ 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.include_latest_releases and args.include_latest_releases < len(releases):
releases = sorted(releases, key=itemgetter('tag_name'), reverse=True)
releases = releases[:args.include_latest_releases]
logger.info("Saving the latest {0} releases to disk".format(len(releases)))
else:
logger.info("Saving {0} releases to disk".format(len(releases)))
# for each release, store it # for each release, store it
logger.info("Saving {0} releases to disk".format(len(releases)))
for release in releases: for release in releases:
release_name = release["tag_name"] release_name = release["tag_name"]
release_name_safe = release_name.replace("/", "__") release_name_safe = release_name.replace("/", "__")