Skip to content

Commit

Permalink
Merge pull request #236 from BrOleg5/master
Browse files Browse the repository at this point in the history
Add options to include certain number of latest release and skip prereleases
  • Loading branch information
josegonzalez authored Jan 29, 2024
2 parents 41ec01d + 09f4168 commit 585af4c
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 3 deletions.
8 changes: 7 additions & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,9 @@ CLI Help output::
[-P] [-F] [--prefer-ssh] [-v]
[--keychain-name OSX_KEYCHAIN_ITEM_NAME]
[--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]
USER

Expand Down Expand Up @@ -124,6 +126,10 @@ CLI Help output::
keychain that holds the personal access or OAuth token
--releases include release information, not including assets or
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
applies if including releases
--exclude [REPOSITORY [REPOSITORY ...]]
Expand Down
28 changes: 26 additions & 2 deletions github_backup/github_backup.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
from urllib.parse import quote as urlquote
from urllib.parse import urlencode, urlparse
from urllib.request import HTTPRedirectHandler, Request, build_opener, urlopen
from datetime import datetime

try:
from . import __version__
Expand Down Expand Up @@ -376,6 +377,19 @@ def parse_args(args=None):
dest="include_releases",
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(
"--assets",
action="store_true",
Expand Down Expand Up @@ -497,7 +511,7 @@ def get_github_host(args):


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):
Expand Down Expand Up @@ -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)
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
logger.info("Saving {0} releases to disk".format(len(releases)))
for release in releases:
release_name = release["tag_name"]
release_name_safe = release_name.replace("/", "__")
Expand Down

0 comments on commit 585af4c

Please sign in to comment.