docs: def FetchFileContent(self):
      """Fetch as much as the file's content as possible.
  
      This drains the pending_files store by checking which blobs we already have
      in the store and issuing calls to the client to receive outstanding blobs.
      """
      if not self.state.pending_files:
        return
  
      # Check what blobs we already have in the blob store.
      blob_hashes = []
      for file_tracker in itervalues(self.state.pending_files):
        for hash_response in file_tracker.get("hash_list", []):
          blob_hashes.append(rdf_objects.BlobID.FromBytes(hash_response.data))
  
      # This is effectively a BlobStore call.
      existing_blobs = data_store.BLOBS.CheckBlobsExist(blob_hashes)
  
      self.state.blob_hashes_pending = 0
  
      # If we encounter hashes that we already have, we will update
      # self.state.pending_files right away so we can't use an iterator here.
      for index, file_tracker in list(self.state.pending_files.items()):
        for i, hash_response in enumerate(file_tracker.get("hash_list", [])):
          # Make sure we read the correct pathspec on the client.
          hash_response.pathspec = file_tracker["stat_entry"].pathspec
  
          if existing_blobs[rdf_objects.BlobID.FromBytes(hash_response.data)]:
            # If we have the data we may call our state directly.
            self.CallStateInline(
                messages=[hash_response],
                next_state="WriteBuffer",
                request_data=dict(index=index, blob_index=i))
          else:
            # We dont have this blob - ask the client to transmit it.
            self.CallClient(
                server_stubs.TransferBuffer,
                hash_response,
                next_state="WriteBuffer",
                request_data=dict(index=index, blob_index=i))