@@ -241,10 +241,12 @@ Method MirrorAll(Directory As %String = {..#Directory}) As %Status
241
241
Return st
242
242
}
243
243
244
- Method MirrorOne (Repo As %String , OwnerFrom As %String , OwnerTo As %String , Org As %String , Directory As %String = {..#Directory}) As %Status
244
+ Method MirrorOne (Repo As %String , OwnerFrom As %String , OwnerTo As %String , Org As %Boolean , Directory As %String = {..#Directory}) As %Status
245
245
{
246
246
Set st = $$$OK
247
247
248
+ Set :$f (Repo ," .git" )=0 Repo = Repo _" .git"
249
+
248
250
Set github = " https://github.com/"
249
251
Set sourceRepo = github _OwnerFrom _" /" _Repo
250
252
Set mirrorRepo = github _OwnerTo _" /" _Repo
@@ -255,7 +257,7 @@ Method MirrorOne(Repo As %String, OwnerFrom As %String, OwnerTo As %String, Org
255
257
Set st1 = ..CreateRepo (Repo , description , $select (Org =0 :" " ,1 :OwnerTo ))
256
258
257
259
w " " _st1 ,!,!," Clone bare repo: " _sourceRepo
258
- Set st2 = .. Clone (sourceRepo , Directory )
260
+ Set st2 = $system . Status . DisplayError (.. Clone (sourceRepo , Directory ) )
259
261
Set st = $$$ADDSC(st1 , st2 )
260
262
261
263
w " " _st ,!,!," Mirroring: " _sourceRepo _" -> " _mirrorRepo
@@ -265,6 +267,9 @@ Method MirrorOne(Repo As %String, OwnerFrom As %String, OwnerTo As %String, Org
265
267
w " " _st ,!,!," Fetch and push... "
266
268
Set st4 = ..FetchAndPush (Directory _Repo )
267
269
Set st = $$$ADDSC(st , st4 )
270
+
271
+ w " " _st ,!,!," Mirror Releases... "
272
+ set st1 = ..MirrorReleases (OwnerFrom , OwnerTo , $p (Repo ," .git" ,1 ))
268
273
269
274
Return st
270
275
}
@@ -287,10 +292,10 @@ Method CreateRepo(Name As %String, Description As %String = "empty", Org As %Str
287
292
Return st
288
293
}
289
294
290
- ClassMethod Clone (Repo As %String , Directory As %String , Parameter As %String = " --mirror" ) As %Status
295
+ ClassMethod Clone (RepoURL As %String , Directory As %String = {..#Directory} , Parameter As %String = " --mirror" ) As %Status
291
296
{
292
297
Do $system .Process .CurrentDirectory (Directory )
293
- Set cmd = " git clone " _ Parameter _" " _ Repo
298
+ Set cmd = " git clone " _ Parameter _" " _ RepoURL
294
299
295
300
Set st = ##class (GitHub.Utils ).execute (cmd )
296
301
@@ -321,21 +326,183 @@ ClassMethod FetchAndPush(Directory As %String) As %Status
321
326
Return $$$ADDSC(st1 , st2 )
322
327
}
323
328
329
+ // do ##class(GitHub.API).UpdateMirrors()
330
+
324
331
ClassMethod UpdateMirrors (Directory As %String = {..#Directory}) As %Status
325
332
{
326
333
Set stream =##class (%Stream.FileCharacter ).%New ()
327
- Set sc =stream .LinkToFile (Directory _" repos.json" )
334
+ Set st =stream .LinkToFile (Directory _" repos.json" )
328
335
Set conf ={}.%FromJSON (stream .Read ($$$MaxCacheInt))
329
336
330
- Set repos = conf .repos
331
337
332
- for i =0 :1 :repos .%Size ()-1
338
+ Set mirrors = conf .mirrors
339
+
340
+ For i =0 :1 :mirrors .%Size ()-1
333
341
{
334
- Set repo = repos .%Get (i )_" .git"
335
- Set sc = ..FetchAndPush (Directory _repo )
342
+ set mirror = mirrors .%Get (i )
343
+ Set repos = mirror .repos
344
+
345
+ For i =0 :1 :repos .%Size ()-1
346
+ {
347
+ Set repo = repos .%Get (i )_" .git"
348
+ Set st1 = ..FetchAndPush (Directory _repo )
349
+ Set st = $$$ADDSC(st , st1 )
350
+ }
351
+ }
352
+ Return st
353
+ }
354
+
355
+ Method MirrorReleases (OwnerFrom As %String , OwnerTo As %String , Repo As %String ) As %Status
356
+ {
357
+ #Dim releases As %DynamicArray
358
+ #Dim release As %DynamicObject
359
+
360
+ Set st = ..GetReleasesList (OwnerFrom , Repo , .releases )
361
+
362
+ For i =1 :1 :releases .Count ()
363
+ {
364
+ Set release = releases .GetAt (i )
365
+
366
+ Set st1 = ..CreateRelease (OwnerTo , Repo , release , .releaseid )
367
+ Set st = $$$ADDSC(st , st1 )
368
+
369
+ Set st1 = ..GetListAssetsForARelease (OwnerFrom , Repo , release .id , .assets )
370
+ Set st = $$$ADDSC(st , st1 )
371
+
372
+ For j =1 :1 :assets .Count ()
373
+ {
374
+ Set asset = assets .GetAt (j )
375
+
376
+ Set st1 = ..DownloadAssetsContent (asset ." browser_download_url" , .stream )
377
+ Set st = $$$ADDSC(st , st1 )
378
+
379
+ Set st1 = ..UploadAsset (OwnerTo , Repo , releaseid , asset , stream )
380
+ Set st = $$$ADDSC(st , st1 )
381
+ }
336
382
}
337
383
338
- Return sc
384
+ Return st
385
+ }
386
+
387
+ Method GetReleasesList (Owner As %String , Repo As %String , Output Releases As %DynamicArray ) As %Status
388
+ {
389
+ Set ..Request .Location = " /repos/" _Owner _" /" _Repo _" /releases"
390
+
391
+ set st = ..Request .Get ()
392
+
393
+ Set st1 = ##class (%ZEN.Auxiliary.jsonProvider ).%ConvertJSONToObject (..Request .HttpResponse .Data ,, .Releases , 1 )
394
+ Set st = $$$ADDSC(st , st1 )
395
+
396
+ Return st
397
+ }
398
+
399
+ Method GetLatestRelease (Owner As %String , Repo As %String , ByRef Release As %DynamicObject ) As %Status
400
+ {
401
+ Set ..Request .Location = " /repos/" _Owner _" /" _Repo _" /releases/latest"
402
+
403
+ set st = ..Request .Get ()
404
+
405
+ Set st1 = ##class (%ZEN.Auxiliary.jsonProvider ).%ConvertJSONToObject (..Request .HttpResponse .Data ,, .Release , 1 )
406
+ Set st = $$$ADDSC(st , st1 )
407
+
408
+ Return st
409
+ }
410
+
411
+ Method CreateRelease (Owner As %String , Repo As %String , Input As %DynamicObject , Output ReleaseID As %Integer ) As %Status
412
+ {
413
+
414
+ Set ..Request .Location = " /repos/" _Owner _" /" _Repo _" /releases"
415
+
416
+ set json = {
417
+ " tag_name" : (Input ." tag_name" ),
418
+ " target_commitish" : (Input ." target_commitish" ),
419
+ " name" : (Input .name ),
420
+ " body" : (Input .body ),
421
+ " draft" : false ,
422
+ " prerelease" : false
423
+ }.%ToJSON ()
424
+
425
+ do ..Request .EntityBody .Write (json )
426
+
427
+ Set st = ..Request .Post ()
428
+
429
+ Set st1 = ##class (%ZEN.Auxiliary.jsonProvider ).%ConvertJSONToObject (..Request .HttpResponse .Data ,, .release , 1 )
430
+ Set st = $$$ADDSC(st , st1 )
431
+
432
+ Set ReleaseID = release .id
433
+
434
+ Return st
435
+ }
436
+
437
+ Method DeleteRelease (Owner As %String , Repo As %String , ReleaseID ) As %Status
438
+ {
439
+ Set ..Request .Location = " /repos/" _Owner _" /" _Repo _" /releases/" _ReleaseID
440
+
441
+ set st = ..Request .Delete (..Request .Location )
442
+
443
+ Set st1 = ##class (%ZEN.Auxiliary.jsonProvider ).%ConvertJSONToObject (..Request .HttpResponse .Data ,, .Release , 1 )
444
+ Set st = $$$ADDSC(st , st1 )
445
+
446
+ Return st
447
+ }
448
+
449
+ Method GetListAssetsForARelease (Owner As %String , Repo As %String , ReleaseId As %Integer , Output Assets As %DynamicArray ) As %Status
450
+ {
451
+ Set ..Request .Location = " /repos/" _Owner _" /" _Repo _" /releases/" _ReleaseId _" /assets"
452
+
453
+ set st = ..Request .Get ()
454
+
455
+ Set st1 = ##class (%ZEN.Auxiliary.jsonProvider ).%ConvertJSONToObject (..Request .HttpResponse .Data ,, .Assets , 1 )
456
+ Set st = $$$ADDSC(st , st1 )
457
+
458
+ Return st
459
+ }
460
+
461
+ Method DownloadAssetsContent (BrowserDownloadURL As %String , Output Assets ) As %Status
462
+ {
463
+ Set ..Request .Server = $p (BrowserDownloadURL , " /" , 3 )
464
+ Set ..Request .Location = $p (BrowserDownloadURL , " /" , 4 ,*)
465
+ set ..Request .FollowRedirect = $$$NO
466
+
467
+ Set st = ..Request .Get ()
468
+
469
+ Set location = ..Request .HttpResponse .GetHeader (" LOCATION" )
470
+
471
+ Set requestAsset = ##class (%Net.HttpRequest ).%New ()
472
+ Set requestAsset .Https = 1
473
+ Set requestAsset .SSLConfiguration = ..#SSLConfig
474
+
475
+ Set st = requestAsset .Get (location )
476
+
477
+ Set Assets = requestAsset .HttpResponse .Data
478
+
479
+ Set ..Request .Server = ..#Server
480
+
481
+ Return st
482
+ }
483
+
484
+ Method UploadAsset (Owner As %String , Repo As %String , ReleaseId As %Integer , Asset As %ZEN .proxyObject , Stream As %AbstractStream ) As %Status
485
+ {
486
+ Set ..Request .Server = " uploads.github.com"
487
+
488
+ Do ..Request .SetParam (" Content-Type" , Asset ." Content-Type" )
489
+ Do ..Request .SetParam (" name" , Asset .name )
490
+ Do ..Request .SetParam (" label" , Asset .label )
491
+
492
+ Set ..Request .Location = " /repos/" _Owner _" /" _Repo _" /releases/" _ReleaseId _" /assets"
493
+
494
+ do ..Request .EntityBody .CopyFrom (Stream )
495
+
496
+ Set st = ..Request .Post ()
497
+
498
+ Set ..Request .Server = ..#Server
499
+
500
+ return st
501
+ }
502
+
503
+ Method test (test )
504
+ {
505
+ zw
339
506
}
340
507
341
508
}
0 commit comments