88)
99
1010const (
11- EventAURPreInstall = "AURPreInstall"
12- EventUpgradeSelect = "UpgradeSelect"
11+ EventAURPreInstall = "AURPreInstall"
12+ EventAURPostDownload = "AURPostDownload"
13+ EventUpgradeSelect = "UpgradeSelect"
1314)
1415
1516type Autocmd struct {
@@ -82,7 +83,7 @@ type UpgradeSelectResult struct {
8283
8384func (e * Engine ) createAutocmd (state * glua.LState ) int {
8485 event := state .CheckString (1 )
85- if event != EventAURPreInstall && event != EventUpgradeSelect {
86+ if event != EventAURPreInstall && event != EventAURPostDownload && event != EventUpgradeSelect {
8687 state .ArgError (1 , fmt .Sprintf ("unsupported event %q" , event ))
8788 return 0
8889 }
@@ -128,13 +129,26 @@ func (e *Engine) RunAURPreInstall(event *AURPreInstallEvent) error {
128129 Fn : autocmd .callback ,
129130 NRet : 0 ,
130131 Protect : true ,
131- }, e .aurPreInstallTable (event )); err != nil {
132- wrapped := err
133- if abortErr , ok := luaAbortError (err ); ok {
134- wrapped = abortErr
135- }
132+ }, e .aurEventTable (EventAURPreInstall , event )); err != nil {
133+ return fmt .Errorf ("%s %s: %w" , EventAURPreInstall , event .Base , wrapLuaErr (err ))
134+ }
135+ }
136+
137+ return nil
138+ }
139+
140+ func (e * Engine ) RunAURPostDownload (event * AURPreInstallEvent ) error {
141+ if ! e .HasAutocmd (EventAURPostDownload ) {
142+ return nil
143+ }
136144
137- return fmt .Errorf ("%s %s: %w" , EventAURPreInstall , event .Base , wrapped )
145+ for _ , autocmd := range e .autocmds [EventAURPostDownload ] {
146+ if err := e .L .CallByParam (glua.P {
147+ Fn : autocmd .callback ,
148+ NRet : 0 ,
149+ Protect : true ,
150+ }, e .aurEventTable (EventAURPostDownload , event )); err != nil {
151+ return fmt .Errorf ("%s %s: %w" , EventAURPostDownload , event .Base , wrapLuaErr (err ))
138152 }
139153 }
140154
@@ -159,12 +173,7 @@ func (e *Engine) RunUpgradeSelect(event *UpgradeSelectEvent) (UpgradeSelectResul
159173 NRet : 1 ,
160174 Protect : true ,
161175 }, e .upgradeSelectTable (event )); err != nil {
162- wrapped := err
163- if abortErr , ok := luaAbortError (err ); ok {
164- wrapped = abortErr
165- }
166-
167- return result , fmt .Errorf ("%s: %w" , EventUpgradeSelect , wrapped )
176+ return result , fmt .Errorf ("%s: %w" , EventUpgradeSelect , wrapLuaErr (err ))
168177 }
169178
170179 value := e .L .Get (- 1 )
@@ -190,12 +199,12 @@ func (e *Engine) RunUpgradeSelect(event *UpgradeSelectEvent) (UpgradeSelectResul
190199 return result , nil
191200}
192201
193- func (e * Engine ) aurPreInstallTable ( event * AURPreInstallEvent ) * glua.LTable {
202+ func (e * Engine ) aurEventTable ( eventName string , event * AURPreInstallEvent ) * glua.LTable {
194203 state := e .L
195204 eventTable := state .NewTable ()
196205 data := state .NewTable ()
197206
198- eventTable .RawSetString ("event" , glua .LString (EventAURPreInstall ))
207+ eventTable .RawSetString ("event" , glua .LString (eventName ))
199208 eventTable .RawSetString ("match" , glua .LString (event .Base ))
200209 eventTable .RawSetString ("data" , data )
201210
@@ -312,18 +321,19 @@ func (e *Engine) parseUpgradeSelectResult(value glua.LValue, validExcludes mapse
312321 return
313322 }
314323
315- name , ok := val .(glua.LString )
324+ lname , ok := val .(glua.LString )
316325 if ! ok {
317326 parseErr = fmt .Errorf ("exclude entries must be strings" )
318327 return
319328 }
320329
321- if ! validExcludes .Contains (string (name )) {
322- parseErr = fmt .Errorf ("unknown upgrade exclusion %q" , string (name ))
330+ name := string (lname )
331+ if ! validExcludes .Contains (name ) {
332+ parseErr = fmt .Errorf ("unknown upgrade exclusion %q" , name )
323333 return
324334 }
325335
326- result .Exclude = append (result .Exclude , string ( name ) )
336+ result .Exclude = append (result .Exclude , name )
327337 })
328338 if parseErr != nil {
329339 return result , parseErr
0 commit comments