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);
        }
示例#2
0
 /// <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);
 }
示例#3
0
        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);
            }
        }
示例#4
0
        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);
        }
示例#5
0
 public virtual void LoadConfiguration()
 {
     _configuration = Git.Configuration.ReadConfiuration(Environment.CurrentDirectory, UseConfigLocal, UseConfigSystem);
 }