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  }