@@ -179,6 +179,146 @@ func TestIntegrationLocalInstall(t *testing.T) {
179
179
}
180
180
}
181
181
182
+ func TestIntegrationLocalBuildOnly (t * testing.T ) {
183
+ makepkgBin := t .TempDir () + "/makepkg"
184
+ pacmanBin := t .TempDir () + "/pacman"
185
+ gitBin := t .TempDir () + "/git"
186
+ tmpDir := t .TempDir ()
187
+ f , err := os .OpenFile (makepkgBin , os .O_RDONLY | os .O_CREATE , 0o755 )
188
+ require .NoError (t , err )
189
+ require .NoError (t , f .Close ())
190
+
191
+ f , err = os .OpenFile (pacmanBin , os .O_RDONLY | os .O_CREATE , 0o755 )
192
+ require .NoError (t , err )
193
+ require .NoError (t , f .Close ())
194
+
195
+ f , err = os .OpenFile (gitBin , os .O_RDONLY | os .O_CREATE , 0o755 )
196
+ require .NoError (t , err )
197
+ require .NoError (t , f .Close ())
198
+
199
+ tars := []string {
200
+ tmpDir + "/jellyfin-10.8.4-1-x86_64.pkg.tar.zst" ,
201
+ tmpDir + "/jellyfin-web-10.8.4-1-x86_64.pkg.tar.zst" ,
202
+ tmpDir + "/jellyfin-server-10.8.4-1-x86_64.pkg.tar.zst" ,
203
+ }
204
+
205
+ wantShow := []string {
206
+ "makepkg --verifysource --skippgpcheck -f -Cc" ,
207
+ "pacman -S --config /etc/pacman.conf -- community/dotnet-sdk-6.0 community/dotnet-runtime-6.0" ,
208
+ "pacman -D -q --asdeps --config /etc/pacman.conf -- dotnet-runtime-6.0 dotnet-sdk-6.0" ,
209
+ "makepkg --nobuild -f -C --ignorearch" ,
210
+ "makepkg -c --nobuild --noextract --ignorearch" ,
211
+ "makepkg --nobuild -f -C --ignorearch" ,
212
+ "makepkg -c --nobuild --noextract --ignorearch" ,
213
+ }
214
+
215
+ wantCapture := []string {
216
+ "makepkg --packagelist" ,
217
+ "git -C testdata/jfin git reset --hard HEAD" ,
218
+ "git -C testdata/jfin git merge --no-edit --ff" ,
219
+ "makepkg --packagelist" ,
220
+ }
221
+
222
+ captureOverride := func (cmd * exec.Cmd ) (stdout string , stderr string , err error ) {
223
+ return strings .Join (tars , "\n " ), "" , nil
224
+ }
225
+
226
+ once := sync.Once {}
227
+
228
+ showOverride := func (cmd * exec.Cmd ) error {
229
+ once .Do (func () {
230
+ for _ , tar := range tars {
231
+ f , err := os .OpenFile (tar , os .O_RDONLY | os .O_CREATE , 0o666 )
232
+ require .NoError (t , err )
233
+ require .NoError (t , f .Close ())
234
+ }
235
+ })
236
+ return nil
237
+ }
238
+
239
+ mockRunner := & exe.MockRunner {CaptureFn : captureOverride , ShowFn : showOverride }
240
+ cmdBuilder := & exe.CmdBuilder {
241
+ MakepkgBin : makepkgBin ,
242
+ SudoBin : "su" ,
243
+ PacmanBin : pacmanBin ,
244
+ PacmanConfigPath : "/etc/pacman.conf" ,
245
+ GitBin : "git" ,
246
+ Runner : mockRunner ,
247
+ SudoLoopEnabled : false ,
248
+ }
249
+
250
+ cmdArgs := parser .MakeArguments ()
251
+ cmdArgs .AddArg ("B" )
252
+ cmdArgs .AddTarget ("testdata/jfin" )
253
+ settings .NoConfirm = true
254
+ defer func () { settings .NoConfirm = false }()
255
+ db := & mock.DBExecutor {
256
+ AlpmArchitecturesFn : func () ([]string , error ) {
257
+ return []string {"x86_64" }, nil
258
+ },
259
+ LocalSatisfierExistsFn : func (s string ) bool {
260
+ switch s {
261
+ case "dotnet-sdk>=6" , "dotnet-sdk<7" , "dotnet-runtime>=6" , "dotnet-runtime<7" , "jellyfin-server=10.8.4" , "jellyfin-web=10.8.4" :
262
+ return false
263
+ }
264
+
265
+ return true
266
+ },
267
+ SyncSatisfierFn : func (s string ) mock.IPackage {
268
+ switch s {
269
+ case "dotnet-runtime>=6" , "dotnet-runtime<7" :
270
+ return & mock.Package {
271
+ PName : "dotnet-runtime-6.0" ,
272
+ PBase : "dotnet-runtime-6.0" ,
273
+ PVersion : "6.0.100-1" ,
274
+ PDB : mock .NewDB ("community" ),
275
+ }
276
+ case "dotnet-sdk>=6" , "dotnet-sdk<7" :
277
+ return & mock.Package {
278
+ PName : "dotnet-sdk-6.0" ,
279
+ PBase : "dotnet-sdk-6.0" ,
280
+ PVersion : "6.0.100-1" ,
281
+ PDB : mock .NewDB ("community" ),
282
+ }
283
+ }
284
+
285
+ return nil
286
+ },
287
+ LocalPackageFn : func (s string ) mock.IPackage { return nil },
288
+ InstalledRemotePackageNamesFn : func () []string { return []string {} },
289
+ }
290
+
291
+ run := & runtime.Runtime {
292
+ Cfg : & settings.Configuration {
293
+ RemoveMake : "no" ,
294
+ },
295
+ Logger : newTestLogger (),
296
+ CmdBuilder : cmdBuilder ,
297
+ VCSStore : & vcs.Mock {},
298
+ AURClient : & mockaur.MockAUR {
299
+ GetFn : func (ctx context.Context , query * aur.Query ) ([]aur.Pkg , error ) {
300
+ return []aur.Pkg {}, nil
301
+ },
302
+ },
303
+ }
304
+
305
+ err = handleCmd (context .Background (), run , cmdArgs , db )
306
+ require .NoError (t , err )
307
+
308
+ require .Len (t , mockRunner .ShowCalls , len (wantShow ))
309
+ require .Len (t , mockRunner .CaptureCalls , len (wantCapture ))
310
+
311
+ for i , call := range mockRunner .ShowCalls {
312
+ show := call .Args [0 ].(* exec.Cmd ).String ()
313
+ show = strings .ReplaceAll (show , tmpDir , "/testdir" )
314
+ show = strings .ReplaceAll (show , makepkgBin , "makepkg" )
315
+ show = strings .ReplaceAll (show , pacmanBin , "pacman" )
316
+ show = strings .ReplaceAll (show , gitBin , "pacman" )
317
+
318
+ assert .Subset (t , strings .Split (show , " " ), strings .Split (wantShow [i ], " " ), fmt .Sprintf ("%d - %s" , i , show ))
319
+ }
320
+ }
321
+
182
322
func TestIntegrationLocalInstallMissingDep (t * testing.T ) {
183
323
wantErr := ErrPackagesNotFound
184
324
makepkgBin := t .TempDir () + "/makepkg"
0 commit comments