soong_jar: combine zipWriter and zipInfo into a class
Combine the zipWriter and info arguments that are passed into every function into a single writer class, and make all the functions methods on the new class. Change-Id: I29d0164578894974ceaed9482349604633de6533
This commit is contained in:
@@ -69,10 +69,12 @@ func usage() {
|
|||||||
os.Exit(2)
|
os.Exit(2)
|
||||||
}
|
}
|
||||||
|
|
||||||
type zipInfo struct {
|
type zipWriter struct {
|
||||||
time time.Time
|
time time.Time
|
||||||
createdDirs map[string]bool
|
createdDirs map[string]bool
|
||||||
directories bool
|
directories bool
|
||||||
|
|
||||||
|
w *zip.Writer
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@@ -83,21 +85,21 @@ func main() {
|
|||||||
usage()
|
usage()
|
||||||
}
|
}
|
||||||
|
|
||||||
info := zipInfo{
|
w := &zipWriter{
|
||||||
time: time.Now(),
|
time: time.Now(),
|
||||||
createdDirs: make(map[string]bool),
|
createdDirs: make(map[string]bool),
|
||||||
directories: *directories,
|
directories: *directories,
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Go's zip implementation doesn't support increasing the compression level yet
|
// TODO: Go's zip implementation doesn't support increasing the compression level yet
|
||||||
err := writeZipFile(*out, listFiles, *manifest, info)
|
err := w.write(*out, listFiles, *manifest)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintln(os.Stderr, err.Error())
|
fmt.Fprintln(os.Stderr, err.Error())
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeZipFile(out string, listFiles fileArgs, manifest string, info zipInfo) error {
|
func (z *zipWriter) write(out string, listFiles fileArgs, manifest string) error {
|
||||||
f, err := os.Create(out)
|
f, err := os.Create(out)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -110,25 +112,25 @@ func writeZipFile(out string, listFiles fileArgs, manifest string, info zipInfo)
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
zipFile := zip.NewWriter(f)
|
z.w = zip.NewWriter(f)
|
||||||
defer zipFile.Close()
|
defer z.w.Close()
|
||||||
|
|
||||||
for _, listFile := range listFiles {
|
for _, listFile := range listFiles {
|
||||||
err = writeListFile(zipFile, listFile, info)
|
err = z.writeListFile(listFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, file := range files {
|
for _, file := range files {
|
||||||
err = writeRelFile(zipFile, file.relativeRoot, file.file, info)
|
err = z.writeRelFile(file.relativeRoot, file.file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if manifest != "" {
|
if manifest != "" {
|
||||||
err = writeFile(zipFile, "META-INF/MANIFEST.MF", manifest, info)
|
err = z.writeFile("META-INF/MANIFEST.MF", manifest)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -137,7 +139,7 @@ func writeZipFile(out string, listFiles fileArgs, manifest string, info zipInfo)
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeListFile(zipFile *zip.Writer, listFile fileArg, info zipInfo) error {
|
func (z *zipWriter) writeListFile(listFile fileArg) error {
|
||||||
list, err := ioutil.ReadFile(listFile.file)
|
list, err := ioutil.ReadFile(listFile.file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -150,7 +152,7 @@ func writeListFile(zipFile *zip.Writer, listFile fileArg, info zipInfo) error {
|
|||||||
if file == "" {
|
if file == "" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
err = writeRelFile(zipFile, listFile.relativeRoot, file, info)
|
err = z.writeRelFile(listFile.relativeRoot, file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -159,13 +161,13 @@ func writeListFile(zipFile *zip.Writer, listFile fileArg, info zipInfo) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeRelFile(zipFile *zip.Writer, root, file string, info zipInfo) error {
|
func (z *zipWriter) writeRelFile(root, file string) error {
|
||||||
rel, err := filepath.Rel(root, file)
|
rel, err := filepath.Rel(root, file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = writeFile(zipFile, rel, file, info)
|
err = z.writeFile(rel, file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -173,34 +175,22 @@ func writeRelFile(zipFile *zip.Writer, root, file string, info zipInfo) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeFile(zipFile *zip.Writer, rel, file string, info zipInfo) error {
|
func (z *zipWriter) writeFile(rel, file string) error {
|
||||||
if info.directories {
|
if z.directories {
|
||||||
dir, _ := filepath.Split(rel)
|
dir, _ := filepath.Split(rel)
|
||||||
for dir != "" && !info.createdDirs[dir] {
|
err := z.writeDirectory(dir)
|
||||||
info.createdDirs[dir] = true
|
|
||||||
|
|
||||||
dirHeader := &zip.FileHeader{
|
|
||||||
Name: dir,
|
|
||||||
}
|
|
||||||
dirHeader.SetMode(os.ModeDir)
|
|
||||||
dirHeader.SetModTime(info.time)
|
|
||||||
|
|
||||||
_, err := zipFile.CreateHeader(dirHeader)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
dir, _ = filepath.Split(dir)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fileHeader := &zip.FileHeader{
|
fileHeader := &zip.FileHeader{
|
||||||
Name: rel,
|
Name: rel,
|
||||||
Method: zip.Deflate,
|
Method: zip.Deflate,
|
||||||
}
|
}
|
||||||
fileHeader.SetModTime(info.time)
|
fileHeader.SetModTime(z.time)
|
||||||
|
|
||||||
out, err := zipFile.CreateHeader(fileHeader)
|
out, err := z.w.CreateHeader(fileHeader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -218,3 +208,24 @@ func writeFile(zipFile *zip.Writer, rel, file string, info zipInfo) error {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (z *zipWriter) writeDirectory(dir string) error {
|
||||||
|
for dir != "" && !z.createdDirs[dir] {
|
||||||
|
z.createdDirs[dir] = true
|
||||||
|
|
||||||
|
dirHeader := &zip.FileHeader{
|
||||||
|
Name: dir,
|
||||||
|
}
|
||||||
|
dirHeader.SetMode(os.ModeDir)
|
||||||
|
dirHeader.SetModTime(z.time)
|
||||||
|
|
||||||
|
_, err := z.w.CreateHeader(dirHeader)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
dir, _ = filepath.Split(dir)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user