package main import ( "archive/zip" "fmt" "io" "log" "srs.epita.fr/fic-server/admin/sync" "srs.epita.fr/fic-server/libfic" ) func checkZip(file *fic.EFile, exceptions *sync.CheckExceptions) (errs []error) { fd, closer, err := sync.GetFile(sync.GlobalImporter, file.GetOrigin()) if err != nil { log.Printf("Unable to open %q: %s", file.GetOrigin(), err.Error()) return } defer closer() fdat, ok := fd.(io.ReaderAt) if !ok { log.Println("The current reader doesn't allow me to check this archive") } size, err := sync.GetFileSize(sync.GlobalImporter, file.GetOrigin()) if err != nil { log.Printf("Unable to calculate size of %q: %s", file.GetOrigin(), err.Error()) return } r, err := zip.NewReader(fdat, size) if err != nil { log.Printf("Unable to open %q: %s", file.GetOrigin(), err.Error()) return } if len(r.File) < 2 { if !exceptions.HasException(":one-file-tarball") { errs = append(errs, fmt.Errorf("don't make a ZIP archive for one file, use gzip instead")) } } else if len(r.File) < 5 && false { if !exceptions.HasException(":few-files-tarball") { errs = append(errs, fmt.Errorf("don't make a ZIP archive for so little files (:few-files-tarball)")) } } else { log.Printf("%d files found in %q", len(r.File), file.Name) } return }