public async Task GitSubmodulesFromDependencies() { // Initialize remote repository using var remote = TemporaryDirectory.Create(); await ExecuteProcess("git", "init", remote.FullPath); await ExecuteProcess("git", "config user.name test", remote.FullPath); await ExecuteProcess("git", "config user.email [email protected]", remote.FullPath); File.WriteAllText(remote.GetFullPath("test.txt"), "content"); await ExecuteProcess("git", "add .", remote.FullPath); await ExecuteProcess("git", "commit -m commit-message", remote.FullPath); // Get remote head string head; using (var repository = new Repository(remote.FullPath)) { head = repository.Head.Tip.Sha; _testOutputHelper.WriteLine("Head: " + head); } // Initialize current directory await ExecuteProcess("git", "init", _directory.FullPath); await ExecuteProcess("git", "config user.name test", _directory.FullPath); await ExecuteProcess("git", "config user.email [email protected]", _directory.FullPath); File.WriteAllText(_directory.GetFullPath("test.txt"), "content"); await ExecuteProcess("git", "add .", _directory.FullPath); await ExecuteProcess("git", "commit -m commit-message", _directory.FullPath); // Add submodule await ExecuteProcess2("git", new string[] { "submodule", "add", remote.FullPath, "submodule_path" }, _directory.FullPath); // List files // TODO log file attribute var files = Directory.GetFiles(_directory.FullPath, "*", SearchOption.AllDirectories); _testOutputHelper.WriteLine("Content of " + _directory.FullPath); foreach (var file in files) { var attr = File.GetAttributes(file); _testOutputHelper.WriteLine($"{file} ({attr})"); } // Assert var result = await GetDependencies(new GitSubmoduleDependencyScanner()); AssertContainDependency(result, (DependencyType.GitSubmodule, remote.FullPath, head, 0, 0)); Assert.All(result, result => Assert.False(result.Location.IsUpdatable)); async Task ExecuteProcess(string process, string args, string workingDirectory) { _testOutputHelper.WriteLine($"Executing: '{process}' {args} ({workingDirectory})"); AssertProcessResult(await ProcessExtensions.RunAsTaskAsync(process, args, workingDirectory)); } async Task ExecuteProcess2(string process, string[] args, string workingDirectory) { _testOutputHelper.WriteLine($"Executing: '{process}' {string.Join(" ", args)} ({workingDirectory})"); AssertProcessResult(await ProcessExtensions.RunAsTaskAsync(process, args, workingDirectory)); } void AssertProcessResult(ProcessResult result) { if (result.ExitCode == 0) { _testOutputHelper.WriteLine("git command succeeds\n" + string.Join("\n", result.Output)); return; } Assert.False(true, "git command failed. Logs:\n" + string.Join("\n", result.Output)); } }