mirror of
https://github.com/vee1e/gittuf.git
synced 2026-09-04 19:57:04 +00:00
81 lines
1.6 KiB
Go
81 lines
1.6 KiB
Go
// Copyright The gittuf Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package annotate
|
|
|
|
import (
|
|
"github.com/gittuf/gittuf/experimental/gittuf"
|
|
rslopts "github.com/gittuf/gittuf/experimental/gittuf/options/rsl"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
type options struct {
|
|
skip bool
|
|
message string
|
|
remoteName string
|
|
localOnly bool
|
|
}
|
|
|
|
func (o *options) AddFlags(cmd *cobra.Command) {
|
|
cmd.Flags().BoolVarP(
|
|
&o.skip,
|
|
"skip",
|
|
"s",
|
|
false,
|
|
"mark annotated entries as to be skipped",
|
|
)
|
|
|
|
cmd.Flags().StringVarP(
|
|
&o.message,
|
|
"message",
|
|
"m",
|
|
"",
|
|
"annotation message",
|
|
)
|
|
cmd.MarkFlagRequired("message") //nolint:errcheck
|
|
|
|
cmd.Flags().StringVar(
|
|
&o.remoteName,
|
|
"remote-name",
|
|
"",
|
|
"remote name",
|
|
)
|
|
|
|
cmd.Flags().BoolVar(
|
|
&o.localOnly,
|
|
"local-only",
|
|
false,
|
|
"local only",
|
|
)
|
|
|
|
cmd.MarkFlagsOneRequired("remote-name", "local-only")
|
|
cmd.MarkFlagsMutuallyExclusive("remote-name", "local-only")
|
|
}
|
|
|
|
func (o *options) Run(cmd *cobra.Command, args []string) error {
|
|
repo, err := gittuf.LoadRepository()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
opts := []rslopts.AnnotateOption{rslopts.WithAnnotateRemote(o.remoteName)}
|
|
if o.localOnly {
|
|
opts = append(opts, rslopts.WithAnnotateLocalOnly())
|
|
}
|
|
|
|
return repo.RecordRSLAnnotation(cmd.Context(), args, o.skip, o.message, true, opts...)
|
|
}
|
|
|
|
func New() *cobra.Command {
|
|
o := &options{}
|
|
cmd := &cobra.Command{
|
|
Use: "annotate",
|
|
Short: "Annotate prior RSL entries",
|
|
Args: cobra.MinimumNArgs(1),
|
|
RunE: o.Run,
|
|
DisableAutoGenTag: true,
|
|
}
|
|
o.AddFlags(cmd)
|
|
|
|
return cmd
|
|
}
|