in commands/util.go [738:811]
func unpackZip(inpath string) error {
exists, err := FileExists(inpath)
if err != nil {
return err
}
if !exists {
errMsg := wski18n.T("File '{{.name}}' is not a valid file or it does not exist",
map[string]interface{}{
"name": inpath,
})
whiskErr := whisk.MakeWskErrorFromWskError(errors.New(errMsg), err, whisk.EXIT_CODE_ERR_USAGE,
whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE)
return whiskErr
}
zipFileReader, err := zip.OpenReader(inpath)
if err != nil {
whisk.Debug(whisk.DbgError, "zip.OpenReader(%s) failed: %s\n", inpath, err)
errStr := wski18n.T("Unable to opens '{{.name}}' for unzipping: {{.err}}",
map[string]interface{}{"name": inpath, "err": err})
werr := whisk.MakeWskError(errors.New(errStr), whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
return werr
}
defer zipFileReader.Close()
// Loop through the files in the zipfile
for _, item := range zipFileReader.File {
itemName := item.Name
itemType := item.Mode()
whisk.Debug(whisk.DbgInfo, "file item - %#v\n", item)
if itemType.IsDir() {
if err := os.MkdirAll(item.Name, item.Mode()); err != nil {
whisk.Debug(whisk.DbgError, "os.MkdirAll(%s, %d) failed: %s\n", item.Name, item.Mode(), err)
errStr := wski18n.T("Unable to create directory '{{.dir}}' while unzipping '{{.name}}': {{.err}}",
map[string]interface{}{"dir": item.Name, "name": inpath, "err": err})
werr := whisk.MakeWskError(errors.New(errStr), whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
return werr
}
}
if itemType.IsRegular() {
unzipFile, err := item.Open()
defer unzipFile.Close()
if err != nil {
whisk.Debug(whisk.DbgError, "'%s' Open() failed: %s\n", item.Name, err)
errStr := wski18n.T("Unable to open zipped file '{{.file}}' while unzipping '{{.name}}': {{.err}}",
map[string]interface{}{"file": item.Name, "name": inpath, "err": err})
werr := whisk.MakeWskError(errors.New(errStr), whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
return werr
}
targetFile, err := os.Create(itemName)
if err != nil {
whisk.Debug(whisk.DbgError, "os.Create(%s) failed: %s\n", itemName, err)
errStr := wski18n.T("Unable to create file '{{.file}}' while unzipping '{{.name}}': {{.err}}",
map[string]interface{}{"file": item.Name, "name": inpath, "err": err})
werr := whisk.MakeWskError(errors.New(errStr), whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
return werr
}
if _, err := io.Copy(targetFile, unzipFile); err != nil {
whisk.Debug(whisk.DbgError, "io.Copy() of '%s' failed: %s\n", itemName, err)
errStr := wski18n.T("Unable to unzip file '{{.name}}': {{.err}}",
map[string]interface{}{"name": itemName, "err": err})
werr := whisk.MakeWskError(errors.New(errStr), whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
return werr
}
}
}
return nil
}