@@ -42,10 +42,20 @@ const (
4242// cobraRunEFunc is the signature of a cobra.Command.RunE function.
4343type cobraRunEFunc = func (cmd * cobra.Command , args []string ) (err error )
4444
45+ // TODO: apply these to other cmds as well
46+ var errorHandlers = []func (error ) error {
47+ addPermissionDeniedErrInfo ,
48+ addSizeErrInfo ,
49+ }
50+
4551// withErrorHandling is a wrapper that centralizes error handling, instead of having to scatter it around the command logic.
4652func withErrorHandling (f cobraRunEFunc ) cobraRunEFunc {
4753 return func (cmd * cobra.Command , args []string ) (err error ) {
48- return addSizeErrInfo (f (cmd , args ))
54+ cmdErr := f (cmd , args )
55+ for _ , handler := range errorHandlers {
56+ cmdErr = handler (cmdErr )
57+ }
58+ return cmdErr
4959 }
5060}
5161
@@ -398,6 +408,9 @@ func backupCreateCmdFunc(cmd *cobra.Command, args []string) (err error) {
398408 }
399409 return nil
400410 })
411+ if err != nil {
412+ return err
413+ }
401414
402415 backupCompleted = true
403416 return nil
@@ -902,3 +915,15 @@ func addSizeErrInfo(err error) error {
902915
903916 return fmt .Errorf ("%w: set flag --max-message-size=%d to increase the maximum allowable size" , err , 2 * necessaryByteCount )
904917}
918+
919+ func addPermissionDeniedErrInfo (err error ) error {
920+ if err == nil {
921+ return nil
922+ }
923+
924+ code := status .Code (err )
925+ if code != codes .PermissionDenied {
926+ return err
927+ }
928+ return fmt .Errorf ("%w: ensure that the token used for this call has all requisite permissions" , err )
929+ }
0 commit comments