mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Fix hotbar migration of workspaces (#3178)
This commit is contained in:
1 parent
b9dfd20a93
commit
51655884c7
39 files changed
+333
-446
No files matched your search
@@ -23,7 +23,7 @@ import path from "path";
|
||||
import { app } from "electron";
|
||||
import fse from "fs-extra";
|
||||
import type { ClusterModel } from "../../common/cluster-store";
|
||||
import { MigrationDeclaration, migrationLog } from "../helpers";
|
||||
import type { MigrationDeclaration } from "../helpers";
|
||||
|
||||
interface Pre500WorkspaceStoreModel {
|
||||
workspaces: {
|
||||
@@ -36,7 +36,7 @@ export default {
|
||||
version: "5.0.0-beta.10",
|
||||
run(store) {
|
||||
const userDataPath = app.getPath("userData");
|
||||
|
||||
|
||||
try {
|
||||
const workspaceData: Pre500WorkspaceStoreModel = fse.readJsonSync(path.join(userDataPath, "lens-workspace-store.json"));
|
||||
const workspaces = new Map<string, string>(); // mapping from WorkspaceId to name
|
||||
@@ -45,8 +45,6 @@ export default {
|
||||
workspaces.set(id, name);
|
||||
}
|
||||
|
||||
migrationLog("workspaces", JSON.stringify([...workspaces.entries()]));
|
||||
|
||||
const clusters: ClusterModel[] = store.get("clusters");
|
||||
|
||||
for (const cluster of clusters) {
|
||||
@@ -58,8 +56,6 @@ export default {
|
||||
|
||||
store.set("clusters", clusters);
|
||||
} catch (error) {
|
||||
migrationLog("error", error.path);
|
||||
|
||||
if (!(error.code === "ENOENT" && error.path.endsWith("lens-workspace-store.json"))) {
|
||||
// ignore lens-workspace-store.json being missing
|
||||
throw error;
|
||||
|
||||
@@ -20,34 +20,24 @@
|
||||
*/
|
||||
|
||||
// Cleans up a store that had the state related data stored
|
||||
import type { Hotbar } from "../../common/hotbar-store";
|
||||
import { ClusterStore } from "../../common/cluster-store";
|
||||
import { Hotbar, HotbarStore } from "../../common/hotbar-store";
|
||||
import * as uuid from "uuid";
|
||||
import type { MigrationDeclaration } from "../helpers";
|
||||
import { catalogEntity } from "../../main/catalog-sources/general";
|
||||
|
||||
export default {
|
||||
version: "5.0.0-alpha.0",
|
||||
run(store) {
|
||||
const hotbars: Hotbar[] = [];
|
||||
const hotbar: Hotbar = {
|
||||
id: uuid.v4(),
|
||||
name: "default",
|
||||
items: HotbarStore.getInitialItems(),
|
||||
};
|
||||
|
||||
ClusterStore.getInstance().clustersList.forEach((cluster: any) => {
|
||||
const name = cluster.workspace;
|
||||
const { metadata: { uid, name, source } } = catalogEntity;
|
||||
|
||||
if (!name) return;
|
||||
hotbar.items[0] = { entity: { uid, name, source } };
|
||||
|
||||
let hotbar = hotbars.find((h) => h.name === name);
|
||||
|
||||
if (!hotbar) {
|
||||
hotbar = { id: uuid.v4(), name, items: [] };
|
||||
hotbars.push(hotbar);
|
||||
}
|
||||
|
||||
hotbar.items.push({
|
||||
entity: { uid: cluster.id },
|
||||
params: {}
|
||||
});
|
||||
});
|
||||
|
||||
store.set("hotbars", hotbars);
|
||||
store.set("hotbars", [hotbar]);
|
||||
}
|
||||
} as MigrationDeclaration;
|
||||
@@ -19,12 +19,15 @@
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
import { createHash } from "crypto";
|
||||
import { app } from "electron";
|
||||
import fse from "fs-extra";
|
||||
import { isNull } from "lodash";
|
||||
import path from "path";
|
||||
import * as uuid from "uuid";
|
||||
import type { ClusterStoreModel } from "../../common/cluster-store";
|
||||
import { defaultHotbarCells, Hotbar } from "../../common/hotbar-store";
|
||||
import { defaultHotbarCells, Hotbar, HotbarStore } from "../../common/hotbar-store";
|
||||
import { catalogEntity } from "../../main/catalog-sources/general";
|
||||
import type { MigrationDeclaration } from "../helpers";
|
||||
|
||||
interface Pre500WorkspaceStoreModel {
|
||||
@@ -49,7 +52,19 @@ export default {
|
||||
workspaceHotbars.set(id, {
|
||||
id: uuid.v4(), // don't use the old IDs as they aren't necessarily UUIDs
|
||||
items: [],
|
||||
name: `Workspace: ${name}`,
|
||||
});
|
||||
}
|
||||
|
||||
{
|
||||
// grab the default named hotbar or the first.
|
||||
const defaultHotbarIndex = Math.max(0, hotbars.findIndex(hotbar => hotbar.name === "default"));
|
||||
const [{ name, id, items }] = hotbars.splice(defaultHotbarIndex, 1);
|
||||
|
||||
workspaceHotbars.set("default", {
|
||||
name,
|
||||
id,
|
||||
items: items.filter(Boolean),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -59,7 +74,7 @@ export default {
|
||||
if (workspaceHotbar?.items.length < defaultHotbarCells) {
|
||||
workspaceHotbar.items.push({
|
||||
entity: {
|
||||
uid: cluster.id,
|
||||
uid: createHash("md5").update(`${cluster.kubeConfigPath}:${cluster.contextName}`).digest("hex"),
|
||||
name: cluster.preferences.clusterName || cluster.contextName,
|
||||
}
|
||||
});
|
||||
@@ -74,6 +89,46 @@ export default {
|
||||
hotbars.push(hotbar);
|
||||
}
|
||||
|
||||
/**
|
||||
* Finally, make sure that the catalog entity hotbar item is in place.
|
||||
* Just in case something else removed it.
|
||||
*
|
||||
* if every hotbar has elements that all not the `catalog-entity` item
|
||||
*/
|
||||
if (hotbars.every(hotbar => hotbar.items.every(item => item?.entity?.uid !== "catalog-entity"))) {
|
||||
// note, we will add a new whole hotbar here called "default" if that was previously removed
|
||||
const defaultHotbar = hotbars.find(hotbar => hotbar.name === "default");
|
||||
const { metadata: { uid, name, source } } = catalogEntity;
|
||||
|
||||
if (defaultHotbar) {
|
||||
const freeIndex = defaultHotbar.items.findIndex(isNull);
|
||||
|
||||
if (freeIndex === -1) {
|
||||
// making a new hotbar is less destructive if the first hotbar
|
||||
// called "default" is full than overriding a hotbar item
|
||||
const hotbar = {
|
||||
id: uuid.v4(),
|
||||
name: "initial",
|
||||
items: HotbarStore.getInitialItems(),
|
||||
};
|
||||
|
||||
hotbar.items[0] = { entity: { uid, name, source } };
|
||||
hotbars.unshift(hotbar);
|
||||
} else {
|
||||
defaultHotbar.items[freeIndex] = { entity: { uid, name, source } };
|
||||
}
|
||||
} else {
|
||||
const hotbar = {
|
||||
id: uuid.v4(),
|
||||
name: "default",
|
||||
items: HotbarStore.getInitialItems(),
|
||||
};
|
||||
|
||||
hotbar.items[0] = { entity: { uid, name, source } };
|
||||
hotbars.unshift(hotbar);
|
||||
}
|
||||
}
|
||||
|
||||
store.set("hotbars", hotbars);
|
||||
} catch (error) {
|
||||
if (!(error.code === "ENOENT" && error.path.endsWith("lens-workspace-store.json"))) {
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
*/
|
||||
|
||||
import type { Hotbar } from "../../common/hotbar-store";
|
||||
import { catalogEntityRegistry } from "../../renderer/api/catalog-entity-registry";
|
||||
import { catalogEntityRegistry } from "../../main/catalog";
|
||||
import type { MigrationDeclaration } from "../helpers";
|
||||
|
||||
export default {
|
||||
|
||||
@@ -23,18 +23,18 @@ import fse from "fs-extra";
|
||||
import { app, remote } from "electron";
|
||||
import path from "path";
|
||||
|
||||
export async function fileNameMigration() {
|
||||
export function fileNameMigration() {
|
||||
const userDataPath = (app || remote.app).getPath("userData");
|
||||
const configJsonPath = path.join(userDataPath, "config.json");
|
||||
const lensUserStoreJsonPath = path.join(userDataPath, "lens-user-store.json");
|
||||
|
||||
try {
|
||||
await fse.move(configJsonPath, lensUserStoreJsonPath);
|
||||
fse.moveSync(configJsonPath, lensUserStoreJsonPath);
|
||||
} catch (error) {
|
||||
if (error.code === "ENOENT" && error.path === configJsonPath) { // (No such file or directory)
|
||||
return; // file already moved
|
||||
} else if (error.message === "dest already exists.") {
|
||||
await fse.remove(configJsonPath);
|
||||
fse.removeSync(configJsonPath);
|
||||
} else {
|
||||
// pass other errors along
|
||||
throw error;
|
||||
|
||||
Reference in new issue
Block a user