ProductivityTools.PSManageGitRepositories.psm1

function Push-GitRepositories([string] $Directory)
{
    $directories=Get-ChildItem $Directory | ?{ $_.PSIsContainer }
    foreach($dir in $directories)
    {
        $directoryPath=$dir.FullName
        cd $directoryPath
        if($(Test-Path ".git") -eq $true)
        {
            $status=git status -u
            if ($status -contains "nothing to commit, working tree clean")
            {
                Write-Host "Git repository $directoryPath - working tree clean" -ForegroundColor Green
            }
            else
            {
                Write-Host "Git repository $directoryPath - dirty, pushing" -ForegroundColor Red
                git checkout -b "AutoCommitBranch"
                git add .
                git commit -m "Automatic Commit"
                $remote=git remote
                git push --all $remote
            }        
        }
    }    
}

function Get-AutoCommitRepositories([string] $Directory)
{
    $directories=Get-ChildItem $Directory   | ?{ $_.PSIsContainer }
    foreach ($dir in $directories)
    {
        $directoryPath=$dir.FullName
        Write-Host "Checking repository $directoryPath"
        
        cd $directoryPath
        if($(Test-Path ".git") -eq $true)
        {
            $branches=git branch -a
            
            if ([bool]($branches -like "*AutoCommitBranch*"))
            {
                Write-Host "Git repository $directoryPath has AutoCommitBranch" -ForegroundColor Red 
            }
            else
            {
                Write-Host "Git repository $directoryPath - working tree clean" -ForegroundColor Green
            }
        }
    }    
}

function Pull-GitRepositories([string] $Directory)
{
    $directories=Get-ChildItem $Directory   | ?{ $_.PSIsContainer }
    foreach ($dir in $directories)
    {
        $directoryPath=$dir.FullName
        Write-Host "Checking repository $directoryPath"
        
        cd $directoryPath
        if($(Test-Path ".git") -eq $true)
        {
            git pull
        }
    }    
}

function Get-GitRepositoriesStatus([string] $Directory)
{
    Push-Location 
    $directories=Get-ChildItem $Directory   | ?{ $_.PSIsContainer }
    foreach($dir in $directories)
    {
        $directoryPath=$dir.FullName
        cd $directoryPath
        if($(Test-Path ".git") -eq $true)
        {
            $status=git status -u
            if ($status -contains "nothing to commit, working tree clean")
            {
                Write-Host "Git repository $directoryPath - working tree clean" -ForegroundColor Green
            }
            else
            {
                Write-Host "Git repository $directoryPath - dirty" -ForegroundColor Red
            }
        }
    }    
    Pop-Location
}

Export-ModuleMember Push-GitRepositories
Export-ModuleMember Pull-GitRepositories
Export-ModuleMember Get-GitRepositoriesStatus
Export-ModuleMember Get-AutoCommitRepositories