LibGit2Sharp.Repository.Discover C# (CSharp) Метод

Discover() публичный статический Метод

Probe for a git repository.

The lookup start from startingPath and walk upward parent directories if nothing has been found.

public static Discover ( string startingPath ) : string
startingPath string The base path where the lookup starts.
Результат string
        public static string Discover(string startingPath)
        {
            var buffer = new byte[4096];

            int result = NativeMethods.git_repository_discover(buffer, buffer.Length, PosixPathHelper.ToPosix(startingPath), false, null);

            if ((GitErrorCode)result == GitErrorCode.GIT_ENOTAREPO)
            {
                return null;
            }

            Ensure.Success(result);

            int nullTerminator;
            for (nullTerminator = 0; nullTerminator < buffer.Length; nullTerminator++)
            {
                if (buffer[nullTerminator] == 0)
                {
                    break;
                }
            }

            if (nullTerminator == 0)
            {
                return null;
            }

            return PosixPathHelper.ToNative(Encoding.UTF8.GetString(buffer, 0, nullTerminator));
        }

Usage Example

Пример #1
0
        private static async Task Clone(
            IEnumerable <Organization> organizations,
            string clonePath,
            string userName,
            string pat)
        {
            var credentials  = new NetworkCredential(userName, pat);
            var cloneOptions = new CloneOptions
            {
                Checkout            = true,
                CredentialsProvider = (url, user, cred) => new SecureUsernamePasswordCredentials
                {
                    Username = credentials.UserName,
                    Password = credentials.SecurePassword
                }
            };

            foreach (var organization in organizations)
            {
                foreach (var project in organization.Projects)
                {
                    foreach (var repository in project.Repositories)
                    {
                        var path     = Path.Combine(clonePath, repository.Name);
                        var repoRoot = Repository.Discover(path);

                        // don't crash when there is no repo to this path, return empty changes
                        if (repoRoot != null)
                        {
                            Console.WriteLine($"Repo {repository.Name} already exists! Continue with other.");
                            continue;
                        }

                        Console.WriteLine($"Cloning {repository.Name} repository!");
                        Directory.CreateDirectory(path);
                        await Task.Run(() => Repository.Clone(
                                           $"https://{Uri.EscapeUriString(organization.Name)}@dev.azure.com/{Uri.EscapeUriString(organization.Name)}/" +
                                           $"{Uri.EscapeUriString(project.Name)}/_git/{Uri.EscapeUriString(repository.Name)}",
                                           path,
                                           cloneOptions));
                    }
                }
            }
        }