Exemple #1
0
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
}