summaryrefslogtreecommitdiff
path: root/workhorse/cmd/gitlab-zip-metadata/main.go
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-12-17 11:59:07 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-12-17 11:59:07 +0000
commit8b573c94895dc0ac0e1d9d59cf3e8745e8b539ca (patch)
tree544930fb309b30317ae9797a9683768705d664c4 /workhorse/cmd/gitlab-zip-metadata/main.go
parent4b1de649d0168371549608993deac953eb692019 (diff)
downloadgitlab-ce-8b573c94895dc0ac0e1d9d59cf3e8745e8b539ca.tar.gz
Add latest changes from gitlab-org/gitlab@13-7-stable-eev13.7.0-rc42
Diffstat (limited to 'workhorse/cmd/gitlab-zip-metadata/main.go')
-rw-r--r--workhorse/cmd/gitlab-zip-metadata/main.go67
1 files changed, 67 insertions, 0 deletions
diff --git a/workhorse/cmd/gitlab-zip-metadata/main.go b/workhorse/cmd/gitlab-zip-metadata/main.go
new file mode 100644
index 00000000000..faa85ab5366
--- /dev/null
+++ b/workhorse/cmd/gitlab-zip-metadata/main.go
@@ -0,0 +1,67 @@
+package main
+
+import (
+ "context"
+ "flag"
+ "fmt"
+ "io"
+ "os"
+
+ "gitlab.com/gitlab-org/gitlab-workhorse/cmd/gitlab-zip-metadata/limit"
+ "gitlab.com/gitlab-org/gitlab-workhorse/internal/zipartifacts"
+)
+
+const progName = "gitlab-zip-metadata"
+
+var Version = "unknown"
+
+var printVersion = flag.Bool("version", false, "Print version and exit")
+
+func main() {
+ flag.Parse()
+
+ version := fmt.Sprintf("%s %s", progName, Version)
+ if *printVersion {
+ fmt.Println(version)
+ os.Exit(0)
+ }
+
+ if len(os.Args) != 2 {
+ fmt.Fprintf(os.Stderr, "Usage: %s FILE.ZIP\n", progName)
+ os.Exit(1)
+ }
+
+ readerFunc := func(reader io.ReaderAt, size int64) io.ReaderAt {
+ readLimit := limit.SizeToLimit(size)
+
+ return limit.NewLimitedReaderAt(reader, readLimit, func(read int64) {
+ fmt.Fprintf(os.Stderr, "%s: zip archive limit exceeded after reading %d bytes\n", progName, read)
+
+ fatalError(zipartifacts.ErrorCode[zipartifacts.CodeLimitsReached])
+ })
+ }
+
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+
+ archive, err := zipartifacts.OpenArchiveWithReaderFunc(ctx, os.Args[1], readerFunc)
+ if err != nil {
+ fatalError(err)
+ }
+
+ if err := zipartifacts.GenerateZipMetadata(os.Stdout, archive); err != nil {
+ fatalError(err)
+ }
+}
+
+func fatalError(err error) {
+ code := zipartifacts.ExitCodeByError(err)
+
+ fmt.Fprintf(os.Stderr, "%s error: %v, code: %d\n", progName, err, code)
+
+ if code > 0 {
+ os.Exit(code)
+ } else {
+ os.Exit(1)
+ }
+}