GitSharp.AbstractCommand.FindGitDirectory C# (CSharp) Method

FindGitDirectory() public static method

Performs upward recursive lookup to return git directory. Honors the environment variable GIT_DIR.
public static FindGitDirectory ( string rootDirectory, bool recursive, bool isBare ) : string
rootDirectory string
recursive bool
isBare bool
return string
        public static string FindGitDirectory(string rootDirectory, bool recursive, bool isBare)
        {
            string directory = null;
            string gitDir = null;
            string envGitDir = System.Environment.GetEnvironmentVariable("GIT_DIR");

            //Determine which git directory to use
            if (rootDirectory != null)         	//Directory specified by --git-dir
                directory = rootDirectory;
            else if (envGitDir != null) 		//Directory specified by $GIT_DIR
                directory = envGitDir;
            else                        		//Current Directory
            {
                directory = Directory.GetCurrentDirectory();
                if (recursive)
                {
                    //Check for non-bare repositories
                    if (!isBare)
                    {
                        while (directory != null)
                        {
                            gitDir = Path.Combine(directory, ".git");
                            if (Directory.Exists(gitDir))
                                return directory;

                            //Get parent directory
                            directory = Path.Combine(directory, "..");
                            directory = Path.GetFullPath(directory);
                        }
                    }
                    else
                    {
                        //Check for bare repositories
                        while (directory != null)
                        {
                            if (directory.EndsWith(".git") && Directory.Exists(directory))
                                return directory;

                            //Get parent directory
                            directory = Path.Combine(directory, "..");
                            directory = Path.GetFullPath(directory);
                        }
                    }
                }
            }
            if (!directory.EndsWith(".git"))
            {
                if (!isBare)
                    directory = Path.Combine(directory, ".git");
                else
                    directory += ".git";
            }
            return directory;
        }