Notices: This section not yet converted to new layout. Download stats are rolling back out.

git-flow hooks

1.0.4

Package test results are passing.

This package was approved by moderator dtgm on 5/12/2016.

Some useful hooks for git-flow (AVH Edition).

You can specify /global as a parameter to install git-flow hooks globally for all repositories.
Example:

-params '"/global"'

To install git-flow hooks, run the following command from the command line or from PowerShell:

C:\> choco install git-flow-hooks

To upgrade git-flow hooks, run the following command from the command line or from PowerShell:

C:\> choco upgrade git-flow-hooks

Files

Hide
  • tools\chocolateyInstall.ps1 Show
    $toolsPath = (Split-Path -parent $MyInvocation.MyCommand.Definition)
    . "$toolsPath\extensions.ps1"
    
    $giturl = "https://github.com/jaspernbrouwer/git-flow-hooks.git"
    
    # Refresh environment from registry
    Update-SessionEnvironment
    
    $exeGit = Get-FullAppPath "Git version [0-9\.]+(-preview\d*)?" "cmd" "git.exe"
    
    $installDir = Join-Path (Split-Path -parent $toolsPath) "repository"
    
    if((Test-Path $installDir) -and (Test-Path (Join-Path $installDir ".git"))) {
        cd $installDir
        & "$exeGit" fetch --all --tags
    }
    else {
        & "$exeGit" clone --recursive "$giturl" "$installDir" 2>&1 | write-host
        cd $installDir
    }
    & "$exeGit" checkout tags/v1.0.4 2>&1 | write-host
    
    $arguments = (ParseParameters $env:chocolateyPackageParameters)
    if($arguments.ContainsKey("global")) {
        & "$exeGit" config --global --replace gitflow.path.hooks $installDir
    }
    
  • tools\chocolateyUninstall.ps1 Show
    $toolsPath = (Split-Path -parent $MyInvocation.MyCommand.Definition)
    . "$toolsPath\extensions.ps1"
    
    # Refresh environment from registry
    Update-SessionEnvironment
    
    $exeGit = Get-FullAppPath "Git version [0-9\.]+(-preview\d*)?" "cmd" "git.exe"
    
    & "$exeGit" config --global --unset gitflow.path.hooks
    
    $installDir = Join-Path (Split-Path -parent $toolsPath) "repository"
    rm $installDir
    
  • tools\extensions.ps1 Show
    function global:ParseParameters ([string]$parameters) {
        $arguments = @{};
    
        if ($parameters) {
            $match_pattern = "/(((?<name>[a-zA-Z0-9-_]+)[:=]((""(?<value>(?:[^""\\]|\\.)+)"")|(?<value>[^ ]+)))|((?<name>(?>[a-zA-Z0-9-_]+))(?!:)))"
            
            $optionName = 'name'
            $valueName = 'value'
            
            if ($parameters -match $match_pattern ){
                $results = $parameters | Select-String $match_pattern -AllMatches
                $results.matches | % {
                    $arguments.Add(
                      $_.Groups[$optionName].Value.Trim(),
                      $_.Groups[$valueName].Value.Trim())
              }
            }
            else
            {
              throw "Package Parameters were found but were invalid (REGEX Failure)"
            }
        }
        
        return $arguments;
    }
    
    #
    # Query Installed Applications information
    #
    # Returns information about one or all installed packages that match
    # naming pattern. Do it by analyzing registry, so it's not only showing
    # Windows Instaler MSI packages.
    #
    # Usage:
    #
    #   Show-AppUninstallInfo -match "micro" -first $false
    #
    # Author:
    #   Colovic Vladan, [email protected]
    #
    
    function global:Show-AppUninstallInfo {
    param(
        [string] $matchPattern = '',
        [string] $ignorePattern = '',
        [bool] $firstOnly = $false
    )
    
        Write-Debug "Querying registry keys for uninstall pattern: $matchPattern"
    
        if ($env:PROCESSOR_ARCHITEW6432 -eq "AMD64") {
    
            # In reality, it's possible, but not worth it...
            # How to query 64 bit Registry with 32 bit PowerShell...
            #
            # http://www.zerosignal.co.uk/2011/12/64-bit-registry-32-bit-powershell/
            # http://stackoverflow.com/questions/10533421/accessing-64-bit-registry-from-32-bit-application
            # http://poshcode.org/2470
            # http://stackoverflow.com/a/8588982/1579985
            #
            Write-Host ""
            Write-Host "CAUTION:" -foregroundcolor red
            Write-Host "  You are running 32-bit process on a 64-bit operating system," -foregroundcolor red
            Write-Host "  and in this environment it's not possible to reliably detect" -foregroundcolor red
            Write-Host "  all installed applications." -foregroundcolor red
            Write-Host ""
        }
    
        # Any error at this point should be terminating
        #
        $ErrorActionPreference = "Stop"
    
        # Array of hashes/ Using hash similar to an object to hold our
        # application information
        #
        $appArray = @()
    
        # This is the real magic of the script. We use Get-ChildItem to
        # get all of the sub-keys that contain application info.
        # Here, we MUST silently ignore errors
        #
        $ErrorActionPreference = "SilentlyContinue"
    
        $keys  = Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" -Recurse
        $keys += Get-ChildItem "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" -Recurse
        $keys += Get-ChildItem "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" -Recurse
        $keys += Get-ChildItem "HKCU:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" -Recurse
    
        # On 64-bit systems, we get very important extra list from the
        # Wow6432Node nodes. But now I'm skipping OS detection that we
        # used before, as it turned out that it's really not very reliable.
    
        # Build out hash for every matched application
        #
        foreach ($key in $keys)
        {
            # Adding a try-catch around the statement will hide the error and
            # prevent it being caught in the main try / catch. And we are
            # already silnetly continuing on errors
            #
            try { $pkgName = $key.GetValue("DisplayName") } catch {}
    
            # Only query data for apps with a name
            #
            if ($pkgName)
            {
                $pkgName = $pkgName.Trim()
    
                if (($pkgName.Length -eq 0) -or `
                    ($matchPattern -and ($pkgName -notmatch $matchPattern)) -or `
                    ($ignorePattern -and ($pkgName -match $ignorePattern)))
                {
                    # Move on if not match regular expression.
                    # It's case-insensitive comparison.
                    #
                    continue
                }
    
                Write-Debug "* $pkgName"
    
                # Ignore every error
                #
                try {
    
                    # Convert estimated size to megabytes
                    #
                    $tmpSize = '{0:N2}' -f ($key.GetValue("EstimatedSize") / 1MB)
    
                    # Populate our object
                    # We must initialize object here, not outside loop
                    #
                    $app = @{}
                    $app["DisplayName"]            = $pkgName                                  # Name / InnoSetup: yes, MSI: yes
                    $app["DisplayVersion"]         = $key.GetValue("DisplayVersion")
                    $app["Publisher"]              = $key.GetValue("Publisher")                # Company / InnoSetup: yes, MSI: yes
                    $app["InstallLocation"]        = $key.GetValue("InstallLocation")          # / InnoSetup: yes, MSI: sometimes empty
                    $app["InstallDate"]            = $key.GetValue("InstallDate")              # yyyymmdd / InnoSetup: yes, MSI: yes
                    $app["UninstallString"]        = $key.GetValue("UninstallString")          # / InnoSetup: yes, MSI: yes
                    $app["QuietUninstallString"]   = $key.GetValue("QuietUninstallString")     # / InnoSetup: yes, MSI: no
                    $app["EstimatedSizeMB"]        = $tmpSize                                  # / InnoSetup: yes, MSI: yes
    
                } catch {}
    
                $app["RegistryPath"]           = $key.name
                $app["RegistryKeyName"]        = $key.pschildname
    
                # If it has keys that start with `Inno Setup:`, like `Inno
                # Setup: App Path` or `Inno Setup: Selected Tasks`, then we have
                # a lot of extra information and know the installer
                #
                # Inno Setup almost always has `QuietUninstallString` set, which
                # is usually normal one appended with ` /SILENT`. And
                # you can discover silent installation arguments by analyzing
                # keys with `Tasks` and `Components`
                #
                # Uninstall Registry Key for MSI installer:
                # http://msdn.microsoft.com/en-us/library/windows/desktop/aa372105(v=vs.85).aspx
    
                $appArray += $app
    
                if ($matchPattern -and $firstOnly)
                {
                    # If pattern was defined and we want only the first
                    # result, it means we found our first app. I think we
                    # can exit now - I don't need multiple list for that.
    
                    break
                }
            }
        }
    
        # Reset error action preference
        $ErrorActionPreference = "Continue"
    
        return $appArray
    }
    
    function global:Get-AppInstallLocation() {
        param ([string]$appNameRegex)
     
        $apps = @(Show-AppUninstallInfo -match $appNameRegex)
    
        if ($apps.Length -eq 0)
        {
            throw "Could not detect a valid installation for $appNameRegex"
        }
    
        $app = $apps[0]
        $installLocation = $app["InstallLocation"]
    
        if ($installLocation -eq $null) {
            throw "Application found, but no install location has been recorded for it."
        }
        if(-not (Test-Path "$installLocation")) {
            throw "Local installation is detected at '$apps', but directories are not accessible or have been removed"
        }
    
        return $installLocation
    }
    
    function global:Get-FullAppPath ([string]$uninstallName, [string]$relativePath, [string]$executable, [string]$installFolderName) {
    
        function GetInstalledApp ([string]$uninstallName, [string]$relativePath, [string]$executable) {
            $apps = @(Show-AppUninstallInfo -match $uninstallName)
    
            $exe = $null
    
            if ($apps.Length -ne 0)
            {
                $app = $apps[0]
                $dir = $app["InstallLocation"]
                if ((![string]::IsNullOrEmpty($dir)) -and (Test-Path "$dir")) {
                    $exe = (Join-Path "$dir" (Join-Path $relativePath $executable))
                }
            }
    
            return $exe;
        }
    
        function FindInAppPaths([string]$executable) {
            $path = Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths" | Where-Object PSChildName -eq $executable | Select-Object -First 1
            if($path -ne $null) {
                $fullPath = $path.GetValue("")
                if($fullPath -ne $null) {
                    return (Get-Item ([System.Environment]::ExpandEnvironmentVariables($fullPath))).FullName
                }
                $directory = $path.GetValue("Path")
                if($directory -ne $null) {
                    return (Join-Path ([System.Environment]::ExpandEnvironmentVariables($directory)) $executable)
                }
            }
        }
    
        function FindInProgramsFolder([string]$programsFolder, [string]$installFolderName, [string]$relativePath, [string]$executable) {
            $installDir = Join-Path $programsFolder $installFolderName
            if(Test-Path $installDir) {
                $fullPath = Join-Path $installDir (Join-Path $relativePath $executable)
                if(Test-Path $fullPath) {
                    return $fullPath
                }
            }
        }
    
        function FindInProgramFiles([string]$installFolderName, [string]$relativePath, [string]$executable) {
            $fullPath = FindInProgramsFolder $env:ProgramFiles $installFolderName $relativePath $executable
            if(($fullPath -ne $null) -and (Test-Path $fullPath)) {
                return $fullPath
            }
            $fullPath = FindInProgramsFolder ${env:ProgramFiles(x86)} $installFolderName $relativePath $executable
            if(($fullPath -ne $null) -and (Test-Path $fullPath)) {
                return $fullPath
            }
        }
    
        $exe = $null
    
        if($exe -eq $null) {
            if($PSBoundParameters.ContainsKey('uninstallName') -and $PSBoundParameters.ContainsKey('relativePath') -and $PSBoundParameters.ContainsKey('executable')) {
                $exe = GetInstalledApp $uninstallName $relativePath $executable
            }
        }
    
        if($exe -eq $null) {
            if($PSBoundParameters.ContainsKey('installFolderName') -and $PSBoundParameters.ContainsKey('relativePath') -and $PSBoundParameters.ContainsKey('executable')) {
                $exe = FindInProgramFiles $installFolderName $relativePath $executable
            }
        }
        
        if($exe -eq $null) {
            try {
                $exe = (Get-Command $executable -ErrorAction SilentlyContinue).Definition;
            }
            catch {
            }
        }
    
        if($exe -eq $null) {
            $exe = FindInAppPaths $executable
        }
    
    
        if($exe -eq $null) {
            throw "Unable to find $executable"
        }
        
        return $exe
    }

