diff --git a/src/config.rs b/src/config.rs index d08ac0d2..0c598acf 100644 --- a/src/config.rs +++ b/src/config.rs @@ -84,6 +84,7 @@ pub enum Step { Gcloud, Gem, GitRepos, + Haxelib, GnomeShellExtensions, HomeManager, Jetpack, diff --git a/src/main.rs b/src/main.rs index 7f2c7af7..ec9a7c66 100644 --- a/src/main.rs +++ b/src/main.rs @@ -313,6 +313,7 @@ fn run() -> Result<()> { runner.execute(Step::Composer, "composer", || generic::run_composer_update(&ctx))?; runner.execute(Step::Krew, "krew", || generic::run_krew_upgrade(run_type))?; runner.execute(Step::Gem, "gem", || generic::run_gem(&base_dirs, run_type))?; + runner.execute(Step::Haxelib, "haxelib", || generic::run_haxelib_update(&ctx))?; runner.execute(Step::Sheldon, "sheldon", || generic::run_sheldon(&ctx))?; runner.execute(Step::Rtcl, "rtcl", || generic::run_rtcl(&ctx))?; runner.execute(Step::Bin, "bin", || generic::bin_update(&ctx))?; diff --git a/src/steps/generic.rs b/src/steps/generic.rs index 9e7c75ca..c0f08d2a 100644 --- a/src/steps/generic.rs +++ b/src/steps/generic.rs @@ -77,6 +77,30 @@ pub fn run_gem(base_dirs: &BaseDirs, run_type: RunType) -> Result<()> { command.check_run() } +pub fn run_haxelib_update(ctx: &ExecutionContext) -> Result<()> { + let haxelib = utils::require("haxelib")?; + + let haxelib_dir = + PathBuf::from(std::str::from_utf8(&Command::new(&haxelib).arg("config").output()?.stdout)?.trim()).require()?; + + let directory_writable = tempfile_in(&haxelib_dir).is_ok(); + debug!("{:?} writable: {}", haxelib_dir, directory_writable); + + print_separator("haxelib"); + + let mut command = if directory_writable { + ctx.run_type().execute(&haxelib) + } else { + let mut c = ctx + .run_type() + .execute(ctx.sudo().as_ref().ok_or(TopgradeError::SudoRequired)?); + c.arg(&haxelib); + c + }; + + command.arg("update").check_run() +} + pub fn run_sheldon(ctx: &ExecutionContext) -> Result<()> { let sheldon = utils::require("sheldon")?;