diff --git a/server_apps.go b/server_apps.go index 5cd2859d6cbaab09cb3bc2372e2608f7b20652cb..c5ede95057dfeae507088bddeb9ef4d8f3daaaeb 100644 --- a/server_apps.go +++ b/server_apps.go @@ -165,22 +165,35 @@ func (s *server) targzApp(ctx context.Context, name, pathInRepo, repo string, ob prefix = strings.ReplaceAll(repo, "/", "-") outPath := path.Join(prefix, p) + ensureDir := func(p string) error { + if directories[p] { + return nil + } + directories[p] = true + err = t.WriteHeader(&tar.Header{ + Name: p, + Typeflag: tar.TypeDir, + Mode: 0755, + }) + if err != nil { + return fmt.Errorf("CreateDir(%q): %w", p, err) + } + return nil + } + dirs, _ := path.Split(outPath) if dirs != "" { + dirs = strings.TrimRight(dirs, "/") parts := strings.Split(dirs, "/") - cur := parts[0] + cur := parts[0] + "/" + + if err := ensureDir(cur); err != nil { + return nil, err + } for i := 1; i < len(parts); i++ { - cur += parts[i] - if !directories[cur] { - directories[cur] = true - err = t.WriteHeader(&tar.Header{ - Name: cur + "/", - Typeflag: tar.TypeDir, - Mode: 0755, - }) - if err != nil { - return nil, fmt.Errorf("CreateDir(%q): %w", cur, err) - } + cur += parts[i] + "/" + if err := ensureDir(cur); err != nil { + return nil, err } } } @@ -365,9 +378,9 @@ func (s *server) getAppInfo(ctx context.Context, pathInRepo, repo string) (*appI // app. This is based on md5 so ambitious hack3rs can force a certain // app seed :) flow3rSeedMd5 := md5.Sum([]byte(repo)) - app.flow3rSeed = ""; + app.flow3rSeed = "" for i := 0; i < 8; i++ { - app.flow3rSeed += string(flow3rSeedMd5[i] % 5 + byte('0')) + app.flow3rSeed += string(flow3rSeedMd5[i]%5 + byte('0')) } return app, nil @@ -481,8 +494,8 @@ type jsonApp struct { Flow3rSeed string `json:"flow3rSeed"` } -func makeJsonApp(a *appDescriptor) (jsonApp) { - return jsonApp { +func makeJsonApp(a *appDescriptor) jsonApp { + return jsonApp{ RepoURL: "https://git.flow3r.garden/" + a.repository, Commit: a.appInfo.commit, DownloadURL: fmt.Sprintf("%sapps/zip/%s.zip", flagBaseURL, a.repository),