func walker(vid storage.VolumeId, n *storage.Needle, version storage.Version) (err error) { key := storage.NewFileIdFromNeedle(vid, n).String() if tarOutputFile != nil { fileNameTemplateBuffer.Reset() if err = fileNameTemplate.Execute(fileNameTemplateBuffer, nameParams{ Name: string(n.Name), Id: n.Id, Mime: string(n.Mime), Key: key, Ext: filepath.Ext(string(n.Name)), }, ); err != nil { return err } fileName := fileNameTemplateBuffer.String() if n.IsGzipped() && path.Ext(fileName) != ".gz" { fileName = fileName + ".gz" } tarHeader.Name, tarHeader.Size = fileName, int64(len(n.Data)) if n.HasLastModifiedDate() { tarHeader.ModTime = time.Unix(int64(n.LastModified), 0) } else { tarHeader.ModTime = time.Unix(0, 0) } tarHeader.ChangeTime = tarHeader.ModTime if err = tarOutputFile.WriteHeader(&tarHeader); err != nil { return err } _, err = tarOutputFile.Write(n.Data) } else { size := n.DataSize if version == storage.Version1 { size = n.Size } fmt.Printf("key=%s Name=%s Size=%d gzip=%t mime=%s\n", key, n.Name, size, n.IsGzipped(), n.Mime, ) } return }