Unarchive zip file after fetcher downloads the package (#301)
Fetcher now uncompresses archive files. This is triggered by automatically detecting the file format, although maybe we should make that explicit or at least move the detection into the client.
This commit is contained in:
committed by
Soam Vasani
parent
8d103fa35b
commit
1b9fa5bc30
@@ -4,6 +4,7 @@ import (
|
|||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
@@ -13,6 +14,8 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/mholt/archiver"
|
||||||
|
"github.com/satori/go.uuid"
|
||||||
"k8s.io/client-go/1.5/kubernetes"
|
"k8s.io/client-go/1.5/kubernetes"
|
||||||
"k8s.io/client-go/1.5/pkg/api"
|
"k8s.io/client-go/1.5/pkg/api"
|
||||||
|
|
||||||
@@ -196,12 +199,24 @@ func (fetcher *Fetcher) Handler(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check file type here, if the file is a zip file unarchive it.
|
||||||
|
if archiver.Zip.Match(tmpPath) {
|
||||||
|
// unarchive tmp file to a tmp unarchive path
|
||||||
|
tmpUnarchivePath := filepath.Join(fetcher.sharedVolumePath, uuid.NewV4().String())
|
||||||
|
err = fetcher.unarchive(tmpPath, tmpUnarchivePath)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err.Error())
|
||||||
|
http.Error(w, err.Error(), 500)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
tmpPath = tmpUnarchivePath
|
||||||
|
}
|
||||||
|
|
||||||
// move tmp file to requested filename
|
// move tmp file to requested filename
|
||||||
err = os.Rename(tmpPath, filepath.Join(fetcher.sharedVolumePath, req.Filename))
|
err = fetcher.rename(tmpPath, filepath.Join(fetcher.sharedVolumePath, req.Filename))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e := fmt.Sprintf("Failed to move file: %v", err)
|
log.Println(err.Error())
|
||||||
log.Printf(e)
|
http.Error(w, err.Error(), 500)
|
||||||
http.Error(w, e, 500)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -209,3 +224,25 @@ func (fetcher *Fetcher) Handler(w http.ResponseWriter, r *http.Request) {
|
|||||||
// all done
|
// all done
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (fetcher *Fetcher) rename(src string, dst string) error {
|
||||||
|
err := os.Rename(src, dst)
|
||||||
|
if err != nil {
|
||||||
|
return errors.New(fmt.Sprintf("Failed to move file: %v", err))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// archive is a function that zips directory into a zip file
|
||||||
|
func (fetcher *Fetcher) archive(src string, dst string) error {
|
||||||
|
return archiver.Zip.Make(dst, []string{src})
|
||||||
|
}
|
||||||
|
|
||||||
|
// unarchive is a function that unzips a zip file to destination
|
||||||
|
func (fetcher *Fetcher) unarchive(src string, dst string) error {
|
||||||
|
err := archiver.Zip.Open(src, dst)
|
||||||
|
if err != nil {
|
||||||
|
return errors.New(fmt.Sprintf("Failed to unzip file: %v", err))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
Generated
+36
-2
@@ -1,5 +1,5 @@
|
|||||||
hash: 51b5eda27974aac228f42002cb0a9f89bf2f79d36a574a3694c142c2f83e4042
|
hash: 2703407b4ae6e28cd146b14ff6b77175a17f0f944f7d75131ac0fa0406793d5b
|
||||||
updated: 2017-03-24T11:01:00.667996869+08:00
|
updated: 2017-08-27T22:38:51.57334855+08:00
|
||||||
imports:
|
imports:
|
||||||
- name: github.com/blang/semver
|
- name: github.com/blang/semver
|
||||||
version: 60ec3488bfea7cca02b021d106d9911120d25fe9
|
version: 60ec3488bfea7cca02b021d106d9911120d25fe9
|
||||||
@@ -37,6 +37,14 @@ imports:
|
|||||||
- reference
|
- reference
|
||||||
- name: github.com/docopt/docopt-go
|
- name: github.com/docopt/docopt-go
|
||||||
version: 784ddc588536785e7299f7272f39101f7faccc3f
|
version: 784ddc588536785e7299f7272f39101f7faccc3f
|
||||||
|
- name: github.com/dsnet/compress
|
||||||
|
version: 0ae8e136a5df9e3caf6c0f69983608b07438411b
|
||||||
|
subpackages:
|
||||||
|
- bzip2
|
||||||
|
- bzip2/internal/sais
|
||||||
|
- internal
|
||||||
|
- internal/errors
|
||||||
|
- internal/prefix
|
||||||
- name: github.com/emicklei/go-restful
|
- name: github.com/emicklei/go-restful
|
||||||
version: 3d66f886316ac990eb502aaa89ea38546420b8b7
|
version: 3d66f886316ac990eb502aaa89ea38546420b8b7
|
||||||
subpackages:
|
subpackages:
|
||||||
@@ -64,6 +72,8 @@ imports:
|
|||||||
subpackages:
|
subpackages:
|
||||||
- jsonpb
|
- jsonpb
|
||||||
- proto
|
- proto
|
||||||
|
- name: github.com/golang/snappy
|
||||||
|
version: 553a641470496b2327abcac10b36396bd98e45c9
|
||||||
- name: github.com/google/gofuzz
|
- name: github.com/google/gofuzz
|
||||||
version: fd52762d25a41827db7ef64c43756fd4b9f7e382
|
version: fd52762d25a41827db7ef64c43756fd4b9f7e382
|
||||||
- name: github.com/gorilla/context
|
- name: github.com/gorilla/context
|
||||||
@@ -72,6 +82,10 @@ imports:
|
|||||||
version: 3a5767ca75ece5f7f1440b1d16975247f8d8b221
|
version: 3a5767ca75ece5f7f1440b1d16975247f8d8b221
|
||||||
- name: github.com/gorilla/mux
|
- name: github.com/gorilla/mux
|
||||||
version: 392c28fe23e1c45ddba891b0320b3b5df220beea
|
version: 392c28fe23e1c45ddba891b0320b3b5df220beea
|
||||||
|
- name: github.com/howeyc/gopass
|
||||||
|
version: bf9dde6d0d2c004a008c27aaee91170c786f6db8
|
||||||
|
- name: github.com/imdario/mergo
|
||||||
|
version: e3000cb3d28c72b837601cac94debd91032d19fe
|
||||||
- name: github.com/influxdata/influxdb
|
- name: github.com/influxdata/influxdb
|
||||||
version: b7bb7e8359642b6e071735b50ae41f5eb343fd42
|
version: b7bb7e8359642b6e071735b50ae41f5eb343fd42
|
||||||
subpackages:
|
subpackages:
|
||||||
@@ -92,6 +106,8 @@ imports:
|
|||||||
- buffer
|
- buffer
|
||||||
- jlexer
|
- jlexer
|
||||||
- jwriter
|
- jwriter
|
||||||
|
- name: github.com/mholt/archiver
|
||||||
|
version: fe92d3d85a514d2752ad3b61ec412b598a2754f9
|
||||||
- name: github.com/nats-io/go-nats
|
- name: github.com/nats-io/go-nats
|
||||||
version: 6949c8e06a246e4177961aab22940b5c411e48f0
|
version: 6949c8e06a246e4177961aab22940b5c411e48f0
|
||||||
subpackages:
|
subpackages:
|
||||||
@@ -107,8 +123,16 @@ imports:
|
|||||||
- util
|
- util
|
||||||
- name: github.com/nats-io/nuid
|
- name: github.com/nats-io/nuid
|
||||||
version: 289cccf02c178dc782430d534e3c1f5b72af807f
|
version: 289cccf02c178dc782430d534e3c1f5b72af807f
|
||||||
|
- name: github.com/nwaples/rardecode
|
||||||
|
version: f22b7ef81a0afac9ce1447d37e5ab8e99fbd2f73
|
||||||
- name: github.com/pborman/uuid
|
- name: github.com/pborman/uuid
|
||||||
version: 3d4f2ba23642d3cfd06bd4b54cf03d99d95c0f1b
|
version: 3d4f2ba23642d3cfd06bd4b54cf03d99d95c0f1b
|
||||||
|
- name: github.com/pierrec/lz4
|
||||||
|
version: 5a3d2245f97fc249850e7802e3c01fad02a1c316
|
||||||
|
- name: github.com/pierrec/xxHash
|
||||||
|
version: a0006b13c722f7f12368c00a3d3c2ae8a999a0c6
|
||||||
|
subpackages:
|
||||||
|
- xxHash32
|
||||||
- name: github.com/PuerkitoBio/purell
|
- name: github.com/PuerkitoBio/purell
|
||||||
version: 8a290539e2e8629dbc4e6bad948158f790ec31f4
|
version: 8a290539e2e8629dbc4e6bad948158f790ec31f4
|
||||||
- name: github.com/PuerkitoBio/urlesc
|
- name: github.com/PuerkitoBio/urlesc
|
||||||
@@ -125,8 +149,18 @@ imports:
|
|||||||
version: f1f1a805ed361a0e078bb537e4ea78cd37dcf065
|
version: f1f1a805ed361a0e078bb537e4ea78cd37dcf065
|
||||||
subpackages:
|
subpackages:
|
||||||
- codec
|
- codec
|
||||||
|
- name: github.com/ulikunitz/xz
|
||||||
|
version: 0c6b41e72360850ca4f98dc341fd999726ea007f
|
||||||
|
subpackages:
|
||||||
|
- internal/hash
|
||||||
|
- internal/xlog
|
||||||
|
- lzma
|
||||||
- name: github.com/urfave/cli
|
- name: github.com/urfave/cli
|
||||||
version: 0bdeddeeb0f650497d603c4ad7b20cfe685682f6
|
version: 0bdeddeeb0f650497d603c4ad7b20cfe685682f6
|
||||||
|
- name: golang.org/x/crypto
|
||||||
|
version: 9477e0b78b9ac3d0b03822fd95422e2fe07627cd
|
||||||
|
subpackages:
|
||||||
|
- ssh/terminal
|
||||||
- name: golang.org/x/net
|
- name: golang.org/x/net
|
||||||
version: 6acef71eb69611914f7a30939ea9f6e194c78172
|
version: 6acef71eb69611914f7a30939ea9f6e194c78172
|
||||||
subpackages:
|
subpackages:
|
||||||
|
|||||||
@@ -39,3 +39,4 @@ import:
|
|||||||
- package: github.com/nats-io/nats-streaming-server
|
- package: github.com/nats-io/nats-streaming-server
|
||||||
version: ^v0.4.0
|
version: ^v0.4.0
|
||||||
- package: github.com/graymeta/stow
|
- package: github.com/graymeta/stow
|
||||||
|
- package: github.com/mholt/archiver
|
||||||
|
|||||||
Reference in New Issue
Block a user