Remove global access to adb client and idb config

Summary: Idb and adb sholuld not really be accessed out side of Adnroid and iOS device managers

Reviewed By: lawrencelomax

Differential Revision: D33915162

fbshipit-source-id: 0d1bb028b9a53254cf5b0ce6289ae76339c5a254
This commit is contained in:
Andrey Goncharov
2022-02-02 03:05:34 -08:00
committed by Facebook GitHub Bot
parent 51ef1810b2
commit c7492a83c7
6 changed files with 14 additions and 42 deletions

View File

@@ -46,8 +46,7 @@ import {promises} from 'fs';
// Electron 11 runs on Node 12 which does not support fs.promises.rm
import rm from 'rimraf';
import assert from 'assert';
import {setAdbClient} from './devices/android/adbClient';
import {setIdbConfig} from './devices/ios/idbConfig';
import {initializeAdbClient} from './devices/android/adbClient';
import {assertNotNull} from './comms/Utilities';
const {access, copyFile, mkdir, unlink, stat, readlink, readFile, writeFile} =
@@ -163,7 +162,7 @@ export class FlipperServerImpl implements FlipperServer {
const asyncDeviceListenersPromises: Array<Promise<void>> = [];
if (this.config.settings.enableAndroid) {
asyncDeviceListenersPromises.push(
setAdbClient(this.config.settings)
initializeAdbClient(this.config.settings)
.then((adbClient) => {
if (!adbClient) {
return;
@@ -180,8 +179,7 @@ export class FlipperServerImpl implements FlipperServer {
);
}
if (this.config.settings.enableIOS) {
const idbConfig = setIdbConfig(this.config.settings);
this.ios = new IOSDeviceManager(this, idbConfig);
this.ios = new IOSDeviceManager(this, this.config.settings);
asyncDeviceListenersPromises.push(
this.ios.watchIOSDevices().catch((e) => {
console.error(

View File

@@ -13,20 +13,14 @@ import adbConfig from './adbConfig';
import adbkit, {Client} from 'adbkit';
import path from 'path';
let instance: Client | undefined;
type Config = {
androidHome: string;
};
export function getAdbClient(): Client | undefined {
return instance;
}
export async function setAdbClient(
export async function initializeAdbClient(
config: Config,
): Promise<Client | undefined> {
instance = await reportPlatformFailures(
): Promise<Client | void> {
const adbClient = await reportPlatformFailures(
createClient(config),
'createADBClient',
).catch((e) => {
@@ -34,9 +28,8 @@ export async function setAdbClient(
'Failed to initialize ADB. Please disable Android support in settings, or configure a correct path.',
e,
);
return undefined;
});
return instance;
return adbClient;
}
/* Adbkit will attempt to start the adb server if it's not already running,

View File

@@ -7,9 +7,8 @@
* @format
*/
import {IdbConfig} from './idbConfig';
import CertificateProvider from '../../utils/CertificateProvider';
import iosUtil from './iOSContainerUtility';
import iosUtil, {IdbConfig} from './iOSContainerUtility';
import fs from 'fs-extra';
import {promisify} from 'util';
import tmp, {DirOptions} from 'tmp';

View File

@@ -19,6 +19,11 @@ import fs from 'fs-extra';
import path from 'path';
const exec = promisify(child_process.exec);
export type IdbConfig = {
idbPath: string;
enablePhysicalIOS: boolean;
};
// Use debug to get helpful logs when idb fails
const idbLogLevel = 'DEBUG';
const operationPrefix = 'iosContainerUtility';

View File

@@ -12,7 +12,7 @@ import type {IOSDeviceParams} from 'flipper-common';
import path from 'path';
import childProcess from 'child_process';
import {exec} from 'promisify-child-process';
import iosUtil from './iOSContainerUtility';
import iosUtil, {IdbConfig} from './iOSContainerUtility';
import IOSDevice from './IOSDevice';
import {
ERR_NO_IDB_OR_XCODE_AVAILABLE,
@@ -22,7 +22,6 @@ import {
} from './IOSBridge';
import {FlipperServerImpl} from '../../FlipperServerImpl';
import {getFlipperServerConfig} from '../../FlipperServerConfig';
import {IdbConfig} from './idbConfig';
import iOSCertificateProvider from './iOSCertificateProvider';
export class IOSDeviceManager {

View File

@@ -1,22 +0,0 @@
/**
* 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
*/
export type IdbConfig = {
idbPath: string;
enablePhysicalIOS: boolean;
};
let idbConfig: IdbConfig | undefined;
export const getIdbConfig = () => idbConfig;
export const setIdbConfig = (newIdbConfig: IdbConfig) => {
idbConfig = newIdbConfig;
return idbConfig;
};