From d987e36c6266327a657c7115b9df94b7e4bdc0a0 Mon Sep 17 00:00:00 2001 From: Andrey Goncharov Date: Fri, 10 Jun 2022 06:38:50 -0700 Subject: [PATCH] Add a single place to initialize Flipper utilitary folders Summary: We have several folders Flipper uses that sometimes we forget to create before Flipper starts. With this diff we have a single place to initialise the necessary folder structure. Reviewed By: lblasa Differential Revision: D37036601 fbshipit-source-id: f945f2bfdfc6be24ba87bd4b13c7fcef3fd74451 --- .../src/FlipperServerImpl.tsx | 8 ++++++++ .../src/utils/certificateUtils.tsx | 4 ++-- .../flipper-server-core/src/utils/paths.tsx | 18 ++++++++++++++++++ .../flipper-server-core/src/utils/settings.tsx | 13 +++---------- 4 files changed, 31 insertions(+), 12 deletions(-) create mode 100644 desktop/flipper-server-core/src/utils/paths.tsx diff --git a/desktop/flipper-server-core/src/FlipperServerImpl.tsx b/desktop/flipper-server-core/src/FlipperServerImpl.tsx index fab9bc08e..29fe4748c 100644 --- a/desktop/flipper-server-core/src/FlipperServerImpl.tsx +++ b/desktop/flipper-server-core/src/FlipperServerImpl.tsx @@ -50,6 +50,8 @@ import rm from 'rimraf'; import assert from 'assert'; import {initializeAdbClient} from './devices/android/adbClient'; import {assertNotNull} from './comms/Utilities'; +import {mkdirp} from 'fs-extra'; +import {flipperDataFolder, flipperSettingsFolder} from './utils/paths'; const {access, copyFile, mkdir, unlink, stat, readlink, readFile, writeFile} = promises; @@ -167,6 +169,7 @@ export class FlipperServerImpl implements FlipperServer { this.setServerState('starting'); try { + await this.createFolders(); await this.server.init(); await this.pluginManager.start(); await this.startDeviceListeners(); @@ -179,6 +182,11 @@ export class FlipperServerImpl implements FlipperServer { } } + private async createFolders() { + await mkdirp(flipperDataFolder); + await mkdirp(flipperSettingsFolder); + } + async startDeviceListeners() { const asyncDeviceListenersPromises: Array> = []; if (this.config.settings.enableAndroid) { diff --git a/desktop/flipper-server-core/src/utils/certificateUtils.tsx b/desktop/flipper-server-core/src/utils/certificateUtils.tsx index 9b17224dd..66b416080 100644 --- a/desktop/flipper-server-core/src/utils/certificateUtils.tsx +++ b/desktop/flipper-server-core/src/utils/certificateUtils.tsx @@ -16,15 +16,15 @@ import { import path from 'path'; import tmp, {FileOptions} from 'tmp'; import {reportPlatformFailures} from 'flipper-common'; -import os from 'os'; import {isTest} from 'flipper-common'; +import {flipperDataFolder} from './paths'; const tmpFile = promisify(tmp.file) as ( options?: FileOptions, ) => Promise; const getFilePath = (fileName: string): string => { - return path.resolve(os.homedir(), '.flipper', 'certs', fileName); + return path.resolve(flipperDataFolder, 'certs', fileName); }; // Desktop file paths diff --git a/desktop/flipper-server-core/src/utils/paths.tsx b/desktop/flipper-server-core/src/utils/paths.tsx new file mode 100644 index 000000000..03036402b --- /dev/null +++ b/desktop/flipper-server-core/src/utils/paths.tsx @@ -0,0 +1,18 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +import path from 'path'; +import os from 'os'; +import xdg from 'xdg-basedir'; + +export const flipperDataFolder = path.resolve(os.homedir(), '.flipper'); +export const flipperSettingsFolder = path.resolve( + ...(xdg.config ? [xdg.config] : [os.homedir(), '.config']), + 'flipper', +); diff --git a/desktop/flipper-server-core/src/utils/settings.tsx b/desktop/flipper-server-core/src/utils/settings.tsx index 52cfc18f9..4094c2610 100644 --- a/desktop/flipper-server-core/src/utils/settings.tsx +++ b/desktop/flipper-server-core/src/utils/settings.tsx @@ -9,9 +9,9 @@ import os from 'os'; import {resolve} from 'path'; -import xdg from 'xdg-basedir'; import {Settings, Tristate} from 'flipper-common'; import {readFile, writeFile, pathExists, mkdirp} from 'fs-extra'; +import {flipperSettingsFolder} from './paths'; export async function loadSettings( settingsString: string = '', @@ -36,21 +36,14 @@ export async function loadSettings( } export async function saveSettings(settings: Settings): Promise { - await mkdirp(getSettingsDir()); + await mkdirp(flipperSettingsFolder); await writeFile(getSettingsFile(), JSON.stringify(settings, null, 2), { encoding: 'utf8', }); } -function getSettingsDir() { - return resolve( - ...(xdg.config ? [xdg.config] : [os.homedir(), '.config']), - 'flipper', - ); -} - function getSettingsFile() { - return resolve(getSettingsDir(), 'settings.json'); + return resolve(flipperSettingsFolder, 'settings.json'); } export const DEFAULT_ANDROID_SDK_PATH = getDefaultAndroidSdkPath();