code: func (s *storageImpl) finishAndForcedHash(c context.Context, op *upload.Operation, hash *api.ObjectRef) (*upload.Operation, error) {
  	gs := s.getGS(c)
  	cfg, err := s.settings(c)
  	if err != nil {
  		return nil, err
  	}
  
  	// Try to move the object into the final location. This may fail
  	// transiently, in which case we ask the client to retry, or fatally, in
  	// which case we close the upload operation with an error.
  	pubErr := gs.Publish(c, cfg.ObjectPath(hash), op.TempGSPath, -1)
  	if transient.Tag.In(pubErr) {
  		return nil, errors.Annotate(pubErr, "failed to publish the object").
  			Tag(grpcutil.InternalTag).Err()
  	}
  
  	// Try to remove the leftover garbage. See maybeDelete doc for possible
  	// caveats.
  	if err := s.maybeDelete(c, gs, op.TempGSPath); err != nil {
  		return nil, err
  	}
  
  	// Set the status of the operation based on whether we published the file
  	// or not.
  	return op.Advance(c, func(_ context.Context, op *upload.Operation) error {
  		if pubErr != nil {
  			op.Status = api.UploadStatus_ERRORED
  			op.Error = fmt.Sprintf("Failed to publish the object - %s", pubErr)
  		} else {
  			op.Status = api.UploadStatus_PUBLISHED
  			op.HashAlgo = hash.HashAlgo
  			op.HexDigest = hash.HexDigest
  		}
  		return nil
  	})
  }
docs: // finishAndForcedHash finalizes uploads that use ForceHash field.
  //
  // It publishes the object immediately, skipping the verification.