From f897b9d6adb36c03ca1826bfb171ed6abcdd043b Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Nov 26 2015 10:29:03 +0000 Subject: [PATCH 1/4] Fix returning error message from the internal API --- diff --git a/pagure/internal/__init__.py b/pagure/internal/__init__.py index 7ddc689..cf088ba 100644 --- a/pagure/internal/__init__.py +++ b/pagure/internal/__init__.py @@ -182,7 +182,9 @@ def mergeable_request_pull(): form = pagure.forms.ConfirmationForm() if not form.validate_on_submit(): - flask.abort(400, 'Invalid input submitted') + response = flask.jsonify({'message': 'Invalid input submitted'}) + response.status_code = 400 + return response requestid = flask.request.form.get('requestid') @@ -190,7 +192,9 @@ def mergeable_request_pull(): pagure.SESSION, request_uid=requestid) if not request: - flask.abort(404, 'Pull-request not found') + response = flask.jsonify({'message': 'Pull-request not found'}) + response.status_code = 404 + return response if request.merge_status and not force: return flask.jsonify({ @@ -206,9 +210,13 @@ def mergeable_request_pull(): request_folder=None, domerge=False) except pygit2.GitError as err: - flask.abort(409, err.message) + response = flask.jsonify({'message': err.message}) + response.status_code = 409 + return response except pagure.exceptions.PagureException as err: - flask.abort(500, err.message) + response = flask.jsonify({'message': err.message}) + response.status_code = 500 + return response return flask.jsonify({ 'code': merge_status, From 1c1930d214956ccafeaa3269f5e1898b5591ab47 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Nov 26 2015 10:40:16 +0000 Subject: [PATCH 2/4] Let's return the CONFLICTS code so that we can show the nice red dot --- diff --git a/pagure/internal/__init__.py b/pagure/internal/__init__.py index cf088ba..1ba402a 100644 --- a/pagure/internal/__init__.py +++ b/pagure/internal/__init__.py @@ -182,7 +182,10 @@ def mergeable_request_pull(): form = pagure.forms.ConfirmationForm() if not form.validate_on_submit(): - response = flask.jsonify({'message': 'Invalid input submitted'}) + response = flask.jsonify({ + 'code': 'CONFLICTS', + 'message': 'Invalid input submitted', + }) response.status_code = 400 return response @@ -192,7 +195,10 @@ def mergeable_request_pull(): pagure.SESSION, request_uid=requestid) if not request: - response = flask.jsonify({'message': 'Pull-request not found'}) + response = flask.jsonify({ + 'code': 'CONFLICTS', + 'message': 'Pull-request not found', + }) response.status_code = 404 return response @@ -210,11 +216,13 @@ def mergeable_request_pull(): request_folder=None, domerge=False) except pygit2.GitError as err: - response = flask.jsonify({'message': err.message}) + response = flask.jsonify({ + 'code': 'CONFLICTS', 'message': err.message}) response.status_code = 409 return response except pagure.exceptions.PagureException as err: - response = flask.jsonify({'message': err.message}) + response = flask.jsonify({ + 'code': 'CONFLICTS', 'message': err.message}) response.status_code = 500 return response From 473831ed9c09adaeb684997a173621dd5aec921e Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Nov 26 2015 10:40:31 +0000 Subject: [PATCH 3/4] Actually display the error message returned if there is one --- diff --git a/pagure/templates/pull_request.html b/pagure/templates/pull_request.html index 524706f..3340052 100644 --- a/pagure/templates/pull_request.html +++ b/pagure/templates/pull_request.html @@ -568,9 +568,15 @@ _obj.prepend($('
  • '+res.short_code+'
  • ')); }, - error: function() { + error: function(res) { var _obj = $('.header .buttons'); - _obj.prepend($('
  • Could not determine if the PR can be merged
  • ')); + if (res.responseJSON.message) { + _obj.prepend($('
  • ' + + res.responseJSON.message + '
  • ')); + } else { + _obj.prepend($('
  • Could not determine if the PR can be merged
  • ')); + } } }); return false; From c9a40f89ada17106726da4719647db3456baefe5 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Nov 26 2015 11:07:47 +0000 Subject: [PATCH 4/4] Rework the way we find out if a file is a binary or not --- diff --git a/pagure/ui/repo.py b/pagure/ui/repo.py index c2f15a6..ca0cd0b 100644 --- a/pagure/ui/repo.py +++ b/pagure/ui/repo.py @@ -393,22 +393,19 @@ def view_file(repo, identifier, filename, username=None): flask.abort(404, 'File not found') if isinstance(content, pygit2.Blob): - if content.is_binary and not pagure.lib.could_be_text(content.data): - ext = filename[filename.rfind('.'):] - if ext in ( - '.gif', '.png', '.bmp', '.tif', '.tiff', '.jpg', - '.jpeg', '.ppm', '.pnm', '.pbm', '.pgm', '.webp', '.ico'): - try: - Image.open(StringIO(content.data)) - output_type = 'image' - except IOError as err: - LOG.debug( - 'Failed to load image %s, error: %s', filename, err - ) - output_type = 'binary' - else: + ext = filename[filename.rfind('.'):] + if ext in ( + '.gif', '.png', '.bmp', '.tif', '.tiff', '.jpg', + '.jpeg', '.ppm', '.pnm', '.pbm', '.pgm', '.webp', '.ico'): + try: + Image.open(StringIO(content.data)) + output_type = 'image' + except IOError as err: + LOG.debug( + 'Failed to load image %s, error: %s', filename, err + ) output_type = 'binary' - else: + elif not content.is_binary and pagure.lib.could_be_text(content.data): file_content = content.data.decode('utf-8') try: lexer = guess_lexer_for_filename( @@ -426,6 +423,8 @@ def view_file(repo, identifier, filename, username=None): style="tango",) ) output_type = 'file' + else: + output_type = 'binary' else: content = sorted(content, key=lambda x: x.filemode) output_type = 'tree'