Fix zip empty dir bug
This commit is contained in:
parent
25b628c844
commit
bf7ebfd618
30
util/zip.go
30
util/zip.go
|
@ -41,7 +41,7 @@ type ZipFile struct {
|
||||||
// Create creates a zip file with the specified filename.
|
// Create creates a zip file with the specified filename.
|
||||||
func (*myzip) Create(filename string) (*ZipFile, error) {
|
func (*myzip) Create(filename string) (*ZipFile, error) {
|
||||||
file, err := os.Create(filename)
|
file, err := os.Create(filename)
|
||||||
if err != nil {
|
if nil != err {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ func (z *ZipFile) AddEntryN(path string, names ...string) error {
|
||||||
for _, name := range names {
|
for _, name := range names {
|
||||||
zipPath := filepath.Join(path, name)
|
zipPath := filepath.Join(path, name)
|
||||||
err := z.AddEntry(zipPath, name)
|
err := z.AddEntry(zipPath, name)
|
||||||
if err != nil {
|
if nil != err {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -73,12 +73,12 @@ func (z *ZipFile) AddEntryN(path string, names ...string) error {
|
||||||
// AddEntry adds a entry.
|
// AddEntry adds a entry.
|
||||||
func (z *ZipFile) AddEntry(path, name string) error {
|
func (z *ZipFile) AddEntry(path, name string) error {
|
||||||
fi, err := os.Stat(name)
|
fi, err := os.Stat(name)
|
||||||
if err != nil {
|
if nil != err {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
fh, err := zip.FileInfoHeader(fi)
|
fh, err := zip.FileInfoHeader(fi)
|
||||||
if err != nil {
|
if nil != err {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ func (z *ZipFile) AddEntry(path, name string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
entry, err := z.writer.CreateHeader(fh)
|
entry, err := z.writer.CreateHeader(fh)
|
||||||
if err != nil {
|
if nil != err {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ func (z *ZipFile) AddEntry(path, name string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
file, err := os.Open(name)
|
file, err := os.Open(name)
|
||||||
if err != nil {
|
if nil != err {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
|
@ -113,7 +113,7 @@ func (z *ZipFile) AddEntry(path, name string) error {
|
||||||
func (z *ZipFile) AddDirectoryN(path string, names ...string) error {
|
func (z *ZipFile) AddDirectoryN(path string, names ...string) error {
|
||||||
for _, name := range names {
|
for _, name := range names {
|
||||||
err := z.AddDirectory(path, name)
|
err := z.AddDirectory(path, name)
|
||||||
if err != nil {
|
if nil != err {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -123,23 +123,31 @@ func (z *ZipFile) AddDirectoryN(path string, names ...string) error {
|
||||||
// AddDirectory adds a directory.
|
// AddDirectory adds a directory.
|
||||||
func (z *ZipFile) AddDirectory(path, dirName string) error {
|
func (z *ZipFile) AddDirectory(path, dirName string) error {
|
||||||
files, err := ioutil.ReadDir(dirName)
|
files, err := ioutil.ReadDir(dirName)
|
||||||
if err != nil {
|
if nil != err {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if 0 == len(files) {
|
||||||
|
err := z.AddEntry(path, dirName)
|
||||||
|
if nil != err {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
for _, file := range files {
|
for _, file := range files {
|
||||||
localPath := filepath.Join(dirName, file.Name())
|
localPath := filepath.Join(dirName, file.Name())
|
||||||
zipPath := filepath.Join(path, file.Name())
|
zipPath := filepath.Join(path, file.Name())
|
||||||
|
|
||||||
err = nil
|
err = nil
|
||||||
if file.IsDir() {
|
if file.IsDir() {
|
||||||
z.AddEntry(path, dirName)
|
|
||||||
|
|
||||||
err = z.AddDirectory(zipPath, localPath)
|
err = z.AddDirectory(zipPath, localPath)
|
||||||
} else {
|
} else {
|
||||||
err = z.AddEntry(zipPath, localPath)
|
err = z.AddEntry(zipPath, localPath)
|
||||||
}
|
}
|
||||||
if err != nil {
|
|
||||||
|
if nil != err {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,6 +55,51 @@ func TestUnzip(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestEmptyDir(t *testing.T) {
|
||||||
|
err := os.MkdirAll(packageName+"/dir/subDir1", 644)
|
||||||
|
if nil != err {
|
||||||
|
t.Error(err)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err = os.MkdirAll(packageName+"/dir/subDir2", 644)
|
||||||
|
if nil != err {
|
||||||
|
t.Error(err)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
f, err := os.Create(packageName + "/dir/subDir2/file")
|
||||||
|
if nil != err {
|
||||||
|
t.Error(err)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
f.Close()
|
||||||
|
|
||||||
|
zipFile, err := Zip.Create(packageName + "/dir.zip")
|
||||||
|
if nil != err {
|
||||||
|
t.Error(err)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
zipFile.AddDirectoryN("dir", packageName+"/dir")
|
||||||
|
if nil != err {
|
||||||
|
t.Error(err)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err = zipFile.Close()
|
||||||
|
if nil != err {
|
||||||
|
t.Error(err)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestMain(m *testing.M) {
|
func TestMain(m *testing.M) {
|
||||||
logger.Info(testDir)
|
logger.Info(testDir)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue