public static bool TryReadString(Program program, OperationArguments operationArguments, KeyType key, out string value) { if (operationArguments is null) { throw new ArgumentNullException(nameof(operationArguments)); } if (program.ConfigurationKeys.TryGetValue(key, out string configKey) | program.EnvironmentKeys.TryGetValue(key, out string environKey)) { var envars = operationArguments.EnvironmentVariables; // Look for an entry in the environment variables. string localVal; if (!string.IsNullOrWhiteSpace(environKey) && envars.TryGetValue(environKey, out localVal) && !string.IsNullOrWhiteSpace(localVal)) { value = localVal; return(true); } Git.Configuration config = operationArguments.GitConfiguration; // Look for an entry in the git config. Git.Configuration.Entry entry; if (!string.IsNullOrWhiteSpace(configKey) && config.TryGetEntry(Program.ConfigPrefix, operationArguments.QueryUri, configKey, out entry) && !string.IsNullOrWhiteSpace(entry.Value)) { value = entry.Value; return(true); } } value = null; return(false); }
/// <summary> /// Loads the Git configuration based on `<seealso cref="Environment.CurrentDirectory"/>`. /// </summary> public virtual async Task LoadConfiguration() { _configuration = await Git.Configuration.ReadConfiuration(Context, Settings.CurrentDirectory, UseConfigLocal, UseConfigSystem); }
public void TryReadStringTest(int keyValue, string configValue, string environValue, string expectedValue) { KeyType key = (KeyType)keyValue; var program = new Program(RuntimeContext.Default) { _dieException = (Program caller, Exception e, string path, int line, string name) => Assert.False(true, $"Error: {e.ToString()}"), _dieMessage = (Program caller, string m, string path, int line, string name) => Assert.False(true, $"Error: {m}"), _exit = (Program caller, int e, string m, string path, int line, string name) => Assert.False(true, $"Error: {e} {m}") }; Assert.NotEqual("UNKNOWN", program.KeyTypeName(key), StringComparer.Ordinal); var configs = new Dictionary <Git.ConfigurationLevel, Dictionary <string, string> > { { Git.ConfigurationLevel.Local, new Dictionary <string, string>(Program.ConfigKeyComparer) }, { Git.ConfigurationLevel.Global, new Dictionary <string, string>(Program.ConfigKeyComparer) }, { Git.ConfigurationLevel.Xdg, new Dictionary <string, string>(Program.ConfigKeyComparer) }, { Git.ConfigurationLevel.System, new Dictionary <string, string>(Program.ConfigKeyComparer) }, { Git.ConfigurationLevel.Portable, new Dictionary <string, string>(Program.ConfigKeyComparer) }, }; var envvars = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase) { { "HOME", Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) }, }; bool setupComplete = false; if (!string.IsNullOrEmpty(configValue) && program.ConfigurationKeys.TryGetValue(key, out string configKey)) { configs[Git.ConfigurationLevel.Local].Add($"credential.{configKey}", configValue); setupComplete = true; } if (!string.IsNullOrEmpty(environValue) && program.EnvironmentKeys.TryGetValue(key, out string environKey)) { envvars.Add(environKey, environValue); setupComplete = true; } if (!setupComplete) { return; } var gitconfig = new Git.Configuration(RuntimeContext.Default, configs); var targetUri = new Authentication.TargetUri("https://example.visualstudio.com/"); var opargsMock = new Mock <OperationArguments>(); opargsMock.Setup(v => v.EnvironmentVariables) .Returns(envvars); opargsMock.Setup(v => v.GitConfiguration) .Returns(gitconfig); opargsMock.Setup(v => v.TargetUri) .Returns(targetUri); opargsMock.Setup(v => v.QueryUri) .Returns(targetUri); if (expectedValue != null) { Assert.True(CommonFunctions.TryReadString(program, opargsMock.Object, key, out string actualValue)); Assert.Equal(expectedValue, actualValue); } else { Assert.False(CommonFunctions.TryReadString(program, opargsMock.Object, key, out string actualValue)); Assert.Null(actualValue); } }
public async Task LoadOperationArgumentsTest() { var program = new Program(RuntimeContext.Default) { _dieException = (Program caller, Exception e, string path, int line, string name) => Assert.False(true, $"Error: {e.ToString()}"), _dieMessage = (Program caller, string m, string path, int line, string name) => Assert.False(true, $"Error: {m}"), _exit = (Program caller, int e, string m, string path, int line, string name) => Assert.False(true, $"Error: {e} {m}") }; var configs = new Dictionary <Git.ConfigurationLevel, Dictionary <string, string> > { { Git.ConfigurationLevel.Local, new Dictionary <string, string>(Program.ConfigKeyComparer) { { "credential.validate", "true" }, { "credential.useHttpPath", "true" }, { "credential.not-match.com.useHttpPath", "false" }, } }, { Git.ConfigurationLevel.Global, new Dictionary <string, string>(Program.ConfigKeyComparer) { { "credential.validate", "false" }, { "credential.vstsScope", "vso.build,vso.code_write" }, } }, { Git.ConfigurationLevel.Xdg, new Dictionary <string, string>(Program.ConfigKeyComparer) { } }, { Git.ConfigurationLevel.System, new Dictionary <string, string>(Program.ConfigKeyComparer) { } }, { Git.ConfigurationLevel.Portable, new Dictionary <string, string>(Program.ConfigKeyComparer) { } }, }; var envvars = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase) { { "HOME", Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) }, }; var gitconfig = new Git.Configuration(RuntimeContext.Default, configs); var targetUri = new TargetUri("https://example.visualstudio.com/"); var opargsMock = new Mock <OperationArguments>(); opargsMock.Setup(o => o.EnvironmentVariables) .Returns(envvars); opargsMock.Setup(o => o.GitConfiguration) .Returns(gitconfig); opargsMock.Setup(o => o.TargetUri) .Returns(targetUri); opargsMock.Setup(o => o.QueryUri) .Returns(targetUri); opargsMock.SetupProperty(o => o.UseHttpPath); opargsMock.SetupProperty(o => o.ValidateCredentials); opargsMock.SetupProperty(o => o.DevOpsTokenScope); var opargs = opargsMock.Object; await program.LoadOperationArguments(opargs); Assert.NotNull(opargs); Assert.True(opargs.ValidateCredentials, "credential.validate"); Assert.True(opargs.UseHttpPath, "credential.useHttpPath"); Assert.NotNull(opargs.DevOpsTokenScope); var expectedScope = AzureDev.TokenScope.BuildAccess | AzureDev.TokenScope.CodeWrite; Assert.Equal(expectedScope, opargs.DevOpsTokenScope); }
public virtual void LoadConfiguration() { _configuration = Git.Configuration.ReadConfiuration(Environment.CurrentDirectory, UseConfigLocal, UseConfigSystem); }