divide Block::BeforePush to PushResult and Push