boot method

Future<void> boot()

Initializes the class by setting some properties and loading the package script.

Implementation

Future<void> boot() async {
  if (booted) return;

  preferredMethod = (args?['method'] as String?) ?? package.method ?? 'auto';
  forceMethod = (args?['force-method'] as bool?) ?? false;
  channelChosen = (args?['channel'] as String?) ?? package.channel ?? '';

  repoSlug = repo.url.slugify();
  packageName = package.name;
  cacheRepoDir = XPM.cacheDir("repos/$repoSlug/$packageName");
  packageDir = Repositories.dir(repoSlug, package: packageName);

  final String packageDirPath = (await packageDir).path;
  baseScript = File('$packageDirPath/../base.bash');

  final script = package.script;
  if (script == null) {
    leave(message: 'Package "{@blue}$packageName{@end}" has no script.', exitCode: 1);
  }
  packageScript = BashScript(script);

  if (await packageScript.contents() == null) {
    leave(message: 'Script for "{@blue}$packageName{@end}" does not exist.', exitCode: 1);
  }

  Global.sudoPath = await Executable('sudo').find() ?? '';
  Global.hasFlatpak = await Executable('flatpak').find() != null;
  Global.hasSnap = await Executable('snap').find() != null;

  booted = true;
}