def _get_file_uncached(self, path, revision, request): """Internal function for fetching an uncached file. This is called by get_file if the file isn't already in the cache. """ fetching_file.send(sender=self, path=path, revision=revision, request=request) log_timer = log_timed("Fetching file '%s' r%s from %s" % (path, revision, self), request=request) hosting_service = self.hosting_service if hosting_service: data = hosting_service.get_file(self, path, revision) else: data = self.get_scmtool().get_file(path, revision) log_timer.done() fetched_file.send(sender=self, path=path, revision=revision, request=request, data=data) return data
def _get_file_uncached(self, path, revision, base_commit_id, request): """Internal function for fetching an uncached file. This is called by get_file if the file isn't already in the cache. """ fetching_file.send(sender=self, path=path, revision=revision, base_commit_id=base_commit_id, request=request) if base_commit_id: timer_msg = "Fetching file '%s' r%s (base commit ID %s) from %s" \ % (path, revision, base_commit_id, self) else: timer_msg = "Fetching file '%s' r%s from %s" \ % (path, revision, self) log_timer = log_timed(timer_msg, request=request) hosting_service = self.hosting_service if hosting_service: data = hosting_service.get_file(self, path, revision, base_commit_id=base_commit_id) else: tool = self.get_scmtool() argspec = inspect.getargspec(tool.get_file) if argspec.keywords is None: warnings.warn( 'SCMTool.get_file() must take keyword ' 'arguments, signature for %s is deprecated.' % tool.name, RemovedInReviewBoard40Warning) data = tool.get_file(path, revision) else: data = tool.get_file(path, revision, base_commit_id=base_commit_id) log_timer.done() fetched_file.send(sender=self, path=path, revision=revision, base_commit_id=base_commit_id, request=request, data=data) return data
def _get_file_uncached(self, path, revision, base_commit_id, request): """Internal function for fetching an uncached file. This is called by get_file if the file isn't already in the cache. """ fetching_file.send(sender=self, path=path, revision=revision, base_commit_id=base_commit_id, request=request) if base_commit_id: timer_msg = "Fetching file '%s' r%s (base commit ID %s) from %s" \ % (path, revision, base_commit_id, self) else: timer_msg = "Fetching file '%s' r%s from %s" \ % (path, revision, self) log_timer = log_timed(timer_msg, request=request) hosting_service = self.hosting_service if hosting_service: data = hosting_service.get_file( self, path, revision, base_commit_id=base_commit_id) else: tool = self.get_scmtool() argspec = inspect.getargspec(tool.get_file) if argspec.keywords is None: warnings.warn('SCMTool.get_file() must take keyword ' 'arguments, signature for %s is deprecated.' % tool.name, RemovedInReviewBoard40Warning) data = tool.get_file(path, revision) else: data = tool.get_file(path, revision, base_commit_id=base_commit_id) log_timer.done() fetched_file.send(sender=self, path=path, revision=revision, base_commit_id=base_commit_id, request=request, data=data) return data
def _get_file_uncached(self, path, revision, base_commit_id, request): """Internal function for fetching an uncached file. This is called by get_file if the file isn't already in the cache. """ fetching_file.send(sender=self, path=path, revision=revision, base_commit_id=base_commit_id, request=request) if base_commit_id: timer_msg = "Fetching file '%s' r%s (base commit ID %s) from %s" \ % (path, revision, base_commit_id, self) else: timer_msg = "Fetching file '%s' r%s from %s" \ % (path, revision, self) log_timer = log_timed(timer_msg, request=request) hosting_service = self.hosting_service if hosting_service: data = hosting_service.get_file( self, path, revision, base_commit_id=base_commit_id) else: try: data = self.get_scmtool().get_file(path, revision) except FileNotFoundError: if base_commit_id: # Some funky workflows with mq (mercurial) can cause issues # with parent diffs. If we didn't find it with the parsed # revision, and there's a base commit ID, try that. data = self.get_scmtool().get_file(path, base_commit_id) else: raise log_timer.done() fetched_file.send(sender=self, path=path, revision=revision, base_commit_id=base_commit_id, request=request, data=data) return data
def _get_file_uncached(self, path, revision, base_commit_id, request): """Internal function for fetching an uncached file. This is called by get_file if the file isn't already in the cache. """ fetching_file.send(sender=self, path=path, revision=revision, base_commit_id=base_commit_id, request=request) if base_commit_id: timer_msg = "Fetching file '%s' r%s (base commit ID %s) from %s" \ % (path, revision, base_commit_id, self) else: timer_msg = "Fetching file '%s' r%s from %s" \ % (path, revision, self) log_timer = log_timed(timer_msg, request=request) hosting_service = self.hosting_service if hosting_service: data = hosting_service.get_file( self, path, revision, base_commit_id=base_commit_id) else: data = self.get_scmtool().get_file(path, revision) log_timer.done() fetched_file.send(sender=self, path=path, revision=revision, base_commit_id=base_commit_id, request=request, data=data) return data
def _get_file_uncached(self, path, revision, base_commit_id, request): """Return a file from the repository, bypassing cache. This is called internally by :py:meth:`get_file` if the file isn't already in the cache. This will send the :py:data:`~reviewboard.scmtools.signals.fetching_file` signal before beginning a file fetch from the repository, and the :py:data:`~reviewboard.scmtools.signals.fetched_file` signal after. Args: path (unicode): The path to the file in the repository. revision (unicode): The revision of the file to retrieve. base_commit_id (unicode, optional): The ID of the commit containing the revision of the file to retrieve. This is required for some types of repositories where the revision of a file and the ID of a commit differ. request (django.http.HttpRequest, optional): The current HTTP request from the client. This is used for logging purposes. Returns: bytes: The resulting file contents. """ fetching_file.send(sender=self, path=path, revision=revision, base_commit_id=base_commit_id, request=request) if base_commit_id: timer_msg = "Fetching file '%s' r%s (base commit ID %s) from %s" \ % (path, revision, base_commit_id, self) else: timer_msg = "Fetching file '%s' r%s from %s" \ % (path, revision, self) log_timer = log_timed(timer_msg, request=request) hosting_service = self.hosting_service if hosting_service: data = hosting_service.get_file(self, path, revision, base_commit_id=base_commit_id) assert isinstance( data, bytes), ('%s.get_file() must return a byte string, not %s' % (type(hosting_service).__name__, type(data))) else: tool = self.get_scmtool() data = tool.get_file(path, revision, base_commit_id=base_commit_id) assert isinstance( data, bytes), ('%s.get_file() must return a byte string, not %s' % (type(tool).__name__, type(data))) log_timer.done() fetched_file.send(sender=self, path=path, revision=revision, base_commit_id=base_commit_id, request=request, data=data) return data
def _get_file_uncached(self, path, revision, context): """Return a file from the repository, bypassing cache. This is called internally by :py:meth:`get_file` if the file isn't already in the cache. This will send the :py:data:`~reviewboard.scmtools.signals.fetching_file` signal before beginning a file fetch from the repository, and the :py:data:`~reviewboard.scmtools.signals.fetched_file` signal after. Args: path (unicode): The path to the file in the repository. revision (unicode): The revision of the file to retrieve. context (reviewboard.scmtools.core.FileLookupContext): Extra context used to help look up this file. Version Added: 4.0.5 Returns: bytes: The resulting file contents. """ request = context.request base_commit_id = context.base_commit_id fetching_file.send(sender=self, path=path, revision=revision, base_commit_id=base_commit_id, request=request, context=context) if base_commit_id: timer_msg = "Fetching file '%s' r%s (base commit ID %s) from %s" \ % (path, revision, base_commit_id, self) else: timer_msg = "Fetching file '%s' r%s from %s" \ % (path, revision, self) log_timer = log_timed(timer_msg, request=request) hosting_service = self.hosting_service if hosting_service: data = hosting_service.get_file(self, path, revision, base_commit_id=base_commit_id, context=context) assert isinstance( data, bytes), ('%s.get_file() must return a byte string, not %s' % (type(hosting_service).__name__, type(data))) else: tool = self.get_scmtool() data = tool.get_file(path, revision, base_commit_id=base_commit_id, context=context) assert isinstance( data, bytes), ('%s.get_file() must return a byte string, not %s' % (type(tool).__name__, type(data))) log_timer.done() fetched_file.send(sender=self, path=path, revision=revision, base_commit_id=base_commit_id, request=request, context=context, data=data) return data