11package commands
22
33import (
4- . "os"
54 "fmt"
65 "errors"
7- "path/filepath"
8- "strings"
96 "github.com/xcomponent/xc-cli/services"
107 "io"
11- "archive/zip"
128 "github.com/xcomponent/xc-cli/util"
139)
1410
@@ -33,23 +29,24 @@ func (initCommand *InitCommand) Init(
3329 return err
3430 }
3531
36- fileName , err := initCommand .downloadTemplate (projectFolder , githubOrg , templateName )
37- defer initCommand .clean (fileName )
38-
39- if err != nil {
40- return err
41- }
42-
43- err = initCommand .unzip (fileName , projectFolder )
32+ err = util .NewGitHubUtils (initCommand .os , initCommand .http , initCommand .io , initCommand .zip ).DownloadTemplate (
33+ projectFolder , githubOrg , templateName , projectName )
4434 if err != nil {
4535 return err
4636 }
4737
4838 if projectName != "" {
49- return util .NewFileUtils (initCommand .os , initCommand .io ).RenameAndReplaceFiles (
39+ err = util .NewFileUtils (initCommand .os , initCommand .io ).RenameAndReplaceFiles (
5040 projectFolder , "NewProject" , projectName )
41+ if err != nil {
42+ return err
43+ }
44+ }else {
45+ projectName = "NewProject"
5146 }
5247
48+ fmt .Printf ("Successfully initialized project %s in %s.\n " , projectName ,projectFolder )
49+
5350 return nil
5451}
5552
@@ -90,92 +87,3 @@ func (initCommand *InitCommand) isEmpty(name string) (bool, error) {
9087 }
9188 return false , err // Either not empty or error, suits both cases
9289}
93-
94- func (initCommand * InitCommand ) downloadTemplate (projectFolder string , githubOrg string , templateName string ) (string , error ) {
95- fmt .Println ("Downloading template" )
96-
97- fileName := fmt .Sprintf ("%s/%s.zip" , projectFolder , templateName )
98-
99- out , err := initCommand .os .Create (fileName )
100- defer out .Close ()
101- if err != nil {
102- return fileName , err
103- }
104-
105- resp , err := initCommand .http .Get (fmt .Sprintf ("https://github.com/%s/%s/archive/master.zip" , githubOrg , templateName ))
106- if resp != nil {
107- defer resp .Body .Close ()
108- }
109- if err != nil {
110- return fileName , err
111- }
112-
113- if resp .StatusCode == 404 {
114- return fileName , errors .New (fmt .Sprintf ("Project template %s/%s could not be found" , githubOrg , templateName ))
115- }
116-
117- _ , err = initCommand .io .Copy (out , resp .Body )
118- if err != nil {
119- return fileName , err
120- }
121-
122- return fileName , nil
123- }
124-
125- func (initCommand * InitCommand ) unzip (archive string , target string ) error {
126- fmt .Println (fmt .Sprintf ("Extracting template from %s" , archive ))
127-
128- reader , err := initCommand .zip .OpenReader (archive )
129- if err != nil {
130- return err
131- }
132-
133- if err := initCommand .os .MkdirAll (target , 0755 ); err != nil {
134- return err
135- }
136-
137- for _ , file := range reader .File {
138- err = initCommand .unzipFile (file , target )
139- if err != nil {
140- return err
141- }
142- }
143-
144- return nil
145- }
146-
147- func (initCommand * InitCommand ) unzipFile (file * zip.File , target string ) error {
148- fileName := file .Name [strings .Index (file .Name , "/" )+ 1 :len (file .Name )]
149-
150- path := filepath .Join (target , fileName )
151- if file .FileInfo ().IsDir () {
152- initCommand .os .MkdirAll (path , file .Mode ())
153- return nil
154- }
155-
156- fileReader , err := file .Open ()
157- if err != nil {
158- return err
159- }
160- defer fileReader .Close ()
161-
162- targetFile , err := initCommand .os .OpenFile (path , O_WRONLY | O_CREATE | O_TRUNC , file .Mode ())
163- if targetFile != nil {
164- defer targetFile .Close ()
165- }
166- if err != nil {
167- return err
168- }
169-
170- if _ , err := initCommand .io .Copy (targetFile , fileReader ); err != nil {
171- return err
172- }
173-
174- return nil
175- }
176-
177- func (initCommand * InitCommand ) clean (fileName string ) error {
178- fmt .Println (fmt .Sprintf ("Cleaning %s" , fileName ))
179-
180- return initCommand .os .Remove (fileName )
181- }
0 commit comments