From b2b092c190330f34137a14cb882acb3ec7f3eb8a Mon Sep 17 00:00:00 2001 From: Virgil Grigoras Date: Mon, 10 Sep 2018 11:20:34 +0200 Subject: [PATCH] Bugfix for not displaying information when there is no update available + simplification --- cps/helper.py | 2 +- cps/web.py | 159 +++++++++++++++++++++++++++----------------------- 2 files changed, 86 insertions(+), 75 deletions(-) diff --git a/cps/helper.py b/cps/helper.py index c7f649af..8f72df05 100755 --- a/cps/helper.py +++ b/cps/helper.py @@ -568,7 +568,7 @@ def get_current_version_info(): return False if is_sha1(content[0]) and len(content[1]) > 0: - return {'sha': content[0], 'datetime': content[1]} + return {'hash': content[0], 'datetime': content[1]} except FileNotFoundError: return False return False diff --git a/cps/web.py b/cps/web.py index 16aed082..9c0f1970 100644 --- a/cps/web.py +++ b/cps/web.py @@ -1090,6 +1090,8 @@ def get_update_status(): 'message': '', 'current_commit_hash': '' } + parents = [] + repository_url = 'https://api.github.com/repos/janeczku/calibre-web' tz = datetime.timedelta(seconds=time.timezone if (time.localtime().tm_isdst == 0) else time.altzone) @@ -1098,7 +1100,7 @@ def get_update_status(): if version is False: status['current_commit_hash'] = _(u'Unknown') else: - status['current_commit_hash'] = version['sha'] + status['current_commit_hash'] = version['hash'] try: r = requests.get(repository_url + '/git/refs/heads/master') @@ -1114,83 +1116,92 @@ def get_update_status(): status['message'] = _(u'General error') if status['message'] != '': - status['success'] = False return json.dumps(status) - if 'object' in commit and commit['object']['sha'] != status['current_commit_hash']: - # a new update is available - try: - r = requests.get(repository_url + '/git/commits/' + commit['object']['sha']) - r.raise_for_status() - update_data = r.json() - except requests.exceptions.HTTPError as ex: - status['error'] = _(u'HTTP Error') + ' ' + str(ex) - except requests.exceptions.ConnectionError: - status['error'] = _(u'Connection error') - except requests.exceptions.Timeout: - status['error'] = _(u'Timeout while establishing connection') - except requests.exceptions.RequestException: - status['error'] = _(u'General error') - - if status['message'] != '': - status['success'] = False - return json.dumps(status) - - if 'committer' in update_data and 'message' in update_data: - parents = [] - - status['update'] = True - status['success'] = True - status['message'] = _(u'A new update is available. Click on the button below update to the latest version.') - - new_commit_date = datetime.datetime.strptime( - update_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz - parents.append( - [ - format_datetime(new_commit_date, format='short', locale=get_locale()), - update_data['message'], - update_data['sha'] - ] - ) - - # it only makes sense to analyze the parents if we know the current commit hash - if status['current_commit_hash'] != '': - try: - parent_commit = update_data['parents'][0] - # limit the maximum search depth - remaining_parents_cnt = 10 - except IndexError: - remaining_parents_cnt = None - - if remaining_parents_cnt is not None: - while True: - if remaining_parents_cnt == 0: - break + if 'object' not in commit: + status['message'] = _(u'Unexpected data while reading update information') + return json.dumps(status) - # check if we are more than one update behind if so, go up the tree - if parent_commit['sha'] != status['current_commit_hash']: - try: - r = requests.get(parent_commit['url']) - r.raise_for_status() - parent_data = r.json() - - parent_commit_date = datetime.datetime.strptime( - parent_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz - parent_commit_date = format_datetime( - parent_commit_date, format='short', locale=get_locale()) - - parents.append([parent_commit_date, parent_data['message'], parent_data['sha']]) - parent_commit = parent_data['parents'][0] - remaining_parents_cnt -= 1 - except Exception: - # it isn't crucial if we can't get information about the parent - break - else: - # parent is our current version + if commit['object']['sha'] == status['current_commit_hash']: + status.update({ + 'update': False, + 'success': True, + 'message': _(u'Now update available. You already have the latest version installed') + }) + return json.dumps(status) + + # a new update is available + status['update'] = True + + try: + r = requests.get(repository_url + '/git/commits/' + commit['object']['sha']) + r.raise_for_status() + update_data = r.json() + except requests.exceptions.HTTPError as ex: + status['error'] = _(u'HTTP Error') + ' ' + str(ex) + except requests.exceptions.ConnectionError: + status['error'] = _(u'Connection error') + except requests.exceptions.Timeout: + status['error'] = _(u'Timeout while establishing connection') + except requests.exceptions.RequestException: + status['error'] = _(u'General error') + + if status['message'] != '': + return json.dumps(status) + + if 'committer' in update_data and 'message' in update_data: + status['success'] = True + status['message'] = _(u'A new update is available. Click on the button below update to the latest version.') + + new_commit_date = datetime.datetime.strptime( + update_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz + parents.append( + [ + format_datetime(new_commit_date, format='short', locale=get_locale()), + update_data['message'], + update_data['sha'] + ] + ) + + # it only makes sense to analyze the parents if we know the current commit hash + if status['current_commit_hash'] != '': + try: + parent_commit = update_data['parents'][0] + # limit the maximum search depth + remaining_parents_cnt = 10 + except IndexError: + remaining_parents_cnt = None + + if remaining_parents_cnt is not None: + while True: + if remaining_parents_cnt == 0: + break + + # check if we are more than one update behind if so, go up the tree + if parent_commit['sha'] != status['current_commit_hash']: + try: + r = requests.get(parent_commit['url']) + r.raise_for_status() + parent_data = r.json() + + parent_commit_date = datetime.datetime.strptime( + parent_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz + parent_commit_date = format_datetime( + parent_commit_date, format='short', locale=get_locale()) + + parents.append([parent_commit_date, parent_data['message'], parent_data['sha']]) + parent_commit = parent_data['parents'][0] + remaining_parents_cnt -= 1 + except Exception: + # it isn't crucial if we can't get information about the parent break - else: - status['success'] = False - status['message'] = _(u'Could not fetch update information') + else: + # parent is our current version + break + + else: + status['success'] = False + status['message'] = _(u'Could not fetch update information') status['history'] = parents return json.dumps(status)