github.com/hattya/nazuna@v0.7.1-0.20240331055452-55e14c275c1c/cmd/nzn/layer.go (about) 1 // 2 // nazuna/cmd/nzn :: layer.go 3 // 4 // Copyright (c) 2013-2020 Akinori Hattori <hattya@gmail.com> 5 // 6 // SPDX-License-Identifier: MIT 7 // 8 9 package main 10 11 import ( 12 "strings" 13 14 "github.com/hattya/go.cli" 15 "github.com/hattya/nazuna" 16 ) 17 18 func init() { 19 flags := cli.NewFlagSet() 20 flags.Bool("c, create", false, "create a new layer") 21 22 app.Add(&cli.Command{ 23 Name: []string{"layer"}, 24 Usage: []string{ 25 "[<name>]", 26 "-c <name>", 27 }, 28 Desc: strings.TrimSpace(cli.Dedent(` 29 manage repository layers 30 `)), 31 Flags: flags, 32 Action: layer, 33 Data: true, 34 }) 35 } 36 37 func layer(ctx *cli.Context) error { 38 repo := ctx.Data.(*nazuna.Repository) 39 switch { 40 case ctx.Bool("create"): 41 if len(ctx.Args) != 1 { 42 return cli.ErrArgs 43 } 44 if _, err := repo.NewLayer(ctx.Args[0]); err != nil { 45 return err 46 } 47 return repo.Flush() 48 case len(ctx.Args) > 0: 49 if len(ctx.Args) != 1 { 50 return cli.ErrArgs 51 } 52 wc, err := repo.WC() 53 if err != nil { 54 return err 55 } 56 if err := wc.SelectLayer(ctx.Args[0]); err != nil { 57 return err 58 } 59 return wc.Flush() 60 default: 61 wc, err := repo.WC() 62 if err != nil { 63 return err 64 } 65 for _, l := range repo.Layers { 66 app.Println(l.Name) 67 for _, ll := range l.Layers { 68 var s string 69 if wl, err := wc.LayerFor(l.Name); err == nil && wl.Name == ll.Name { 70 s = "*" 71 } 72 app.Printf(" %v%v\n", ll.Name, s) 73 } 74 } 75 return nil 76 } 77 }