public override async Task<bool> Install ()
		{
			var runner = new BrewRunner (Context.Instance);
			if (!String.IsNullOrEmpty (HomebrewTapName)) {
				if (!await runner.Tap (HomebrewTapName))
					return false;
			}

			bool install = !InstalledButWrongVersion;
			bool success;
			if (multipleVersionsPickle) {
				Log.InfoLine ($"{Name} has multiple versions installed, let's get out of this pickle");
				// 1. unpin
				success = await runner.UnPin (Name);
				
				// 2. unlink
				success = await runner.Unlink (Name);
				
				// 3. uninstall --ignore-dependencies
				success = await runner.Uninstall (Name, ignoreDependencies: true, force: true);
				install = true;
			}

			string installName = HomebrewFormulaUrl != null ? HomebrewFormulaUrl.ToString () : Name;
			if (!install) {
				success = await runner.Upgrade (installName);
			} else
				success = await runner.Install (installName);

			if (!success || !Pin)
				return success;

			return await runner.Pin (Name);
		}
        public override async Task <bool> Install()
        {
            var runner = new BrewRunner(Context.Instance);

            if (!String.IsNullOrEmpty(HomebrewTapName))
            {
                if (!await runner.Tap(HomebrewTapName))
                {
                    return(false);
                }
            }

            bool success;

            if (InstalledButWrongVersion)
            {
                if (HomebrewFormulaUrl != null)
                {
                    success = await runner.Upgrade(HomebrewFormulaUrl.ToString());
                }
                else
                {
                    success = await runner.Upgrade(Name);
                }
            }
            else
            {
                success = await runner.Install(Name);
            }

            if (!success || !Pin)
            {
                return(success);
            }

            return(await runner.Pin(Name));
        }