def cat_file(self, path, rev="tip"): if rev == HEAD or rev == UNKNOWN: rev = "tip" elif rev == PRE_CREATION: rev = "" for rawpath in ["raw-file", "raw", "hg-history"]: try: base_url = self.path.rstrip('/') if rawpath == 'hg-history': base_url = self.path[:self.path.rfind('/')] url = self.FULL_FILE_URL % { 'url': base_url, 'rawpath': rawpath, 'revision': rev, 'quoted_path': urllib_quote(path.lstrip('/')), } return self.get_file_http(url, path, rev) except Exception: # It failed. Error was logged and we may try again. pass raise FileNotFoundError(path, rev)
def cat_file(self, path, rev="tip"): if rev == HEAD or rev == UNKNOWN: rev = "tip" elif rev == PRE_CREATION: rev = "" for rawpath in ["raw-file", "raw", "hg-history"]: try: base_url = self.path.rstrip('/') if rawpath == 'hg-history': base_url = self.path[:self.path.rfind('/')] url = self.FULL_FILE_URL % { 'url': base_url, 'rawpath': rawpath, 'revision': rev, 'quoted_path': urllib_quote(path.lstrip('/')), } return self.get_file_http(url, path, rev) except Exception: # It failed. Error was logged and we may try again. pass raise FileNotFoundError(path, rev)
def get(self, request, diffset_id=None, *args, **kwargs): """Returns the original unpatched file. The file is returned as :mimetype:`text/plain` and is the original file before applying a patch. """ try: attached_diffset = DiffSet.objects.filter(pk=diffset_id, history__isnull=True) if attached_diffset.exists(): filediff_resource = resources.filediff else: filediff_resource = resources.draft_filediff filediff = filediff_resource.get_object(request, diffset=diffset_id, *args, **kwargs) except ObjectDoesNotExist: return DOES_NOT_EXIST if filediff.is_new: return DOES_NOT_EXIST try: orig_file = get_original_file(filediff, request, filediff.diffset.repository.get_encoding_list()) except Exception as e: logging.error("Error retrieving original file: %s", e, exc_info=1, request=request) return FILE_RETRIEVAL_ERROR resp = HttpResponse(orig_file, mimetype="text/plain") filename = urllib_quote(filediff.source_file) resp["Content-Disposition"] = "inline; filename=%s" % filename set_last_modified(resp, filediff.diffset.timestamp) return resp
def _get_patch(self, request, *args, **kwargs): try: resources.review_request.get_object(request, *args, **kwargs) filediff = self.get_object(request, *args, **kwargs) except ObjectDoesNotExist: return DOES_NOT_EXIST resp = HttpResponse(filediff.diff, mimetype='text/x-patch') filename = '%s.patch' % urllib_quote(filediff.source_file) resp['Content-Disposition'] = 'inline; filename=%s' % filename set_last_modified(resp, filediff.diffset.timestamp) return resp
def _get_patch(self, request, *args, **kwargs): try: resources.review_request.get_object(request, *args, **kwargs) filediff = self.get_object(request, *args, **kwargs) except ObjectDoesNotExist: return DOES_NOT_EXIST resp = HttpResponse(filediff.diff, mimetype='text/x-patch') filename = '%s.patch' % urllib_quote(filediff.source_file) resp['Content-Disposition'] = 'inline; filename=%s' % filename set_last_modified(resp, filediff.diffset.timestamp) return resp
def get(self, request, diffset_id=None, *args, **kwargs): """Returns the patched file. The file is returned as :mimetype:`text/plain` and is the result of applying the patch to the original file. """ try: attached_diffset = DiffSet.objects.filter(pk=diffset_id, history__isnull=True) if attached_diffset.exists(): filediff_resource = resources.filediff else: filediff_resource = resources.draft_filediff filediff = filediff_resource.get_object( request, diffset=diffset_id, *args, **kwargs) except ObjectDoesNotExist: return DOES_NOT_EXIST if filediff.deleted: return DOES_NOT_EXIST try: orig_file = get_original_file(filediff, request=request) except Exception as e: logging.error("Error retrieving original file: %s", e, exc_info=1, request=request) return FILE_RETRIEVAL_ERROR try: patched_file = get_patched_file(orig_file, filediff, request=request) except Exception as e: logging.error("Error retrieving patched file: %s", e, exc_info=1, request=request) return FILE_RETRIEVAL_ERROR resp = HttpResponse(patched_file, mimetype='text/plain') filename = urllib_quote(filediff.dest_file) resp['Content-Disposition'] = 'inline; filename=%s' % filename set_last_modified(resp, filediff.diffset.timestamp) return resp