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

git-flow AVH Edition

0.0.0

Package test results are passing.

This package was approved by moderator ferventcoder on 12/28/2015.

Git-Flow is a collection of Git extensions to provide high-level repository operations for Vincent Driessen's branching model.
The AVH Edition adds more functionality to the existing git-flow and several of the internal commands have been rewritten to speed up the software.

This package always installs the latest version available online. Therefore, package version number is marked as 0.0.0
NOTE: Automatic uninstall procedure is included in this package, so you don't need to manually reverse whatever actions installer did.
NOTE: This package is based on Devbox-gitflow.

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

C:\> choco install gitflow-avh

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

C:\> choco upgrade gitflow-avh

Files

Hide
  • 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
    }
  • 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"
    
    if ($exeGit -ne $null)
    {
        $gitDir = (Get-Item $exeGit).Directory.Parent.FullName
    
        Write-Host "`nUninstalling Git-Flow from detected Git location: $gitDir`n" -foregroundcolor yellow
    
        # By analyzing msysgit-install.cmd from Git-Flow, I found out exactly
        # what is new in Git folder:
        #   Git\bin: git-flow, git-flow*, gitflow-*, gitflow-shFlags
        #   Git\gitflow: the whole directory from GitHub
        #
        # They are deleting it with removing recursively
        # Git\git-flow* and Git\gitflow-*, so I will do the same.
        #
        Start-ChocolateyProcessAsAdmin "Get-ChildItem -path '$gitDir' -include 'git-flow*','gitflow-*','gitflow*' -recurse -force | Remove-Item -recurse -force" -minimized
    }
    
  • tools\chocolateyInstall.ps1 Show
    $toolsPath = (Split-Path -parent $MyInvocation.MyCommand.Definition)
    . "$toolsPath\extensions.ps1"
    
    $giturl = "https://github.com/petervanderdoes/gitflow.git"
    
    # Refresh environment from registry
    Update-SessionEnvironment
    
    $exeGit = Get-FullAppPath "Git version [0-9\.]+(-preview\d*)?" "cmd" "git.exe"
    
    # Now clone the repository. Git executable could not be in PATH
    # so we are using absolute filenames. Everything must be executed
    # with elevated privileges
    #
    $gitDir = (Get-Item $exeGit).Directory.Parent.FullName
    $gitflowDir = Join-Path "$gitDir" "gitflow"
    $exeInstallGitFlow = Join-Path "$gitflowDir" "contrib\msysgit-install.cmd"
    $gitBin = Join-Path "$gitDir" "usr"
    $gitBin64 = Join-Path "$gitDir" "mingw64"
    
    if (-not (Test-Path $gitBin))
    {
        $gitBin = Join-Path "$gitDir" "mingw"
    }
    
    Write-Host "`nRemoving existing Git-Flow, if any...`n"  -foregroundcolor yellow
    Get-ChildItem -path $gitDir -include 'git-flow*','gitflow-*','gitflow*' -recurse -force | Remove-Item -recurse -force
    
    Write-Host "`nGit-Flow: Cloning repository from GitHub and installing Git-Flow ...`n"  -foregroundcolor yellow
    
    Start-ChocolateyProcessAsAdmin "/c `"`"$exeGit`" clone --recursive `"$giturl`" `"$gitflowDir`"`"" -exe "$env:comspec"
    & "$exeInstallGitFlow" "$gitBin"
    if (Test-Path $gitBin64)
    {
        & "$exeInstallGitFlow" "$gitBin64"
    }
    
    Write-Host "`nGit-Flow: Setting up bash completion...`n"  -foregroundcolor yellow
    Invoke-WebRequest https://raw.githubusercontent.com/petervanderdoes/git-flow-completion/develop/git-flow-completion.bash -OutFile (Join-Path "$gitDir" "etc\profile.d\git-flow-completion.sh")

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)

  • Vincent Driessen
  • Peter van der Does

Copyright

Copyright: Copyright 2012 - 2015 Peter van der Does. Copyright 2010 Vincent Driessen. All rights reserved.

Tags

Version History

Version Downloads Last updated Status

Discussion for the git-flow AVH Edition Package

Ground rules:

  • This discussion is only about git-flow AVH Edition and the git-flow AVH Edition 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 AVH Edition, 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