From 37360710817b5c191ba2ddd510fd865fe81a804f Mon Sep 17 00:00:00 2001
From: Tamer Tas <contact@tmrts.com>
Date: Mon, 27 Feb 2017 12:34:59 +0300
Subject: [PATCH] pkg/cmd/download: use `git clone` instead of manual zip
 downloads

Enables
- Private repositories
- Repositories using different version control systems
---
 pkg/cmd/download.go | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/pkg/cmd/download.go b/pkg/cmd/download.go
index 220d7f1..5650aeb 100644
--- a/pkg/cmd/download.go
+++ b/pkg/cmd/download.go
@@ -16,6 +16,7 @@ import (
 	"github.com/tmrts/boilr/pkg/cmd/util"
 	"github.com/tmrts/boilr/pkg/host"
 	"github.com/tmrts/boilr/pkg/util/exit"
+	"github.com/tmrts/boilr/pkg/util/git"
 	"github.com/tmrts/boilr/pkg/util/osutil"
 	"github.com/tmrts/boilr/pkg/util/tlog"
 	"github.com/tmrts/boilr/pkg/util/validate"
@@ -122,21 +123,21 @@ var Download = &cli.Command{
 			if shouldOverwrite := GetBoolFlag(c, "force"); !shouldOverwrite {
 				exit.OK("Template %v already exists use -f to overwrite the template", templateName)
 			}
-		case !exists:
-			if err := os.MkdirAll(targetDir, 0755); err != nil {
+
+			// TODO(tmrts): extract `template delete` helper and use that one
+			if err := os.RemoveAll(targetDir); err != nil {
 				exit.Error(fmt.Errorf("download: %s", err))
 			}
 		}
 
-		zipURL := host.ZipURL(templateURL)
-
-		if err := downloadZip(zipURL, targetDir); err != nil {
-			// Delete if download transaction fails
-			defer os.RemoveAll(targetDir)
-
+		// TODO(tmrts): allow fetching other branches than 'master'
+		if err := git.Clone(targetDir, git.CloneOptions{
+			URL: host.URL(templateURL),
+		}); err != nil {
 			exit.Error(fmt.Errorf("download: %s", err))
 		}
 
+		// TODO(tmrts): use git-notes as metadata storage or boltdb
 		if err := serializeMetadata(templateName, templateURL, targetDir); err != nil {
 			exit.Error(fmt.Errorf("download: %s", err))
 		}
-- 
GitLab