From 6caa7833cb18840fcbf8c2fcffcd8a7acf38fab8 Mon Sep 17 00:00:00 2001
From: David McKay <david@rawkode.com>
Date: Tue, 14 Jun 2016 09:41:55 +0100
Subject: [PATCH] Allowing a version/branch string to be parsed in download url
 (#18)

Allows a version/branch string to be parsed in download url
---
 pkg/host/github.go | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/pkg/host/github.go b/pkg/host/github.go
index e6dd9d3..29a7a85 100644
--- a/pkg/host/github.go
+++ b/pkg/host/github.go
@@ -2,16 +2,32 @@ package host
 
 import (
 	"path/filepath"
+	"regexp"
 	"strings"
 )
 
 // ZipURL returns the URL of the zip archive given a github repository URL.
 func ZipURL(url string) string {
+	var version = "master"
+
 	url = strings.TrimSuffix(strings.TrimPrefix(url, "/"), "/")
 
-	if strings.HasSuffix(url, "zip/master") {
+	zipRegex, _ := regexp.Compile(`zip/(\S+)$`)
+	if zipRegex.MatchString(url) {
 		return url
 	}
 
-	return "https://codeload.github.com/" + filepath.Join(url, "/zip/master")
+	// So this could identify a port number, but since we only support github
+	// I don't believe using it as a version modifier is a problem. Though
+	// perhaps we should use something else instead?
+	if strings.Contains(url, ":") {
+		parts := strings.SplitAfter(url, ":")
+
+		url = parts[0]
+		version = parts[1]
+
+		url = strings.TrimSuffix(url, ":")
+	}
+
+	return "https://codeload.github.com/" + filepath.Join(url, "/zip/"+version)
 }
-- 
GitLab