Skip to content

Commit 585af4c

Browse files
authored
Merge pull request #236 from BrOleg5/master
Add options to include certain number of latest release and skip prereleases
2 parents 41ec01d + 09f4168 commit 585af4c

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

README.rst

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,9 @@ CLI Help output::
4949
[-P] [-F] [--prefer-ssh] [-v]
5050
[--keychain-name OSX_KEYCHAIN_ITEM_NAME]
5151
[--keychain-account OSX_KEYCHAIN_ITEM_ACCOUNT]
52-
[--releases] [--assets] [--exclude [REPOSITORY [REPOSITORY ...]]
52+
[--releases] [--latest-releases NUMBER_OF_LATEST_RELEASES]
53+
[--skip-prerelease] [--assets]
54+
[--exclude [REPOSITORY [REPOSITORY ...]]
5355
[--throttle-limit THROTTLE_LIMIT] [--throttle-pause THROTTLE_PAUSE]
5456
USER
5557

@@ -124,6 +126,10 @@ CLI Help output::
124126
keychain that holds the personal access or OAuth token
125127
--releases include release information, not including assets or
126128
binaries
129+
--latest-releases NUMBER_OF_LATEST_RELEASES
130+
include certain number of the latest releases;
131+
only applies if including releases
132+
--skip-prerelease skip prerelease and draft versions; only applies if including releases
127133
--assets include assets alongside release information; only
128134
applies if including releases
129135
--exclude [REPOSITORY [REPOSITORY ...]]

github_backup/github_backup.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from urllib.parse import quote as urlquote
2424
from urllib.parse import urlencode, urlparse
2525
from urllib.request import HTTPRedirectHandler, Request, build_opener, urlopen
26+
from datetime import datetime
2627

2728
try:
2829
from . import __version__
@@ -376,6 +377,19 @@ def parse_args(args=None):
376377
dest="include_releases",
377378
help="include release information, not including assets or binaries",
378379
)
380+
parser.add_argument(
381+
"--latest-releases",
382+
type=int,
383+
default=0,
384+
dest="number_of_latest_releases",
385+
help="include certain number of the latest releases; only applies if including releases",
386+
)
387+
parser.add_argument(
388+
"--skip-prerelease",
389+
action="store_true",
390+
dest="skip_prerelease",
391+
help="skip prerelease and draft versions; only applies if including releases",
392+
)
379393
parser.add_argument(
380394
"--assets",
381395
action="store_true",
@@ -497,7 +511,7 @@ def get_github_host(args):
497511

498512

499513
def read_file_contents(file_uri):
500-
return open(file_uri[len(FILE_URI_PREFIX) :], "rt").readline().strip()
514+
return open(file_uri[len(FILE_URI_PREFIX):], "rt").readline().strip()
501515

502516

503517
def get_github_repo_url(args, repository):
@@ -1209,8 +1223,18 @@ def backup_releases(args, repo_cwd, repository, repos_template, include_assets=F
12091223
release_template = "{0}/{1}/releases".format(repos_template, repository_fullname)
12101224
releases = retrieve_data(args, release_template, query_args=query_args)
12111225

1226+
if args.skip_prerelease:
1227+
releases = [r for r in releases if not r["prerelease"] and not r["draft"]]
1228+
1229+
if args.number_of_latest_releases and args.number_of_latest_releases < len(releases):
1230+
releases.sort(key=lambda item: datetime.strptime(item["created_at"], "%Y-%m-%dT%H:%M:%SZ"),
1231+
reverse=True)
1232+
releases = releases[:args.number_of_latest_releases]
1233+
logger.info("Saving the latest {0} releases to disk".format(len(releases)))
1234+
else:
1235+
logger.info("Saving {0} releases to disk".format(len(releases)))
1236+
12121237
# for each release, store it
1213-
logger.info("Saving {0} releases to disk".format(len(releases)))
12141238
for release in releases:
12151239
release_name = release["tag_name"]
12161240
release_name_safe = release_name.replace("/", "__")

0 commit comments

Comments
 (0)