| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- // Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved.
- //
- // This Source Code Form is subject to the terms of the MIT License.
- // If a copy of the MIT was not distributed with this file,
- // You can obtain one at https://github.com/gogf/gf.
- package cmd
- import (
- "context"
- "strings"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/os/gcmd"
- "github.com/gogf/gf/v2/os/gfile"
- "github.com/gogf/gf/v2/os/gres"
- "github.com/gogf/gf/v2/util/gtag"
- "github.com/gogf/gf/cmd/gf/v2/internal/utility/allyes"
- "github.com/gogf/gf/cmd/gf/v2/internal/utility/mlog"
- )
- var (
- Pack = cPack{}
- )
- type cPack struct {
- g.Meta `name:"pack" usage:"{cPackUsage}" brief:"{cPackBrief}" eg:"{cPackEg}"`
- }
- const (
- cPackUsage = `gf pack SRC DST`
- cPackBrief = `packing any file/directory to a resource file, or a go file`
- cPackEg = `
- gf pack public data.bin
- gf pack public,template data.bin
- gf pack public,template packed/data.go
- gf pack public,template,config packed/data.go
- gf pack public,template,config packed/data.go -n=packed -p=/var/www/my-app
- gf pack /var/www/public packed/data.go -n=packed
- `
- cPackSrcBrief = `source path for packing, which can be multiple source paths.`
- cPackDstBrief = `
- destination file path for packed file. if extension of the filename is ".go" and "-n" option is given,
- it enables packing SRC to go file, or else it packs SRC into a binary file.
- `
- cPackNameBrief = `package name for output go file, it's set as its directory name if no name passed`
- cPackPrefixBrief = `prefix for each file packed into the resource file`
- cPackKeepPathBrief = `keep the source path from system to resource file, usually for relative path`
- )
- func init() {
- gtag.Sets(g.MapStrStr{
- `cPackUsage`: cPackUsage,
- `cPackBrief`: cPackBrief,
- `cPackEg`: cPackEg,
- `cPackSrcBrief`: cPackSrcBrief,
- `cPackDstBrief`: cPackDstBrief,
- `cPackNameBrief`: cPackNameBrief,
- `cPackPrefixBrief`: cPackPrefixBrief,
- `cPackKeepPathBrief`: cPackKeepPathBrief,
- })
- }
- type cPackInput struct {
- g.Meta `name:"pack"`
- Src string `name:"SRC" arg:"true" v:"required" brief:"{cPackSrcBrief}"`
- Dst string `name:"DST" arg:"true" v:"required" brief:"{cPackDstBrief}"`
- Name string `name:"name" short:"n" brief:"{cPackNameBrief}"`
- Prefix string `name:"prefix" short:"p" brief:"{cPackPrefixBrief}"`
- KeepPath bool `name:"keepPath" short:"k" brief:"{cPackKeepPathBrief}" orphan:"true"`
- }
- type cPackOutput struct{}
- func (c cPack) Index(ctx context.Context, in cPackInput) (out *cPackOutput, err error) {
- if gfile.Exists(in.Dst) && gfile.IsDir(in.Dst) {
- mlog.Fatalf("DST path '%s' cannot be a directory", in.Dst)
- }
- if !gfile.IsEmpty(in.Dst) && !allyes.Check() {
- s := gcmd.Scanf("path '%s' is not empty, files might be overwrote, continue? [y/n]: ", in.Dst)
- if strings.EqualFold(s, "n") {
- return
- }
- }
- if in.Name == "" && gfile.ExtName(in.Dst) == "go" {
- in.Name = gfile.Basename(gfile.Dir(in.Dst))
- }
- var option = gres.Option{
- Prefix: in.Prefix,
- KeepPath: in.KeepPath,
- }
- if in.Name != "" {
- if err = gres.PackToGoFileWithOption(in.Src, in.Dst, in.Name, option); err != nil {
- mlog.Fatalf("pack failed: %v", err)
- }
- } else {
- if err = gres.PackToFileWithOption(in.Src, in.Dst, option); err != nil {
- mlog.Fatalf("pack failed: %v", err)
- }
- }
- mlog.Print("done!")
- return
- }
|