public function upgrader_source_selection( $source, $remote_source, $upgrader, $hook_extra = null ) {
		global $wp_filesystem;
		$slug            = null;
		$repo            = null;
		$new_source      = null;
		$upgrader_object = null;

		/*
		 * Rename plugins.
		 */
		if ( $upgrader instanceof \Plugin_Upgrader ) {
			$upgrader_object = Singleton::get_instance( 'Plugin', $this );
			if ( isset( $hook_extra['plugin'] ) ) {
				$slug       = dirname( $hook_extra['plugin'] );
				$new_source = trailingslashit( $remote_source ) . $slug;
			}
		}

		/*
		 * Rename themes.
		 */
		if ( $upgrader instanceof \Theme_Upgrader ) {
			$upgrader_object = Singleton::get_instance( 'Theme', $this );
			if ( isset( $hook_extra['theme'] ) ) {
				$slug       = $hook_extra['theme'];
				$new_source = trailingslashit( $remote_source ) . $slug;
			}
		}

		$repo = $this->get_repo_slugs( $slug, $upgrader_object );

		/*
		 * Not GitHub Updater plugin/theme.
		 */
		if ( ! isset( $_POST['github_updater_repo'] ) && empty( $repo ) ) {
			return $source;
		}

		/*
		 * Remote install source.
		 */
		$install_options = $this->get_class_vars( 'Install', 'install' );
		if ( empty( $repo ) && isset( $install_options['github_updater_install_repo'] ) ) {
			$slug                            = $install_options['github_updater_install_repo'];
			$new_source                      = trailingslashit( $remote_source ) . $slug;
			self::$options['remote_install'] = true;
		}

		Singleton::get_instance( 'Branch', $this )->set_branch_on_switch( $slug );

		$new_source = $this->fix_misnamed_directory( $new_source, $remote_source, $upgrader_object, $slug );
		$new_source = $this->fix_gitlab_release_asset_directory( $new_source, $remote_source, $upgrader_object, $slug );

		$wp_filesystem->move( $source, $new_source );

		return trailingslashit( $new_source );
	}
public function upgrader_source_selection( $source, $remote_source, $upgrader, $hook_extra = null ) {
		global $wp_filesystem;
		$slug            = null;
		$repo            = null;
		$new_source      = null;
		$upgrader_object = null;

		/*
		 * Rename plugins.
		 */
		if ( $upgrader instanceof \Plugin_Upgrader ) {
			$upgrader_object = Singleton::get_instance( 'Plugin', $this );
			if ( isset( $hook_extra['plugin'] ) ) {
				$slug       = dirname( $hook_extra['plugin'] );
				$new_source = trailingslashit( $remote_source ) . $slug;
			}
		}

		/*
		 * Rename themes.
		 */
		if ( $upgrader instanceof \Theme_Upgrader ) {
			$upgrader_object = Singleton::get_instance( 'Theme', $this );
			if ( isset( $hook_extra['theme'] ) ) {
				$slug       = $hook_extra['theme'];
				$new_source = trailingslashit( $remote_source ) . $slug;
			}
		}

		$repo = $this->get_repo_slugs( $slug, $upgrader_object );

		/*
		 * Not GitHub Updater plugin/theme.
		 */
		if ( ! isset( $_POST['github_updater_repo'] ) && empty( $repo ) ) {
			return $source;
		}

		/*
		 * Remote install source.
		 */
		$install_options = $this->get_class_vars( 'Install', 'install' );
		if ( empty( $repo ) && isset( $install_options['github_updater_install_repo'] ) ) {
			$slug                            = $install_options['github_updater_install_repo'];
			$new_source                      = trailingslashit( $remote_source ) . $slug;
			self::$options['remote_install'] = true;
		}

		Singleton::get_instance( 'Branch', $this )->set_branch_on_switch( $slug );

		$new_source = $this->fix_misnamed_directory( $new_source, $remote_source, $upgrader_object, $slug );
		$new_source = $this->fix_gitlab_release_asset_directory( $new_source, $remote_source, $upgrader_object, $slug );

		$wp_filesystem->move( $source, $new_source );

		return trailingslashit( $new_source );
	}
public function upgrader_source_selection ( $ source , $ remote_source , $ upgrader , $ hook_extra = null ) { global $ wp_filesystem ; $ slug = null ; $ repo = null ; $ new_source = null ; $ upgrader_object = null ; /*
		 * Rename plugins.
		 */ if ( $ upgrader instanceof \ Plugin_Upgrader ) { $ upgrader_object = Singleton :: get_instance ( 'Plugin' , $ this ) ; if ( isset ( $ hook_extra [ 'plugin' ] ) ) { $ slug = dirname ( $ hook_extra [ 'plugin' ] ) ; $ new_source = trailingslashit ( $ remote_source ) . $ slug ; } } /*
		 * Rename themes.
		 */ if ( $ upgrader instanceof \ Theme_Upgrader ) { $ upgrader_object = Singleton :: get_instance ( 'Theme' , $ this ) ; if ( isset ( $ hook_extra [ 'theme' ] ) ) { $ slug = $ hook_extra [ 'theme' ] ; $ new_source = trailingslashit ( $ remote_source ) . $ slug ; } } $ repo = $ this -> get_repo_slugs ( $ slug , $ upgrader_object ) ; /*
		 * Not GitHub Updater plugin/theme.
		 */ if ( ! isset ( $ _POST [ 'github_updater_repo' ] ) && empty ( $ repo ) ) { return $ source ; } /*
		 * Remote install source.
		 */ $ install_options = $ this -> get_class_vars ( 'Install' , 'install' ) ; if ( empty ( $ repo ) && isset ( $ install_options [ 'github_updater_install_repo' ] ) ) { $ slug = $ install_options [ 'github_updater_install_repo' ] ; $ new_source = trailingslashit ( $ remote_source ) . $ slug ; self :: $ options [ 'remote_install' ] = true ; } Singleton :: get_instance ( 'Branch' , $ this ) -> set_branch_on_switch ( $ slug ) ; $ new_source = $ this -> fix_misnamed_directory ( $ new_source , $ remote_source , $ upgrader_object , $ slug ) ; $ new_source = $ this -> fix_gitlab_release_asset_directory ( $ new_source , $ remote_source , $ upgrader_object , $ slug ) ; $ wp_filesystem -> move ( $ source , $ new_source ) ; return trailingslashit ( $ new_source ) ; }
Used for renaming of sources to ensure correct directory name.

@since WordPress 4.4.0 The $hook_extra parameter became available.

@param string                           $source
@param string                           $remote_source
@param \Plugin_Upgrader|\Theme_Upgrader $upgrader
@param array                            $hook_extra

@return string
Used for renaming of sources to ensure correct directory name .