From 4dca19a818ff7931240e2165ebb8002fab52031c Mon Sep 17 00:00:00 2001 From: Gouri Kumari Date: Thu, 6 Jun 2019 16:09:22 -0400 Subject: [PATCH 1/4] Add try/catch to handle an unauthorized permission exception while creating directories --- .../Sdks/AndroidSdkUnix.cs | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkUnix.cs b/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkUnix.cs index 0d18f7b..004d6ab 100644 --- a/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkUnix.cs +++ b/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkUnix.cs @@ -146,7 +146,7 @@ public override void SetPreferredAndroidSdkPath (string path) } androidEl.SetAttributeValue ("path", path); - SaveConfig (doc); + SaveConfig (doc, Logger); } public override void SetPreferredJavaSdkPath (string path) @@ -162,7 +162,7 @@ public override void SetPreferredJavaSdkPath (string path) } javaEl.SetAttributeValue ("path", path); - SaveConfig (doc); + SaveConfig (doc, Logger); } public override void SetPreferredAndroidNdkPath (string path) @@ -178,10 +178,10 @@ public override void SetPreferredAndroidNdkPath (string path) } androidEl.SetAttributeValue ("path", path); - SaveConfig (doc); + SaveConfig (doc, Logger); } - void SaveConfig (XDocument doc) + void SaveConfig (XDocument doc, Action logger) { string cfg = UnixConfigPath; List created = null; @@ -189,11 +189,18 @@ void SaveConfig (XDocument doc) if (!File.Exists (cfg)) { string dir = Path.GetDirectoryName (cfg); if (!Directory.Exists (dir)) { - Directory.CreateDirectory (dir); - AddToList (dir); - } - AddToList (cfg); - } + try + { + Directory.CreateDirectory(dir); + } + catch (Exception ex) + { + logger(TraceLevel.Error, $"Unable to create directory {dir}, user do not have the right permissions, {ex.Message}."); + } + AddToList(dir); + } + AddToList (cfg); + } doc.Save (cfg); FixOwnership (created); From 72a76052097dbb6289e2db576f25c98945fae957 Mon Sep 17 00:00:00 2001 From: Gouri Kumari Date: Thu, 6 Jun 2019 16:27:11 -0400 Subject: [PATCH 2/4] Change the return value of saveconfigdoc to bool for validation during installation process --- .../AndroidSdkInfo.cs | 5 +++-- .../Sdks/AndroidSdkBase.cs | 2 +- .../Sdks/AndroidSdkUnix.cs | 11 +++++++---- .../Sdks/AndroidSdkWindows.cs | 3 ++- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/Xamarin.Android.Tools.AndroidSdk/AndroidSdkInfo.cs b/src/Xamarin.Android.Tools.AndroidSdk/AndroidSdkInfo.cs index 5738fb1..3e69c28 100644 --- a/src/Xamarin.Android.Tools.AndroidSdk/AndroidSdkInfo.cs +++ b/src/Xamarin.Android.Tools.AndroidSdk/AndroidSdkInfo.cs @@ -155,12 +155,13 @@ internal static void DefaultConsoleLogger (TraceLevel level, string message) } } - public static void SetPreferredAndroidSdkPath (string path, Action logger = null) + public static bool SetPreferredAndroidSdkPath (string path, Action logger = null) { logger = logger ?? DefaultConsoleLogger; var sdk = CreateSdk (logger); - sdk.SetPreferredAndroidSdkPath (path); + bool setSDKPath = sdk.SetPreferredAndroidSdkPath(path); + return setSDKPath; } public static void SetPreferredJavaSdkPath (string path, Action logger = null) diff --git a/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkBase.cs b/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkBase.cs index 12892b9..45a7aa4 100644 --- a/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkBase.cs +++ b/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkBase.cs @@ -109,7 +109,7 @@ public virtual void Initialize (string androidSdkPath = null, string androidNdkP protected abstract string GetJavaSdkPath (); protected abstract string GetShortFormPath (string path); - public abstract void SetPreferredAndroidSdkPath (string path); + public abstract bool SetPreferredAndroidSdkPath (string path); public abstract void SetPreferredJavaSdkPath (string path); public abstract void SetPreferredAndroidNdkPath (string path); diff --git a/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkUnix.cs b/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkUnix.cs index 004d6ab..d4e4f7f 100644 --- a/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkUnix.cs +++ b/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkUnix.cs @@ -133,7 +133,7 @@ protected override string GetShortFormPath (string path) return path; } - public override void SetPreferredAndroidSdkPath (string path) + public override bool SetPreferredAndroidSdkPath (string path) { path = NullIfEmpty (path); @@ -145,8 +145,9 @@ public override void SetPreferredAndroidSdkPath (string path) doc.Root.Add (androidEl); } - androidEl.SetAttributeValue ("path", path); - SaveConfig (doc, Logger); + androidEl.SetAttributeValue("path", path); + bool setConfig = SaveConfig(doc, Logger); + return setConfig; } public override void SetPreferredJavaSdkPath (string path) @@ -181,7 +182,7 @@ public override void SetPreferredAndroidNdkPath (string path) SaveConfig (doc, Logger); } - void SaveConfig (XDocument doc, Action logger) + bool SaveConfig (XDocument doc, Action logger) { string cfg = UnixConfigPath; List created = null; @@ -196,6 +197,7 @@ void SaveConfig (XDocument doc, Action logger) catch (Exception ex) { logger(TraceLevel.Error, $"Unable to create directory {dir}, user do not have the right permissions, {ex.Message}."); + return false; } AddToList(dir); } @@ -210,6 +212,7 @@ void AddToList (string path) created = new List (); created.Add (path); } + return true; } static readonly string GetUnixConfigDirOverrideName = $"UnixConfigPath directory override! {typeof (AndroidSdkInfo).AssemblyQualifiedName}"; diff --git a/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkWindows.cs b/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkWindows.cs index 04a3371..59a4f14 100644 --- a/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkWindows.cs +++ b/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkWindows.cs @@ -236,10 +236,11 @@ protected override string GetShortFormPath (string path) return KernelEx.GetShortPathName (path); } - public override void SetPreferredAndroidSdkPath (string path) + public override bool SetPreferredAndroidSdkPath (string path) { var regKey = GetMDRegistryKey (); RegistryEx.SetValueString (RegistryEx.CurrentUser, regKey, MDREG_ANDROID_SDK, path ?? "", RegistryEx.Wow64.Key32); + return true; } public override void SetPreferredJavaSdkPath (string path) From 07d101b2bf4ede72fc207e7c3a2c84436a4746ab Mon Sep 17 00:00:00 2001 From: Gouri Kumari Date: Thu, 6 Jun 2019 16:56:19 -0400 Subject: [PATCH 3/4] Fix formatting --- src/Xamarin.Android.Tools.AndroidSdk/AndroidSdkInfo.cs | 6 +++--- .../Sdks/AndroidSdkWindows.cs | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Xamarin.Android.Tools.AndroidSdk/AndroidSdkInfo.cs b/src/Xamarin.Android.Tools.AndroidSdk/AndroidSdkInfo.cs index 3e69c28..59b21a4 100644 --- a/src/Xamarin.Android.Tools.AndroidSdk/AndroidSdkInfo.cs +++ b/src/Xamarin.Android.Tools.AndroidSdk/AndroidSdkInfo.cs @@ -159,9 +159,9 @@ public static bool SetPreferredAndroidSdkPath (string path, Action logger = null) diff --git a/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkWindows.cs b/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkWindows.cs index 59a4f14..d7fda9d 100644 --- a/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkWindows.cs +++ b/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkWindows.cs @@ -237,10 +237,10 @@ protected override string GetShortFormPath (string path) } public override bool SetPreferredAndroidSdkPath (string path) - { - var regKey = GetMDRegistryKey (); - RegistryEx.SetValueString (RegistryEx.CurrentUser, regKey, MDREG_ANDROID_SDK, path ?? "", RegistryEx.Wow64.Key32); - return true; + { + var regKey = GetMDRegistryKey(); + RegistryEx.SetValueString(RegistryEx.CurrentUser, regKey, MDREG_ANDROID_SDK, path ?? "", RegistryEx.Wow64.Key32); + return true; } public override void SetPreferredJavaSdkPath (string path) From 1db3fa4cc7437cfb6a2714eba570223f1e341e15 Mon Sep 17 00:00:00 2001 From: Gouri Kumari Date: Fri, 7 Jun 2019 14:26:00 -0400 Subject: [PATCH 4/4] Remove redundant temp variable --- src/Xamarin.Android.Tools.AndroidSdk/AndroidSdkInfo.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Xamarin.Android.Tools.AndroidSdk/AndroidSdkInfo.cs b/src/Xamarin.Android.Tools.AndroidSdk/AndroidSdkInfo.cs index 59b21a4..5674024 100644 --- a/src/Xamarin.Android.Tools.AndroidSdk/AndroidSdkInfo.cs +++ b/src/Xamarin.Android.Tools.AndroidSdk/AndroidSdkInfo.cs @@ -160,8 +160,7 @@ public static bool SetPreferredAndroidSdkPath (string path, Action logger = null)