Install only compatible plugins
Summary: Currently, when user installs a new plugin which was not installed before that, Flipper always takes the latest available version of it. This is not correct, because the latest version might be incompatible with the currently running version of Flipper. To avoid that, instead of always using just the latest version we will be using the most recent version which is compatible with the current Flipper version. Reviewed By: passy Differential Revision: D28306505 fbshipit-source-id: 4258a456d6a5d92cbf48af55c0efb17ecf560b57
This commit is contained in:
committed by
Facebook GitHub Bot
parent
2b41fba704
commit
28fd8da615
@@ -20,6 +20,8 @@ import {
|
||||
addFailedPlugins,
|
||||
registerLoadedPlugins,
|
||||
registerBundledPlugins,
|
||||
registerMarketplacePlugins,
|
||||
MarketplacePluginDetails,
|
||||
} from '../reducers/plugins';
|
||||
import GK from '../fb-stubs/GK';
|
||||
import {FlipperBasePlugin} from '../plugin';
|
||||
@@ -49,6 +51,7 @@ import * as crc32 from 'crc32';
|
||||
// eslint-disable-next-line import/no-unresolved
|
||||
import getDefaultPluginsIndex from '../utils/getDefaultPluginsIndex';
|
||||
import {isDevicePluginDefinition} from '../utils/pluginUtils';
|
||||
import {isPluginCompatible} from '../utils/isPluginCompatible';
|
||||
|
||||
let defaultPluginsIndex: any = null;
|
||||
|
||||
@@ -74,6 +77,13 @@ export default async (store: Store, logger: Logger) => {
|
||||
|
||||
defaultPluginsIndex = getDefaultPluginsIndex();
|
||||
|
||||
const marketplacePlugins = store.getState().plugins.marketplacePlugins;
|
||||
store.dispatch(
|
||||
registerMarketplacePlugins(
|
||||
selectCompatibleMarketplaceVersions(marketplacePlugins),
|
||||
),
|
||||
);
|
||||
|
||||
const uninstalledPlugins = store.getState().plugins.uninstalledPlugins;
|
||||
|
||||
const bundledPlugins = getBundledPlugins();
|
||||
@@ -320,3 +330,27 @@ const requirePluginInternal = (
|
||||
}
|
||||
return plugin;
|
||||
};
|
||||
|
||||
export function selectCompatibleMarketplaceVersions(
|
||||
availablePlugins: MarketplacePluginDetails[],
|
||||
): MarketplacePluginDetails[] {
|
||||
const plugins: MarketplacePluginDetails[] = [];
|
||||
for (const plugin of availablePlugins) {
|
||||
if (!isPluginCompatible(plugin)) {
|
||||
const compatibleVersion =
|
||||
plugin.availableVersions?.find(isPluginCompatible) ??
|
||||
plugin.availableVersions?.slice(-1).pop();
|
||||
if (compatibleVersion) {
|
||||
plugins.push({
|
||||
...compatibleVersion,
|
||||
availableVersions: plugin?.availableVersions,
|
||||
});
|
||||
} else {
|
||||
plugins.push(plugin);
|
||||
}
|
||||
} else {
|
||||
plugins.push(plugin);
|
||||
}
|
||||
}
|
||||
return plugins;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user