Skip to content

Commit ab18e96

Browse files
committed
Add option to skip prerelease versions.
Replace release sorting by tag with release sorting by creation date.
1 parent eb88def commit ab18e96

File tree

2 files changed

+22
-11
lines changed

2 files changed

+22
-11
lines changed

README.rst

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,11 @@ CLI Help output::
125125
keychain that holds the personal access or OAuth token
126126
--releases include release information, not including assets or
127127
binaries
128-
--assets include assets alongside release information; only
129-
applies if including releases
130128
--latest-releases INCLUDE_LATEST_RELEASES
131-
include certain number of the latest releases; only
129+
include certain number of the latest releases;
130+
only applies if including releases
131+
--skip-prerelease skip prerelease and draft versions; only applies if including releases
132+
--assets include assets alongside release information; only
132133
applies if including releases
133134
--exclude [REPOSITORY [REPOSITORY ...]]
134135
names of repositories to exclude from backup.

github_backup/github_backup.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +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 operator import itemgetter
26+
from datetime import datetime
2727

2828
try:
2929
from . import __version__
@@ -377,19 +377,25 @@ def parse_args(args=None):
377377
dest="include_releases",
378378
help="include release information, not including assets or binaries",
379379
)
380-
parser.add_argument(
381-
"--assets",
382-
action="store_true",
383-
dest="include_assets",
384-
help="include assets alongside release information; only applies if including releases",
385-
)
386380
parser.add_argument(
387381
"--latest-releases",
388382
type=int,
389383
default=0,
390384
dest="include_latest_releases",
391385
help="include certain number of the latest releases; only applies if including releases",
392386
)
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+
)
393+
parser.add_argument(
394+
"--assets",
395+
action="store_true",
396+
dest="include_assets",
397+
help="include assets alongside release information; only applies if including releases",
398+
)
393399
parser.add_argument(
394400
"--throttle-limit",
395401
dest="throttle_limit",
@@ -1214,8 +1220,12 @@ def backup_releases(args, repo_cwd, repository, repos_template, include_assets=F
12141220
release_template = "{0}/{1}/releases".format(repos_template, repository_fullname)
12151221
releases = retrieve_data(args, release_template, query_args=query_args)
12161222

1223+
if args.skip_prerelease:
1224+
releases = [r for r in releases if r["prerelease"] == False and r["draft"] == False]
1225+
12171226
if args.include_latest_releases and args.include_latest_releases < len(releases):
1218-
releases = sorted(releases, key=itemgetter('tag_name'), reverse=True)
1227+
releases.sort(key=lambda item: datetime.strptime(item["created_at"], "%Y-%m-%dT%H:%M:%SZ"), \
1228+
reverse=True)
12191229
releases = releases[:args.include_latest_releases]
12201230
logger.info("Saving the latest {0} releases to disk".format(len(releases)))
12211231
else:

0 commit comments

Comments
 (0)