Merge pull request #236 from BrOleg5/master

Add options to include certain number of latest release and skip prereleases
This commit is contained in:
Jose Diaz-Gonzalez
2024-01-29 07:51:35 -05:00
committed by GitHub
2 changed files with 33 additions and 3 deletions

View File

@@ -49,7 +49,9 @@ 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] [--latest-releases NUMBER_OF_LATEST_RELEASES]
[--skip-prerelease] [--assets]
[--exclude [REPOSITORY [REPOSITORY ...]]
[--throttle-limit THROTTLE_LIMIT] [--throttle-pause THROTTLE_PAUSE] [--throttle-limit THROTTLE_LIMIT] [--throttle-pause THROTTLE_PAUSE]
USER USER
@@ -124,6 +126,10 @@ 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
--latest-releases NUMBER_OF_LATEST_RELEASES
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 --assets include assets alongside release information; only
applies if including releases applies if including releases
--exclude [REPOSITORY [REPOSITORY ...]] --exclude [REPOSITORY [REPOSITORY ...]]

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 datetime import datetime
try: try:
from . import __version__ from . import __version__
@@ -376,6 +377,19 @@ 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(
"--latest-releases",
type=int,
default=0,
dest="number_of_latest_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( parser.add_argument(
"--assets", "--assets",
action="store_true", action="store_true",
@@ -497,7 +511,7 @@ def get_github_host(args):
def read_file_contents(file_uri): def read_file_contents(file_uri):
return open(file_uri[len(FILE_URI_PREFIX) :], "rt").readline().strip() return open(file_uri[len(FILE_URI_PREFIX):], "rt").readline().strip()
def get_github_repo_url(args, repository): def get_github_repo_url(args, repository):
@@ -1209,8 +1223,18 @@ 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 not r["prerelease"] and not r["draft"]]
if args.number_of_latest_releases and args.number_of_latest_releases < len(releases):
releases.sort(key=lambda item: datetime.strptime(item["created_at"], "%Y-%m-%dT%H:%M:%SZ"),
reverse=True)
releases = releases[:args.number_of_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("/", "__")