public function push() {
		if ( $this->remote ) {
			Log::instance()->write( 'Snapshot already pushed.', 0, 'error' );
			return false;
		}

		$repository = RepositoryManager::instance()->setup( $this->repository_name );

		if ( ! $repository ) {
			Log::instance()->write( 'Could not setup repository.', 0, 'error' );

			return false;
		}

		/**
		 * Put files to S3
		 */
		Log::instance()->write( 'Uploading files (' . Utils\format_bytes( $this->meta['size'] ) . ')...' );

		$s3_add = $repository->getS3()->putSnapshot( $this->id, $this->meta['project'], Utils\get_snapshot_directory() . $this->id . '/data.sql.gz', Utils\get_snapshot_directory() . $this->id . '/files.tar.gz' );

		if ( ! $s3_add ) {
			Log::instance()->write( 'Could not upload files to S3.', 0, 'error' );

			return false;
		}

		/**
		 * Add snapshot to DB
		 */
		Log::instance()->write( 'Adding snapshot to database...' );

		$inserted_snapshot = $repository->getDB()->insertSnapshot( $this->id, $this->meta );

		if ( ! $inserted_snapshot ) {
			Log::instance()->write( 'Could not add snapshot to database.', 0, 'error' );

			return false;
		}

		$this->remote = true;

		return true;
	}