Contains the Concourse pipeline definition for building a line-server container
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
1.4 KiB

  1. package helpers
  2. import (
  3. "archive/tar"
  4. "archive/zip"
  5. "compress/bzip2"
  6. "compress/gzip"
  7. "io"
  8. "sort"
  9. )
  10. type ReadSeekerAt interface {
  11. io.Reader
  12. io.Seeker
  13. io.ReaderAt
  14. }
  15. func ListArchiveFiles(mimetype string, size int64, r ReadSeekerAt) (files []string, err error) {
  16. if mimetype == "application/x-tar" {
  17. tReadr := tar.NewReader(r)
  18. for {
  19. hdr, err := tReadr.Next()
  20. if err == io.EOF || err != nil {
  21. break
  22. }
  23. if hdr.Typeflag == tar.TypeDir || hdr.Typeflag == tar.TypeReg {
  24. files = append(files, hdr.Name)
  25. }
  26. }
  27. sort.Strings(files)
  28. } else if mimetype == "application/x-gzip" {
  29. gzf, err := gzip.NewReader(r)
  30. if err == nil {
  31. tReadr := tar.NewReader(gzf)
  32. for {
  33. hdr, err := tReadr.Next()
  34. if err == io.EOF || err != nil {
  35. break
  36. }
  37. if hdr.Typeflag == tar.TypeDir || hdr.Typeflag == tar.TypeReg {
  38. files = append(files, hdr.Name)
  39. }
  40. }
  41. sort.Strings(files)
  42. }
  43. } else if mimetype == "application/x-bzip" {
  44. bzf := bzip2.NewReader(r)
  45. tReadr := tar.NewReader(bzf)
  46. for {
  47. hdr, err := tReadr.Next()
  48. if err == io.EOF || err != nil {
  49. break
  50. }
  51. if hdr.Typeflag == tar.TypeDir || hdr.Typeflag == tar.TypeReg {
  52. files = append(files, hdr.Name)
  53. }
  54. }
  55. sort.Strings(files)
  56. } else if mimetype == "application/zip" {
  57. zf, err := zip.NewReader(r, size)
  58. if err == nil {
  59. for _, f := range zf.File {
  60. files = append(files, f.Name)
  61. }
  62. }
  63. sort.Strings(files)
  64. }
  65. return
  66. }