private static string?ResolveUrl(Uri uri, GitEnvironment environment, string?remoteName, int recursionDepth, Action <string, object?[]>?logWarning) { if (!uri.IsFile) { return(uri.AbsoluteUri); } var repositoryPath = uri.LocalPath; if (!GitRepository.TryGetRepositoryLocation(repositoryPath, out var remoteRepositoryLocation)) { logWarning?.Invoke(Resources.RepositoryHasNoRemote, new[] { repositoryPath }); return(uri.AbsoluteUri); } if (recursionDepth > RemoteRepositoryRecursionLimit) { logWarning?.Invoke(Resources.RepositoryUrlEvaluationExceededMaximumAllowedDepth, new[] { RemoteRepositoryRecursionLimit.ToString() }); return(null); } var remoteRepository = GitRepository.OpenRepository(remoteRepositoryLocation, environment); if (remoteRepository.WorkingDirectory == null) { logWarning?.Invoke(Resources.UnableToLocateRepository, new[] { repositoryPath }); return(null); } return(GetRepositoryUrl(remoteRepository, remoteName, recursionDepth + 1, logWarning) ?? uri.AbsoluteUri); }
public Reader(string gitDirectory, string commonDirectory, GitEnvironment environment, Func <string, TextReader>?fileOpener = null) { NullableDebug.Assert(environment != null); _environment = environment; _gitDirectoryPosix = PathUtils.ToPosixDirectoryPath(gitDirectory); _commonDirectory = commonDirectory; _fileOpener = fileOpener ?? File.OpenText; }
private static GitRepository?CreateSubmoduleRepository(GitEnvironment environment, string directoryFullPath) => GitRepository.TryGetRepositoryLocation(directoryFullPath, out var location) ? GitRepository.OpenRepository(location, environment) : null;