Virus Scan Results

In cases where actual malware is found, the packages are subject to removal. Software sometimes has false positives. Moderators do not necessarily validate the safety of the underlying software, only that a package retrieves software from the official distribution point and/or validate embedded software against official distribution point (where distribution rights allow redistribution).

Chocolatey Pro provides runtime protection from possible malware.

Dependencies

Package Maintainer(s)

Software Author(s)

  • Jasper N. Brouwer

Copyright

Copyright: Jasper N. Brouwer

Tags

Version History

Version Downloads Last updated Status
git-flow hooks 1.0.3 271 Monday, October 5, 2015 approved
git-flow hooks 1.0.2 193 Wednesday, September 23, 2015 approved
git-flow hooks 1.0.1 209 Monday, September 21, 2015 approved

Discussion for the git-flow hooks Package

Ground rules:

  • This discussion is only about git-flow hooks and the git-flow hooks package. If you have feedback for Chocolatey, please contact the google group.
  • This discussion will carry over multiple versions. If you have a comment about a particular version, please note that in your comments.
  • The maintainers of this Chocolatey Package will be notified about new comments that are posted to this Disqus thread, however, it is NOT a guarantee that you will get a response. If you do not hear back from the maintainers after posting a message below, please follow up by using the link on the left side of this page or follow this link to contact maintainers. If you still hear nothing back, please follow the package triage process.
  • Tell us what you love about the package or git-flow hooks, or tell us what needs improvement.
  • Share your experiences with the package, or extra configuration or gotchas that you've found.
  • If you use a url, the comment will be flagged for moderation until you've been whitelisted. Disqus moderated comments are approved on a weekly schedule if not sooner. It could take between 1-5 days for your comment to show up.

comments powered by Disqus
Chocolatey.org uses cookies to enhance the user experience of the site.
Ok