@@ -48,83 +48,57 @@ func (hs *hooks) AddHook(hook Hook) {
48
48
func (hs hooks ) process (
49
49
ctx context.Context , cmd Cmder , fn func (context.Context , Cmder ) error ,
50
50
) error {
51
- ctx , err := hs .beforeProcess (ctx , cmd )
52
- if err != nil {
53
- cmd .SetErr (err )
54
- return err
51
+ var hookIndex int
52
+ var retErr error
53
+
54
+ for ; hookIndex < len (hs .hooks ); hookIndex ++ {
55
+ ctx , retErr = hs .hooks [hookIndex ].BeforeProcess (ctx , cmd )
56
+ if retErr != nil {
57
+ cmd .SetErr (retErr )
58
+ break
59
+ }
55
60
}
56
61
57
- cmdErr := fn (ctx , cmd )
58
-
59
- if err := hs .afterProcess (ctx , cmd ); err != nil {
60
- cmd .SetErr (err )
61
- return err
62
+ if retErr == nil {
63
+ retErr = fn (ctx , cmd )
62
64
}
63
65
64
- return cmdErr
65
- }
66
-
67
- func (hs hooks ) beforeProcess (ctx context.Context , cmd Cmder ) (context.Context , error ) {
68
- for _ , h := range hs .hooks {
69
- var err error
70
- ctx , err = h .BeforeProcess (ctx , cmd )
71
- if err != nil {
72
- return nil , err
66
+ for ; hookIndex >= 0 ; hookIndex -- {
67
+ if err := hs .hooks [hookIndex ].AfterProcess (ctx , cmd ); err != nil {
68
+ retErr = err
69
+ cmd .SetErr (retErr )
73
70
}
74
71
}
75
- return ctx , nil
76
- }
77
72
78
- func (hs hooks ) afterProcess (ctx context.Context , cmd Cmder ) error {
79
- var firstErr error
80
- for i := len (hs .hooks ) - 1 ; i >= 0 ; i -- {
81
- h := hs .hooks [i ]
82
- if err := h .AfterProcess (ctx , cmd ); err != nil && firstErr == nil {
83
- firstErr = err
84
- }
85
- }
86
- return firstErr
73
+ return retErr
87
74
}
88
75
89
76
func (hs hooks ) processPipeline (
90
77
ctx context.Context , cmds []Cmder , fn func (context.Context , []Cmder ) error ,
91
78
) error {
92
- ctx , err := hs .beforeProcessPipeline (ctx , cmds )
93
- if err != nil {
94
- setCmdsErr (cmds , err )
95
- return err
79
+ var hookIndex int
80
+ var retErr error
81
+
82
+ for ; hookIndex < len (hs .hooks ); hookIndex ++ {
83
+ ctx , retErr = hs .hooks [hookIndex ].BeforeProcessPipeline (ctx , cmds )
84
+ if retErr != nil {
85
+ setCmdsErr (cmds , retErr )
86
+ break
87
+ }
96
88
}
97
89
98
- cmdsErr := fn (ctx , cmds )
99
-
100
- if err := hs .afterProcessPipeline (ctx , cmds ); err != nil {
101
- setCmdsErr (cmds , err )
102
- return err
90
+ if retErr == nil {
91
+ retErr = fn (ctx , cmds )
103
92
}
104
93
105
- return cmdsErr
106
- }
107
-
108
- func (hs hooks ) beforeProcessPipeline (ctx context.Context , cmds []Cmder ) (context.Context , error ) {
109
- for _ , h := range hs .hooks {
110
- var err error
111
- ctx , err = h .BeforeProcessPipeline (ctx , cmds )
112
- if err != nil {
113
- return nil , err
94
+ for ; hookIndex >= 0 ; hookIndex -- {
95
+ if err := hs .hooks [hookIndex ].AfterProcessPipeline (ctx , cmds ); err != nil {
96
+ retErr = err
97
+ setCmdsErr (cmds , retErr )
114
98
}
115
99
}
116
- return ctx , nil
117
- }
118
100
119
- func (hs hooks ) afterProcessPipeline (ctx context.Context , cmds []Cmder ) error {
120
- var firstErr error
121
- for i := len (hs .hooks ) - 1 ; i >= 0 ; i -- {
122
- h := hs .hooks [i ]
123
- if err := h .AfterProcessPipeline (ctx , cmds ); err != nil && firstErr == nil {
124
- firstErr = err
125
- }
126
- }
127
- return firstErr
101
+ return retErr
128
102
}
129
103
130
104
func (hs hooks ) processTxPipeline (
0 commit comments