Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • project/cloud
  • issue/cloud-3181823
  • issue/cloud-3181853
  • issue/cloud-3182150
  • issue/cloud-3182294
  • issue/cloud-3182311
  • issue/cloud-3182346
  • issue/cloud-3180558
  • issue/cloud-3182682
  • issue/cloud-3183409
  • issue/cloud-3183412
  • issue/cloud-3183529
  • issue/cloud-3183619
  • issue/cloud-3183632
  • issue/cloud-3183663
  • issue/cloud-3183934
  • issue/cloud-3184142
  • issue/cloud-3184411
  • issue/cloud-3184659
  • issue/cloud-3184891
  • issue/cloud-3184994
  • issue/cloud-3185464
  • issue/cloud-3185705
  • issue/cloud-3185706
  • issue/cloud-3185708
  • issue/cloud-3185709
  • issue/cloud-3185707
  • issue/cloud-3185710
  • issue/cloud-3185711
  • issue/cloud-3185724
  • issue/cloud-3185731
  • issue/cloud-3185732
  • issue/cloud-3185809
  • issue/cloud-3186025
  • issue/cloud-3185296
  • issue/cloud-3186140
  • issue/cloud-3186241
  • issue/cloud-3186469
  • issue/cloud-3186643
  • issue/cloud-3186692
  • issue/cloud-3186882
  • issue/cloud-3187039
  • issue/cloud-3187149
  • issue/cloud-3187317
  • issue/cloud-3187373
  • issue/cloud-3187387
  • issue/cloud-3187389
  • issue/cloud-3187560
  • issue/cloud-3187586
  • issue/cloud-3187780
  • issue/cloud-3188141
  • issue/cloud-3188198
  • issue/cloud-3188368
  • issue/cloud-3188424
  • issue/cloud-3188595
  • issue/cloud-3188606
  • issue/cloud-3188798
  • issue/cloud-3188820
  • issue/cloud-3188831
  • issue/cloud-3188935
  • issue/cloud-3188976
  • issue/cloud-3188982
  • issue/cloud-3188984
  • issue/cloud-3189446
  • issue/cloud-3189447
  • issue/cloud-3189450
  • issue/cloud-3189456
  • issue/cloud-3189714
  • issue/cloud-3189745
  • issue/cloud-3189755
  • issue/cloud-3189860
  • issue/cloud-3189861
  • issue/cloud-3189868
  • issue/cloud-3189910
  • issue/cloud-3189914
  • issue/cloud-3190078
  • issue/cloud-3189974
  • issue/cloud-3190170
  • issue/cloud-3190182
  • issue/cloud-3190185
  • issue/cloud-3190263
  • issue/cloud-3189975
  • issue/cloud-3189976
  • issue/cloud-3190294
  • issue/cloud-3190348
  • issue/cloud-3190627
  • issue/cloud-3190719
  • issue/cloud-3190809
  • issue/cloud-3191234
  • issue/cloud-3191299
  • issue/cloud-3191582
  • issue/cloud-3191586
  • issue/cloud-3191587
  • issue/cloud-3191639
  • issue/cloud-3191783
  • issue/cloud-3191610
  • issue/cloud-3191523
  • issue/cloud-3192298
  • issue/cloud-3192481
  • issue/cloud-3192847
  • issue/cloud-3192902
  • issue/cloud-3192918
  • issue/cloud-3192940
  • issue/cloud-3192989
  • issue/cloud-3193019
  • issue/cloud-3193083
  • issue/cloud-3193112
  • issue/cloud-3193114
  • issue/cloud-3193424
  • issue/cloud-3193606
  • issue/cloud-3193688
  • issue/cloud-3193748
  • issue/cloud-3193938
  • issue/cloud-3194343
  • issue/cloud-3194623
  • issue/cloud-3194659
  • issue/cloud-3194663
  • issue/cloud-3194823
  • issue/cloud-3194877
  • issue/cloud-3194873
  • issue/cloud-3195307
  • issue/cloud-3195312
  • issue/cloud-3195660
  • issue/cloud-3195671
  • issue/cloud-3195991
  • issue/cloud-3195995
  • issue/cloud-3196419
  • issue/cloud-3191585
  • issue/cloud-3191583
  • issue/cloud-3191581
  • issue/cloud-3197421
  • issue/cloud-3197432
  • issue/cloud-3197433
  • issue/cloud-3191584
  • issue/cloud-3197652
  • issue/cloud-3197868
  • issue/cloud-3197880
  • issue/cloud-3198098
  • issue/cloud-3197653
  • issue/cloud-3198478
  • issue/cloud-3198860
  • issue/cloud-3199050
  • issue/cloud-3199213
  • issue/cloud-3279150
  • issue/cloud-3199243
  • issue/cloud-3199809
  • issue/cloud-3199991
  • issue/cloud-3200044
  • issue/cloud-3200047
  • issue/cloud-3200100
  • issue/cloud-3200118
  • issue/cloud-3200270
  • issue/cloud-3200520
  • issue/cloud-3200740
  • issue/cloud-3200885
  • issue/cloud-3201060
  • issue/cloud-3201071
  • issue/cloud-3201138
  • issue/cloud-3201301
  • issue/cloud-3201330
  • issue/cloud-3201341
  • issue/cloud-3201374
  • issue/cloud-3201967
  • issue/cloud-3202402
  • issue/cloud-3202652
  • issue/cloud-3202669
  • issue/cloud-3202931
  • issue/cloud-3202937
  • issue/cloud-3203121
  • issue/cloud-3203156
  • issue/cloud-3203992
  • issue/cloud-3204653
  • issue/cloud-3204816
  • issue/cloud-3205276
  • issue/cloud-3205683
  • issue/cloud-3205730
  • issue/cloud-3205778
  • issue/cloud-3205789
  • issue/cloud-3205983
  • issue/cloud-3206157
  • issue/cloud-3206273
  • issue/cloud-3279428
  • issue/cloud-3206525
  • issue/cloud-3206532
  • issue/cloud-3279435
  • issue/cloud-3206834
  • issue/cloud-3206856
  • issue/cloud-3207107
  • issue/cloud-3207198
  • issue/cloud-3207333
  • issue/cloud-3207573
  • issue/cloud-3207595
  • issue/cloud-3207758
  • issue/cloud-3207945
  • issue/cloud-3208304
  • issue/cloud-3208670
  • issue/cloud-3208850
  • issue/cloud-3209211
  • issue/cloud-3209446
  • issue/cloud-3209693
  • issue/cloud-3210496
  • issue/cloud-3210638
  • issue/cloud-3210647
  • issue/cloud-3211273
  • issue/cloud-3211567
  • issue/cloud-3212126
  • issue/cloud-3212322
  • issue/cloud-3191576
  • issue/cloud-3212496
  • issue/cloud-3212680
  • issue/cloud-3213095
  • issue/cloud-3213541
  • issue/cloud-3213754
  • issue/cloud-3213753
  • issue/cloud-3213777
  • issue/cloud-3213785
  • issue/cloud-3214270
  • issue/cloud-3210650
  • issue/cloud-3215720
  • issue/cloud-3215747
  • issue/cloud-3215934
  • issue/cloud-3191580
  • issue/cloud-3216872
  • issue/cloud-3217114
  • issue/cloud-3217769
  • issue/cloud-3217980
  • issue/cloud-3217993
  • issue/cloud-3218525
  • issue/cloud-3218529
  • issue/cloud-3218640
  • issue/cloud-3218767
  • issue/cloud-3218796
  • issue/cloud-3186209
  • issue/cloud-3218829
  • issue/cloud-3219063
  • issue/cloud-3219172
  • issue/cloud-3219206
  • issue/cloud-3219225
  • issue/cloud-3195065
  • issue/cloud-3219464
  • issue/cloud-3219501
  • issue/cloud-3219506
  • issue/cloud-3219535
  • issue/cloud-3219600
  • issue/cloud-3219979
  • issue/cloud-3219992
  • issue/cloud-3220242
  • issue/cloud-3220246
  • issue/cloud-3220250
  • issue/cloud-3220258
  • issue/cloud-3220456
  • issue/cloud-3220465
  • issue/cloud-3220511
  • issue/cloud-3220519
  • issue/cloud-3220666
  • issue/cloud-3220987
  • issue/cloud-3221005
  • issue/cloud-3221182
  • issue/cloud-3221053
  • issue/cloud-3221336
  • issue/cloud-3221392
  • issue/cloud-3221401
  • issue/cloud-3221405
  • issue/cloud-3221415
  • issue/cloud-3221623
  • issue/cloud-3222089
  • issue/cloud-3222117
  • issue/cloud-3222352
  • issue/cloud-3222502
  • issue/cloud-3222534
  • issue/cloud-3222665
  • issue/cloud-3222703
  • issue/cloud-3222893
  • issue/cloud-3222920
  • issue/cloud-3223092
  • issue/cloud-3223339
  • issue/cloud-3223508
  • issue/cloud-3223525
  • issue/cloud-3223696
  • issue/cloud-3223740
  • issue/cloud-3223850
  • issue/cloud-3223924
  • issue/cloud-3224075
  • issue/cloud-3224080
  • issue/cloud-3224081
  • issue/cloud-3224172
  • issue/cloud-3224418
  • issue/cloud-3224987
  • issue/cloud-3225006
  • issue/cloud-3225023
  • issue/cloud-3225298
  • issue/cloud-3225312
  • issue/cloud-3225597
  • issue/cloud-3225614
  • issue/cloud-3225644
  • issue/cloud-3226097
  • issue/cloud-3226130
  • issue/cloud-3226574
  • issue/cloud-3226727
  • issue/cloud-3226828
  • issue/cloud-3226854
  • issue/cloud-3226882
  • issue/cloud-3225815
  • issue/cloud-3227078
  • issue/cloud-3227081
  • issue/cloud-3227251
  • issue/cloud-3227307
  • issue/cloud-3227311
  • issue/cloud-3227408
  • issue/cloud-3227485
  • issue/cloud-3227828
  • issue/cloud-3227846
  • issue/cloud-3227852
  • issue/cloud-3228270
  • issue/cloud-3228276
  • issue/cloud-3228400
  • issue/cloud-3228579
  • issue/cloud-3228624
  • issue/cloud-3228663
  • issue/cloud-3228688
  • issue/cloud-3225218
  • issue/cloud-3229021
  • issue/cloud-3228432
  • issue/cloud-3229041
  • issue/cloud-3229047
  • issue/cloud-3229497
  • issue/cloud-3229710
  • issue/cloud-3229718
  • issue/cloud-3229938
  • issue/cloud-3230015
  • issue/cloud-3230748
  • issue/cloud-3230776
  • issue/cloud-3230796
  • issue/cloud-3230931
  • issue/cloud-3230948
  • issue/cloud-3230958
  • issue/cloud-3225219
  • issue/cloud-3231401
  • issue/cloud-3231490
  • issue/cloud-3231513
  • issue/cloud-3231856
  • issue/cloud-3231860
  • issue/cloud-3231862
  • issue/cloud-3231867
  • issue/cloud-3231898
  • issue/cloud-3225220
  • issue/cloud-3232055
  • issue/cloud-3232196
  • issue/cloud-3225272
  • issue/cloud-3225292
  • issue/cloud-3225417
  • issue/cloud-3225420
  • issue/cloud-3232747
  • issue/cloud-3232760
  • issue/cloud-3232794
  • issue/cloud-3232806
  • issue/cloud-3232932
  • issue/cloud-3232934
  • issue/cloud-3232936
  • issue/cloud-3232983
  • issue/cloud-3232992
  • issue/cloud-3233416
  • issue/cloud-3233607
  • issue/cloud-3236202
  • issue/cloud-3236419
  • issue/cloud-3236437
  • issue/cloud-3238196
  • issue/cloud-3238383
  • issue/cloud-3238409
  • issue/cloud-3238663
  • issue/cloud-3238813
  • issue/cloud-3238827
  • issue/cloud-3238842
  • issue/cloud-3238910
  • issue/cloud-3238990
  • issue/cloud-3239091
  • issue/cloud-3239248
  • issue/cloud-3239560
  • issue/cloud-3239696
  • issue/cloud-3279431
  • issue/cloud-3279805
  • issue/cloud-3279924
  • issue/cloud-3279985
  • issue/cloud-3280030
  • issue/cloud-3280044
  • issue/cloud-3278818
  • issue/cloud-3280788
  • issue/cloud-3281010
  • issue/cloud-3281025
  • issue/cloud-3281266
  • issue/cloud-3281510
  • issue/cloud-3281678
  • issue/cloud-3281723
  • issue/cloud-3282020
  • issue/cloud-3282196
  • issue/cloud-3282213
  • issue/cloud-3282373
  • issue/cloud-3282584
  • issue/cloud-3283475
  • issue/cloud-3279437
  • issue/cloud-3279601
  • issue/cloud-3279810
  • issue/cloud-3279989
  • issue/cloud-3280232
  • issue/cloud-3280281
  • issue/cloud-3280792
  • issue/cloud-3282379
  • issue/cloud-3282574
  • issue/cloud-3283282
  • issue/cloud-3283536
  • issue/cloud-3283729
  • issue/cloud-3283918
  • issue/cloud-3278819
  • issue/cloud-3279450
  • issue/cloud-3279647
  • issue/cloud-3279833
  • issue/cloud-3280042
  • issue/cloud-3280264
  • issue/cloud-3280280
  • issue/cloud-3280793
  • issue/cloud-3280993
  • issue/cloud-3281231
  • issue/cloud-3281272
  • issue/cloud-3282029
  • issue/cloud-3282167
  • issue/cloud-3282576
  • issue/cloud-3281259
  • issue/cloud-3283263
  • issue/cloud-3283539
  • issue/cloud-3283702
  • issue/cloud-3283743
  • issue/cloud-3283947
  • issue/cloud-3279562
  • issue/cloud-3279817
  • issue/cloud-3279835
  • issue/cloud-3280064
  • issue/cloud-3280639
  • issue/cloud-3280995
  • issue/cloud-3282386
  • issue/cloud-3282577
  • issue/cloud-3283290
  • issue/cloud-3283508
  • issue/cloud-3283736
  • issue/cloud-3278822
  • issue/cloud-3279617
  • issue/cloud-3279875
  • issue/cloud-3280272
  • issue/cloud-3281022
  • issue/cloud-3281027
  • issue/cloud-3281288
  • issue/cloud-3282018
  • issue/cloud-3282038
  • issue/cloud-3282193
  • issue/cloud-3282371
  • issue/cloud-3283512
  • issue/cloud-3279547
  • issue/cloud-3280273
  • issue/cloud-3281204
  • issue/cloud-3281287
  • issue/cloud-3281533
  • issue/cloud-3281673
  • issue/cloud-3281687
  • issue/cloud-3282372
  • issue/cloud-3283497
  • issue/cloud-3283635
  • issue/cloud-3283856
  • issue/cloud-3239811
  • issue/cloud-3239900
  • issue/cloud-3239946
  • issue/cloud-3240101
  • issue/cloud-3240218
  • issue/cloud-3240371
  • issue/cloud-3240440
  • issue/cloud-3240519
  • issue/cloud-3240524
  • issue/cloud-3240525
  • issue/cloud-3240421
  • issue/cloud-3240531
  • issue/cloud-3240540
  • issue/cloud-3240619
  • issue/cloud-3240658
  • issue/cloud-3240707
  • issue/cloud-3240722
  • issue/cloud-3240733
  • issue/cloud-3240740
  • issue/cloud-3240961
  • issue/cloud-3240976
  • issue/cloud-3240437
  • issue/cloud-3241241
  • issue/cloud-3241456
  • issue/cloud-3242641
  • issue/cloud-3241224
  • issue/cloud-3243034
  • issue/cloud-3243160
  • issue/cloud-3241453
  • issue/cloud-3240423
  • issue/cloud-3243282
  • issue/cloud-3243685
  • issue/cloud-3243843
  • issue/cloud-3243941
  • issue/cloud-3243975
  • issue/cloud-3244088
  • issue/cloud-3244327
  • issue/cloud-3244469
  • issue/cloud-3244513
  • issue/cloud-3244320
  • issue/cloud-3244753
  • issue/cloud-3244775
  • issue/cloud-3244801
  • issue/cloud-3244808
  • issue/cloud-3244814
  • issue/cloud-3245014
  • issue/cloud-3245015
  • issue/cloud-3245071
  • issue/cloud-3245251
  • issue/cloud-3245494
  • issue/cloud-3245650
  • issue/cloud-3245686
  • issue/cloud-3245859
  • issue/cloud-3245877
  • issue/cloud-3245881
  • issue/cloud-3246008
  • issue/cloud-3246044
  • issue/cloud-3246123
  • issue/cloud-3246271
  • issue/cloud-3246286
  • issue/cloud-3246330
  • issue/cloud-3246346
  • issue/cloud-3246352
  • issue/cloud-3246522
  • issue/cloud-3246489
  • issue/cloud-3246549
  • issue/cloud-3225216
  • issue/cloud-3246856
  • issue/cloud-3247063
  • issue/cloud-3247118
  • issue/cloud-3247207
  • issue/cloud-3247232
  • issue/cloud-3247707
  • issue/cloud-3279586
  • issue/cloud-3247826
  • issue/cloud-3247956
  • issue/cloud-3248118
  • issue/cloud-3248362
  • issue/cloud-3248389
  • issue/cloud-3248461
  • issue/cloud-3248545
  • issue/cloud-3248614
  • issue/cloud-3248632
  • issue/cloud-3248826
  • issue/cloud-3248996
  • issue/cloud-3249060
  • issue/cloud-3249313
  • issue/cloud-3249328
  • issue/cloud-3249409
  • issue/cloud-3249488
  • issue/cloud-3249604
  • issue/cloud-3249829
  • issue/cloud-3278867
  • issue/cloud-3250390
  • issue/cloud-3250573
  • issue/cloud-3250579
  • issue/cloud-3250584
  • issue/cloud-3250959
  • issue/cloud-3251179
  • issue/cloud-3251529
  • issue/cloud-3251604
  • issue/cloud-3251738
  • issue/cloud-3251782
  • issue/cloud-3251787
  • issue/cloud-3251803
  • issue/cloud-3252005
  • issue/cloud-3252127
  • issue/cloud-3252183
  • issue/cloud-3252334
  • issue/cloud-3252381
  • issue/cloud-3252556
  • issue/cloud-3252652
  • issue/cloud-3252711
  • issue/cloud-3252913
  • issue/cloud-3252922
  • issue/cloud-3252947
  • issue/cloud-3253122
  • issue/cloud-3253229
  • issue/cloud-3253431
  • issue/cloud-3253446
  • issue/cloud-3253737
  • issue/cloud-3254065
  • issue/cloud-3254096
  • issue/cloud-3254264
  • issue/cloud-3254275
  • issue/cloud-3253930
  • issue/cloud-3254463
  • issue/cloud-3254470
  • issue/cloud-3254475
  • issue/cloud-3254672
  • issue/cloud-3254719
  • issue/cloud-3254865
  • issue/cloud-3254876
  • issue/cloud-3255212
  • issue/cloud-3255214
  • issue/cloud-3255361
  • issue/cloud-3255413
  • issue/cloud-3255553
  • issue/cloud-3255554
  • issue/cloud-3255583
  • issue/cloud-3255588
  • issue/cloud-3255858
  • issue/cloud-3255910
  • issue/cloud-3255987
  • issue/cloud-3256026
  • issue/cloud-3256994
  • issue/cloud-3257126
  • issue/cloud-3257355
  • issue/cloud-3257368
  • issue/cloud-3257912
  • issue/cloud-3258040
  • issue/cloud-3258115
  • issue/cloud-3258116
  • issue/cloud-3258154
  • issue/cloud-3258302
  • issue/cloud-3258311
  • issue/cloud-3258508
  • issue/cloud-3258845
  • issue/cloud-3258891
  • issue/cloud-3259045
  • issue/cloud-3259282
  • issue/cloud-3259494
  • issue/cloud-3259688
  • issue/cloud-3260053
  • issue/cloud-3260069
  • issue/cloud-3260255
  • issue/cloud-3260256
  • issue/cloud-3260285
  • issue/cloud-3260518
  • issue/cloud-3260523
  • issue/cloud-3260524
  • issue/cloud-3260747
  • issue/cloud-3260978
  • issue/cloud-3261006
  • issue/cloud-3261010
  • issue/cloud-3261175
  • issue/cloud-3261470
  • issue/cloud-3261648
  • issue/cloud-3261694
  • issue/cloud-3262075
  • issue/cloud-3262130
  • issue/cloud-3262131
  • issue/cloud-3262412
  • issue/cloud-3262416
  • issue/cloud-3262571
  • issue/cloud-3262574
  • issue/cloud-3262625
  • issue/cloud-3262802
  • issue/cloud-3262806
  • issue/cloud-3262829
  • issue/cloud-3263015
  • issue/cloud-3263099
  • issue/cloud-3263209
  • issue/cloud-3263292
  • issue/cloud-3263309
  • issue/cloud-3263327
  • issue/cloud-3263486
  • issue/cloud-3263543
  • issue/cloud-3263633
  • issue/cloud-3263739
  • issue/cloud-3263737
  • issue/cloud-3263954
  • issue/cloud-3264010
  • issue/cloud-3264095
  • issue/cloud-3264189
  • issue/cloud-3264224
  • issue/cloud-3264410
  • issue/cloud-3264457
  • issue/cloud-3264602
  • issue/cloud-3264618
  • issue/cloud-3264872
  • issue/cloud-3264898
  • issue/cloud-3265132
  • issue/cloud-3265149
  • issue/cloud-3265154
  • issue/cloud-3265544
  • issue/cloud-3265548
  • issue/cloud-3265561
  • issue/cloud-3265571
  • issue/cloud-3265587
  • issue/cloud-3265796
  • issue/cloud-3265817
  • issue/cloud-3265970
  • issue/cloud-3266025
  • issue/cloud-3266033
  • issue/cloud-3266054
  • issue/cloud-3266178
  • issue/cloud-3266233
  • issue/cloud-3266234
  • issue/cloud-3266237
  • issue/cloud-3266374
  • issue/cloud-3266446
  • issue/cloud-3266542
  • issue/cloud-3266679
  • issue/cloud-3266832
  • issue/cloud-3266848
  • issue/cloud-3266876
  • issue/cloud-3266865
  • issue/cloud-3267036
  • issue/cloud-3267275
  • issue/cloud-3267487
  • issue/cloud-3267642
  • issue/cloud-3267692
  • issue/cloud-3267695
  • issue/cloud-3267702
  • issue/cloud-3267693
  • issue/cloud-3267722
  • issue/cloud-3267726
  • issue/cloud-3267750
  • issue/cloud-3267873
  • issue/cloud-3267881
  • issue/cloud-3267883
  • issue/cloud-3267885
  • issue/cloud-3267888
  • issue/cloud-3267906
  • issue/cloud-3267960
  • issue/cloud-3268416
  • issue/cloud-3268507
  • issue/cloud-3268546
  • issue/cloud-3268479
  • issue/cloud-3268797
  • issue/cloud-3268806
  • issue/cloud-3268811
  • issue/cloud-3268968
  • issue/cloud-3268973
  • issue/cloud-3268673
  • issue/cloud-3269021
  • issue/cloud-3269054
  • issue/cloud-3269057
  • issue/cloud-3269155
  • issue/cloud-3269344
  • issue/cloud-3269366
  • issue/cloud-3269368
  • issue/cloud-3269370
  • issue/cloud-3269374
  • issue/cloud-3269377
  • issue/cloud-3269500
  • issue/cloud-3269602
  • issue/cloud-3269708
  • issue/cloud-3269781
  • issue/cloud-3269788
  • issue/cloud-3269811
  • issue/cloud-3269815
  • issue/cloud-3269993
  • issue/cloud-3270023
  • issue/cloud-3270036
  • issue/cloud-3270066
  • issue/cloud-3270163
  • issue/cloud-3270207
  • issue/cloud-3270265
  • issue/cloud-3270268
  • issue/cloud-3270280
  • issue/cloud-3270282
  • issue/cloud-3270269
  • issue/cloud-3270658
  • issue/cloud-3269930
  • issue/cloud-3271058
  • issue/cloud-3271141
  • issue/cloud-3271151
  • issue/cloud-3271155
  • issue/cloud-3271157
  • issue/cloud-3271348
  • issue/cloud-3271363
  • issue/cloud-3271364
  • issue/cloud-3271376
  • issue/cloud-3271378
  • issue/cloud-3271560
  • issue/cloud-3271565
  • issue/cloud-3271599
  • issue/cloud-3271600
  • issue/cloud-3271750
  • issue/cloud-3271949
  • issue/cloud-3271743
  • issue/cloud-3272138
  • issue/cloud-3272183
  • issue/cloud-3272190
  • issue/cloud-3272375
  • issue/cloud-3272416
  • issue/cloud-3272419
  • issue/cloud-3272544
  • issue/cloud-3272557
  • issue/cloud-3272624
  • issue/cloud-3272661
  • issue/cloud-3272897
  • issue/cloud-3273053
  • issue/cloud-3273058
  • issue/cloud-3273073
  • issue/cloud-3273084
  • issue/cloud-3271742
  • issue/cloud-3273413
  • issue/cloud-3273418
  • issue/cloud-3273615
  • issue/cloud-3273629
  • issue/cloud-3273643
  • issue/cloud-3273644
  • issue/cloud-3273748
  • issue/cloud-3273905
  • issue/cloud-3273889
  • issue/cloud-3273962
  • issue/cloud-3274078
  • issue/cloud-3274109
  • issue/cloud-3274116
  • issue/cloud-3274157
  • issue/cloud-3274196
  • issue/cloud-3274216
  • issue/cloud-3274374
  • issue/cloud-3274382
  • issue/cloud-3274386
  • issue/cloud-3274512
  • issue/cloud-3274523
  • issue/cloud-3274702
  • issue/cloud-3274946
  • issue/cloud-3274955
  • issue/cloud-3274982
  • issue/cloud-3275209
  • issue/cloud-3275355
  • issue/cloud-3275379
  • issue/cloud-3275389
  • issue/cloud-3275170
  • issue/cloud-3275690
  • issue/cloud-3275736
  • issue/cloud-3275840
  • issue/cloud-3275841
  • issue/cloud-3275892
  • issue/cloud-3275988
  • issue/cloud-3275521
  • issue/cloud-3276136
  • issue/cloud-3276138
  • issue/cloud-3276175
  • issue/cloud-3276185
  • issue/cloud-3276321
  • issue/cloud-3276323
  • issue/cloud-3276353
  • issue/cloud-3276369
  • issue/cloud-3276410
  • issue/cloud-3276570
  • issue/cloud-3276704
  • issue/cloud-3276714
  • issue/cloud-3276788
  • issue/cloud-3276897
  • issue/cloud-3276908
  • issue/cloud-3277300
  • issue/cloud-3277750
  • issue/cloud-3277765
  • issue/cloud-3277797
  • issue/cloud-3278037
  • issue/cloud-3278112
  • issue/cloud-3278113
  • issue/cloud-3278248
  • issue/cloud-3278308
  • issue/cloud-3278479
  • issue/cloud-3278023
  • issue/cloud-3280027
  • issue/cloud-3280787
  • issue/cloud-3281004
  • issue/cloud-3281282
  • issue/cloud-3281298
  • issue/cloud-3283959
  • issue/cloud-3284108
  • issue/cloud-3284224
  • issue/cloud-3284251
  • issue/cloud-3284360
  • issue/cloud-3284361
  • issue/cloud-3284363
  • issue/cloud-3284365
  • issue/cloud-3284370
  • issue/cloud-3284388
  • issue/cloud-3284466
  • issue/cloud-3284576
  • issue/cloud-3284565
  • issue/cloud-3284578
  • issue/cloud-3284587
  • issue/cloud-3284602
  • issue/cloud-3284606
  • issue/cloud-3284714
  • issue/cloud-3284774
  • issue/cloud-3284776
  • issue/cloud-3284782
  • issue/cloud-3285053
  • issue/cloud-3284947
  • issue/cloud-3285332
  • issue/cloud-3285338
  • issue/cloud-3285367
  • issue/cloud-3285519
  • issue/cloud-3285526
  • issue/cloud-3285536
  • issue/cloud-3285538
  • issue/cloud-3285539
  • issue/cloud-3285555
  • issue/cloud-3285693
  • issue/cloud-3285702
  • issue/cloud-3285478
  • issue/cloud-3285743
  • issue/cloud-3285749
  • issue/cloud-3285764
  • issue/cloud-3285770
  • issue/cloud-3285849
  • issue/cloud-3288063
  • issue/cloud-3285730
  • issue/cloud-3290773
  • issue/cloud-3290788
  • issue/cloud-3290795
  • issue/cloud-3290820
  • issue/cloud-3290984
  • issue/cloud-3290987
  • issue/cloud-3291000
  • issue/cloud-3291013
  • issue/cloud-3291081
  • issue/cloud-3291001
  • issue/cloud-3291234
  • issue/cloud-3291241
  • issue/cloud-3291253
  • issue/cloud-3291386
  • issue/cloud-3291389
  • issue/cloud-3291392
  • issue/cloud-3291395
  • issue/cloud-3291396
  • issue/cloud-3291595
  • issue/cloud-3291597
  • issue/cloud-3291605
  • issue/cloud-3291627
  • issue/cloud-3291661
  • issue/cloud-3291742
  • issue/cloud-3291766
  • issue/cloud-3291850
  • issue/cloud-3291858
  • issue/cloud-3291878
  • issue/cloud-3399374
  • issue/cloud-3292036
  • issue/cloud-3292089
  • issue/cloud-3292090
  • issue/cloud-3292096
  • issue/cloud-3292100
  • issue/cloud-3292101
  • issue/cloud-3292105
  • issue/cloud-3292111
  • issue/cloud-3292141
  • issue/cloud-3292142
  • issue/cloud-3292363
  • issue/cloud-3292372
  • issue/cloud-3292417
  • issue/cloud-3292330
  • issue/cloud-3292575
  • issue/cloud-3292582
  • issue/cloud-3292679
  • issue/cloud-3292685
  • issue/cloud-3292544
  • issue/cloud-3292767
  • issue/cloud-3292771
  • issue/cloud-3292791
  • issue/cloud-3292794
  • issue/cloud-3292812
  • issue/cloud-3292977
  • issue/cloud-3292981
  • issue/cloud-3292989
  • issue/cloud-3293000
  • issue/cloud-3293208
  • issue/cloud-3293211
  • issue/cloud-3293219
  • issue/cloud-3293224
  • issue/cloud-3293234
  • issue/cloud-3293244
  • issue/cloud-3293419
  • issue/cloud-3293207
  • issue/cloud-3293499
  • issue/cloud-3293505
  • issue/cloud-3293701
  • issue/cloud-3293736
  • issue/cloud-3293846
  • issue/cloud-3293949
  • issue/cloud-3294027
  • issue/cloud-3294030
  • issue/cloud-3294185
  • issue/cloud-3294189
  • issue/cloud-3294201
  • issue/cloud-3294227
  • issue/cloud-3294424
  • issue/cloud-3294427
  • issue/cloud-3294451
  • issue/cloud-3294631
  • issue/cloud-3294644
  • issue/cloud-3294865
  • issue/cloud-3294886
  • issue/cloud-3295011
  • issue/cloud-3295067
  • issue/cloud-3295095
  • issue/cloud-3295125
  • issue/cloud-3295194
  • issue/cloud-3295196
  • issue/cloud-3295237
  • issue/cloud-3295251
  • issue/cloud-3295254
  • issue/cloud-3295418
  • issue/cloud-3295646
  • issue/cloud-3295669
  • issue/cloud-3295673
  • issue/cloud-3295695
  • issue/cloud-3295873
  • issue/cloud-3296392
  • issue/cloud-3298293
  • issue/cloud-3296083
  • issue/cloud-3303765
  • issue/cloud-3303941
  • issue/cloud-3304247
  • issue/cloud-3304374
  • issue/cloud-3304580
  • issue/cloud-3305386
  • issue/cloud-3305476
  • issue/cloud-3305606
  • issue/cloud-3298542
  • issue/cloud-3298732
  • issue/cloud-3299211
  • issue/cloud-3299866
  • issue/cloud-3298957
  • issue/cloud-3300356
  • issue/cloud-3300110
  • issue/cloud-3300392
  • issue/cloud-3303800
  • issue/cloud-3303812
  • issue/cloud-3304166
  • issue/cloud-3304547
  • issue/cloud-3304644
  • issue/cloud-3300947
  • issue/cloud-3301042
  • issue/cloud-3301207
  • issue/cloud-3301951
  • issue/cloud-3301955
  • issue/cloud-3302049
  • issue/cloud-3302260
  • issue/cloud-3302747
  • issue/cloud-3302977
  • issue/cloud-3303222
  • issue/cloud-3303229
  • issue/cloud-3303236
  • issue/cloud-3303390
  • issue/cloud-3303428
  • issue/cloud-3303635
  • issue/cloud-3304212
  • issue/cloud-3304632
  • issue/cloud-3301956
  • issue/cloud-3304894
  • issue/cloud-3305398
  • issue/cloud-3306033
  • issue/cloud-3305650
  • issue/cloud-3306114
  • issue/cloud-3306116
  • issue/cloud-3310203
  • issue/cloud-3310210
  • issue/cloud-3310262
  • issue/cloud-3310457
  • issue/cloud-3310560
  • issue/cloud-3310642
  • issue/cloud-3310995
  • issue/cloud-3311042
  • issue/cloud-3309974
  • issue/cloud-3306321
  • issue/cloud-3306357
  • issue/cloud-3306359
  • issue/cloud-3306380
  • issue/cloud-3306643
  • issue/cloud-3306689
  • issue/cloud-3306521
  • issue/cloud-3306702
  • issue/cloud-3306754
  • issue/cloud-3306966
  • issue/cloud-3306981
  • issue/cloud-3306987
  • issue/cloud-3306988
  • issue/cloud-3307021
  • issue/cloud-3306990
  • issue/cloud-3307162
  • issue/cloud-3306991
  • issue/cloud-3307215
  • issue/cloud-3307239
  • issue/cloud-3307396
  • issue/cloud-3307397
  • issue/cloud-3307437
  • issue/cloud-3306992
  • issue/cloud-3307456
  • issue/cloud-3307462
  • issue/cloud-3307499
  • issue/cloud-3307668
  • issue/cloud-3307678
  • issue/cloud-3307733
  • issue/cloud-3307925
  • issue/cloud-3307933
  • issue/cloud-3308070
  • issue/cloud-3308279
  • issue/cloud-3308275
  • issue/cloud-3308490
  • issue/cloud-3308495
  • issue/cloud-3308496
  • issue/cloud-3308655
  • issue/cloud-3308676
  • issue/cloud-3308695
  • issue/cloud-3308708
  • issue/cloud-3308717
  • issue/cloud-3308270
  • issue/cloud-3308812
  • issue/cloud-3308934
  • issue/cloud-3308967
  • issue/cloud-3308974
  • issue/cloud-3308999
  • issue/cloud-3309150
  • issue/cloud-3309165
  • issue/cloud-3309286
  • issue/cloud-3309124
  • issue/cloud-3309333
  • issue/cloud-3309357
  • issue/cloud-3309517
  • issue/cloud-3309540
  • issue/cloud-3309587
  • issue/cloud-3309705
  • issue/cloud-3309758
  • issue/cloud-3309787
  • issue/cloud-3309788
  • issue/cloud-3309878
  • issue/cloud-3309971
  • issue/cloud-3309981
  • issue/cloud-3310024
  • issue/cloud-3310263
  • issue/cloud-3310707
  • issue/cloud-3310768
  • issue/cloud-3309596
  • issue/cloud-3311026
  • issue/cloud-3311463
  • issue/cloud-3311664
  • issue/cloud-3311665
  • issue/cloud-3311766
  • issue/cloud-3311779
  • issue/cloud-3311935
  • issue/cloud-3311268
  • issue/cloud-3312203
  • issue/cloud-3312218
  • issue/cloud-3312215
  • issue/cloud-3312472
  • issue/cloud-3311750
  • issue/cloud-3312576
  • issue/cloud-3312622
  • issue/cloud-3312708
  • issue/cloud-3312766
  • issue/cloud-3312549
  • issue/cloud-3312780
  • issue/cloud-3311749
  • issue/cloud-3312838
  • issue/cloud-3312996
  • issue/cloud-3313318
  • issue/cloud-3313353
  • issue/cloud-3317433
  • issue/cloud-3317489
  • issue/cloud-3317731
  • issue/cloud-3317919
  • issue/cloud-3318174
  • issue/cloud-3318236
  • issue/cloud-3317924
  • issue/cloud-3313550
  • issue/cloud-3313552
  • issue/cloud-3313770
  • issue/cloud-3313779
  • issue/cloud-3313812
  • issue/cloud-3313999
  • issue/cloud-3314252
  • issue/cloud-3314398
  • issue/cloud-3317496
  • issue/cloud-3317494
  • issue/cloud-3314603
  • issue/cloud-3314652
  • issue/cloud-3314804
  • issue/cloud-3314812
  • issue/cloud-3314400
  • issue/cloud-3314844
  • issue/cloud-3315043
  • issue/cloud-3315268
  • issue/cloud-3315586
  • issue/cloud-3315797
  • issue/cloud-3315878
  • issue/cloud-3316407
  • issue/cloud-3316471
  • issue/cloud-3316494
  • issue/cloud-3316681
  • issue/cloud-3317116
  • issue/cloud-3317301
  • issue/cloud-3318439
  • issue/cloud-3318463
  • issue/cloud-3318898
  • issue/cloud-3318641
  • issue/cloud-3325922
  • issue/cloud-3319229
  • issue/cloud-3319231
  • issue/cloud-3327455
  • issue/cloud-3327525
  • issue/cloud-3325925
  • issue/cloud-3326094
  • issue/cloud-3319611
  • issue/cloud-3326730
  • issue/cloud-3327023
  • issue/cloud-3327303
  • issue/cloud-3327527
  • issue/cloud-3327959
  • issue/cloud-3320297
  • issue/cloud-3326151
  • issue/cloud-3320385
  • issue/cloud-3320601
  • issue/cloud-3320310
  • issue/cloud-3320609
  • issue/cloud-3320654
  • issue/cloud-3320663
  • issue/cloud-3326999
  • issue/cloud-3327965
  • issue/cloud-3328378
  • issue/cloud-3329613
  • issue/cloud-3329614
  • issue/cloud-3329626
  • issue/cloud-3325459
  • issue/cloud-3325485
  • issue/cloud-3326711
  • issue/cloud-3326759
  • issue/cloud-3327068
  • issue/cloud-3327318
  • issue/cloud-3327495
  • issue/cloud-3327545
  • issue/cloud-3327733
  • issue/cloud-3328717
  • issue/cloud-3320860
  • issue/cloud-3320868
  • issue/cloud-3320301
  • issue/cloud-3320915
  • issue/cloud-3320944
  • issue/cloud-3320945
  • issue/cloud-3321029
  • issue/cloud-3321067
  • issue/cloud-3325489
  • issue/cloud-3326481
  • issue/cloud-3326682
  • issue/cloud-3326722
  • issue/cloud-3327003
  • issue/cloud-3327036
  • issue/cloud-3328728
  • issue/cloud-3328928
  • issue/cloud-3329000
  • issue/cloud-3321709
  • issue/cloud-3321712
  • issue/cloud-3321322
  • issue/cloud-3322010
  • issue/cloud-3322021
  • issue/cloud-3322024
  • issue/cloud-3325391
  • issue/cloud-3325462
  • issue/cloud-3327042
  • issue/cloud-3327092
  • issue/cloud-3327228
  • issue/cloud-3328138
  • issue/cloud-3328509
  • issue/cloud-3328964
  • issue/cloud-3322344
  • issue/cloud-3322368
  • issue/cloud-3322385
  • issue/cloud-3322638
  • issue/cloud-3322725
  • issue/cloud-3322833
  • issue/cloud-3322836
  • issue/cloud-3323031
  • issue/cloud-3319538
  • issue/cloud-3323489
  • issue/cloud-3323495
  • issue/cloud-3323705
  • issue/cloud-3323738
  • issue/cloud-3323864
  • issue/cloud-3323928
  • issue/cloud-3323929
  • issue/cloud-3324001
  • issue/cloud-3324002
  • issue/cloud-3324004
  • issue/cloud-3324005
  • issue/cloud-3324023
  • issue/cloud-3323516
  • issue/cloud-3322870
  • issue/cloud-3324489
  • issue/cloud-3324666
  • issue/cloud-3324707
  • issue/cloud-3324719
  • issue/cloud-3324821
  • issue/cloud-3324864
  • issue/cloud-3324903
  • issue/cloud-3324906
  • issue/cloud-3324924
  • issue/cloud-3325053
  • issue/cloud-3325239
  • issue/cloud-3324908
  • issue/cloud-3325245
  • issue/cloud-3325264
  • issue/cloud-3325269
  • issue/cloud-3325936
  • issue/cloud-3329673
  • issue/cloud-3329897
  • issue/cloud-3329909
  • issue/cloud-3329927
  • issue/cloud-3328760
  • issue/cloud-3329988
  • issue/cloud-3331383
  • issue/cloud-3331442
  • issue/cloud-3331666
  • issue/cloud-3332069
  • issue/cloud-3332132
  • issue/cloud-3332171
  • issue/cloud-3332242
  • issue/cloud-3332373
  • issue/cloud-3332492
  • issue/cloud-3332620
  • issue/cloud-3332862
  • issue/cloud-3333124
  • issue/cloud-3333520
  • issue/cloud-3333526
  • issue/cloud-3333674
  • issue/cloud-3327817
  • issue/cloud-3333686
  • issue/cloud-3332491
  • issue/cloud-3334130
  • issue/cloud-3345121
  • issue/cloud-3334371
  • issue/cloud-3343041
  • issue/cloud-3334693
  • issue/cloud-3335024
  • issue/cloud-3335029
  • issue/cloud-3335061
  • issue/cloud-3335087
  • issue/cloud-3342932
  • issue/cloud-3344161
  • issue/cloud-3341767
  • issue/cloud-3345098
  • issue/cloud-3345130
  • issue/cloud-3350756
  • issue/cloud-3335392
  • issue/cloud-3335148
  • issue/cloud-3335656
  • issue/cloud-3335692
  • issue/cloud-3335976
  • issue/cloud-3335023
  • issue/cloud-3336208
  • issue/cloud-3336316
  • issue/cloud-3336577
  • issue/cloud-3336021
  • issue/cloud-3336803
  • issue/cloud-3337420
  • issue/cloud-3337751
  • issue/cloud-3337755
  • issue/cloud-3341768
  • issue/cloud-3345671
  • issue/cloud-3337802
  • issue/cloud-3338098
  • issue/cloud-3338102
  • issue/cloud-3344162
  • issue/cloud-3344856
  • issue/cloud-3344882
  • issue/cloud-3345783
  • issue/cloud-3338419
  • issue/cloud-3338437
  • issue/cloud-3338444
  • issue/cloud-3338794
  • issue/cloud-3339470
  • issue/cloud-3343034
  • issue/cloud-3343350
  • issue/cloud-3343582
  • issue/cloud-3345631
  • issue/cloud-3339774
  • issue/cloud-3339828
  • issue/cloud-3339860
  • issue/cloud-3340098
  • issue/cloud-3340135
  • issue/cloud-3340157
  • issue/cloud-3340431
  • issue/cloud-3340440
  • issue/cloud-3340454
  • issue/cloud-3340720
  • issue/cloud-3340731
  • issue/cloud-3340733
  • issue/cloud-3340739
  • issue/cloud-3340764
  • issue/cloud-3340875
  • issue/cloud-3341036
  • issue/cloud-3341158
  • issue/cloud-3341166
  • issue/cloud-3341225
  • issue/cloud-3341272
  • issue/cloud-3341453
  • issue/cloud-3341310
  • issue/cloud-3341759
  • issue/cloud-3341770
  • issue/cloud-3341772
  • issue/cloud-3324909
  • issue/cloud-3342217
  • issue/cloud-3342235
  • issue/cloud-3341766
  • issue/cloud-3342543
  • issue/cloud-3342559
  • issue/cloud-3343270
  • issue/cloud-3343591
  • issue/cloud-3343619
  • issue/cloud-3344152
  • issue/cloud-3344592
  • issue/cloud-3344860
  • issue/cloud-3345154
  • issue/cloud-3342631
  • issue/cloud-3342633
  • issue/cloud-3343275
  • issue/cloud-3346151
  • issue/cloud-3346177
  • issue/cloud-3346180
  • issue/cloud-3346196
  • issue/cloud-3346423
  • issue/cloud-3346385
  • issue/cloud-3346437
  • issue/cloud-3346439
  • issue/cloud-3346864
  • issue/cloud-3346876
  • issue/cloud-3346902
  • issue/cloud-3347135
  • issue/cloud-3347138
  • issue/cloud-3347147
  • issue/cloud-3347172
  • issue/cloud-3347213
  • issue/cloud-3347446
  • issue/cloud-3347542
  • issue/cloud-3347557
  • issue/cloud-3347743
  • issue/cloud-3347752
  • issue/cloud-3347756
  • issue/cloud-3347774
  • issue/cloud-3347890
  • issue/cloud-3348036
  • issue/cloud-3341769
  • issue/cloud-3348048
  • issue/cloud-3348082
  • issue/cloud-3348349
  • issue/cloud-3348370
  • issue/cloud-3352191
  • issue/cloud-3352626
  • issue/cloud-3348610
  • issue/cloud-3348611
  • issue/cloud-3348828
  • issue/cloud-3348833
  • issue/cloud-3348632
  • issue/cloud-3349074
  • issue/cloud-3349192
  • issue/cloud-3349209
  • issue/cloud-3349784
  • issue/cloud-3349803
  • issue/cloud-3349813
  • issue/cloud-3350051
  • issue/cloud-3349505
  • issue/cloud-3350094
  • issue/cloud-3350107
  • issue/cloud-3351774
  • issue/cloud-3351990
  • issue/cloud-3352343
  • issue/cloud-3352839
  • issue/cloud-3352843
  • issue/cloud-3353083
  • issue/cloud-3353128
  • issue/cloud-3352095
  • issue/cloud-3352284
  • issue/cloud-3352627
  • issue/cloud-3352840
  • issue/cloud-3352861
  • issue/cloud-3353134
  • issue/cloud-3352618
  • issue/cloud-3352836
  • issue/cloud-3353073
  • issue/cloud-3353144
  • issue/cloud-3351227
  • issue/cloud-3351815
  • issue/cloud-3352337
  • issue/cloud-3352821
  • issue/cloud-3353170
  • issue/cloud-3353175
  • issue/cloud-3353180
  • issue/cloud-3353296
  • issue/cloud-3353191
  • issue/cloud-3353380
  • issue/cloud-3353595
  • issue/cloud-3353930
  • issue/cloud-3354139
  • issue/cloud-3354236
  • issue/cloud-3354374
  • issue/cloud-3354376
  • issue/cloud-3354379
  • issue/cloud-3354502
  • issue/cloud-3354505
  • issue/cloud-3354736
  • issue/cloud-3354768
  • issue/cloud-3354809
  • issue/cloud-3355219
  • issue/cloud-3355236
  • issue/cloud-3355256
  • issue/cloud-3355302
  • issue/cloud-3355515
  • issue/cloud-3355903
  • issue/cloud-3355942
  • issue/cloud-3355954
  • issue/cloud-3355965
  • issue/cloud-3356158
  • issue/cloud-3356230
  • issue/cloud-3356454
  • issue/cloud-3356456
  • issue/cloud-3356527
  • issue/cloud-3356528
  • issue/cloud-3356531
  • issue/cloud-3356744
  • issue/cloud-3356758
  • issue/cloud-3356775
  • issue/cloud-3356778
  • issue/cloud-3356780
  • issue/cloud-3356995
  • issue/cloud-3357000
  • issue/cloud-3357013
  • issue/cloud-3357099
  • issue/cloud-3357058
  • issue/cloud-3357545
  • issue/cloud-3357753
  • issue/cloud-3358765
  • issue/cloud-3358769
  • issue/cloud-3358768
  • issue/cloud-3358789
  • issue/cloud-3358803
  • issue/cloud-3358945
  • issue/cloud-3359271
  • issue/cloud-3359275
  • issue/cloud-3359313
  • issue/cloud-3359518
  • issue/cloud-3360272
  • issue/cloud-3360861
  • issue/cloud-3360865
  • issue/cloud-3360866
  • issue/cloud-3360896
  • issue/cloud-3360927
  • issue/cloud-3361130
  • issue/cloud-3361362
  • issue/cloud-3361479
  • issue/cloud-3361611
  • issue/cloud-3361750
  • issue/cloud-3362575
  • issue/cloud-3362605
  • issue/cloud-3362795
  • issue/cloud-3362829
  • issue/cloud-3363078
  • issue/cloud-3363113
  • issue/cloud-3363458
  • issue/cloud-3363744
  • issue/cloud-3363771
  • issue/cloud-3363773
  • issue/cloud-3363995
  • issue/cloud-3364325
  • issue/cloud-3364381
  • issue/cloud-3364561
  • issue/cloud-3364562
  • issue/cloud-3364581
  • issue/cloud-3364582
  • issue/cloud-3364603
  • issue/cloud-3364689
  • issue/cloud-3364751
  • issue/cloud-3365043
  • issue/cloud-3365220
  • issue/cloud-3365221
  • issue/cloud-3365226
  • issue/cloud-3365514
  • issue/cloud-3365773
  • issue/cloud-3366067
  • issue/cloud-3366115
  • issue/cloud-3366345
  • issue/cloud-3366349
  • issue/cloud-3366350
  • issue/cloud-3366436
  • issue/cloud-3366614
  • issue/cloud-3366618
  • issue/cloud-3366641
  • issue/cloud-3366900
  • issue/cloud-3367141
  • issue/cloud-3367261
  • issue/cloud-3367394
  • issue/cloud-3367407
  • issue/cloud-3367408
  • issue/cloud-3367793
  • issue/cloud-3367795
  • issue/cloud-3367838
  • issue/cloud-3367848
  • issue/cloud-3368747
  • issue/cloud-3368924
  • issue/cloud-3369296
  • issue/cloud-3369298
  • issue/cloud-3369977
  • issue/cloud-3370000
  • issue/cloud-3370030
  • issue/cloud-3402291
  • issue/cloud-3402708
  • issue/cloud-3406367
  • issue/cloud-3406626
  • issue/cloud-3370376
  • issue/cloud-3370570
  • issue/cloud-3400344
  • issue/cloud-3370819
  • issue/cloud-3370824
  • issue/cloud-3370846
  • issue/cloud-3403931
  • issue/cloud-3400408
  • issue/cloud-3405792
  • issue/cloud-3406395
  • issue/cloud-3406669
  • issue/cloud-3401036
  • issue/cloud-3401432
  • issue/cloud-3403261
  • issue/cloud-3404490
  • issue/cloud-3404789
  • issue/cloud-3399268
  • issue/cloud-3401037
  • issue/cloud-3401472
  • issue/cloud-3405390
  • issue/cloud-3405417
  • issue/cloud-3406378
  • issue/cloud-3399270
  • issue/cloud-3401473
  • issue/cloud-3406140
  • issue/cloud-3402646
  • issue/cloud-3402982
  • issue/cloud-3399472
  • issue/cloud-3399772
  • issue/cloud-3402301
  • issue/cloud-3406159
  • issue/cloud-3401049
  • issue/cloud-3406113
  • issue/cloud-3406635
  • issue/cloud-3406675
  • issue/cloud-3399993
  • issue/cloud-3405084
  • issue/cloud-3405425
  • issue/cloud-3399443
  • issue/cloud-3401420
  • issue/cloud-3400001
  • issue/cloud-3404519
  • issue/cloud-3371211
  • issue/cloud-3371251
  • issue/cloud-3371479
  • issue/cloud-3371480
  • issue/cloud-3371514
  • issue/cloud-3371922
  • issue/cloud-3372114
  • issue/cloud-3372119
  • issue/cloud-3372366
  • issue/cloud-3372415
  • issue/cloud-3373050
  • issue/cloud-3373136
  • issue/cloud-3373299
  • issue/cloud-3373456
  • issue/cloud-3373754
  • issue/cloud-3373789
  • issue/cloud-3374262
  • issue/cloud-3374538
  • issue/cloud-3374266
  • issue/cloud-3375128
  • issue/cloud-3375264
  • issue/cloud-3375434
  • issue/cloud-3375481
  • issue/cloud-3375708
  • issue/cloud-3375818
  • issue/cloud-3375970
  • issue/cloud-3376004
  • issue/cloud-3376008
  • issue/cloud-3376108
  • issue/cloud-3376363
  • issue/cloud-3376471
  • issue/cloud-3376804
  • issue/cloud-3377028
  • issue/cloud-3377300
  • issue/cloud-3377611
  • issue/cloud-3377631
  • issue/cloud-3377667
  • issue/cloud-3377984
  • issue/cloud-3378118
  • issue/cloud-3378152
  • issue/cloud-3378661
  • issue/cloud-3378883
  • issue/cloud-3378898
  • issue/cloud-3378678
  • issue/cloud-3379058
  • issue/cloud-3379176
  • issue/cloud-3379178
  • issue/cloud-3379196
  • issue/cloud-3379427
  • issue/cloud-3379498
  • issue/cloud-3379581
  • issue/cloud-3379826
  • issue/cloud-3379831
  • issue/cloud-3379866
  • issue/cloud-3380153
  • issue/cloud-3380164
  • issue/cloud-3380403
  • issue/cloud-3380604
  • issue/cloud-3380806
  • issue/cloud-3380859
  • issue/cloud-3380867
  • issue/cloud-3380950
  • issue/cloud-3381113
  • issue/cloud-3381159
  • issue/cloud-3399745
  • issue/cloud-3400002
  • issue/cloud-3405430
  • issue/cloud-3381738
  • issue/cloud-3381795
  • issue/cloud-3382016
  • issue/cloud-3382020
  • issue/cloud-3382180
  • issue/cloud-3382217
  • issue/cloud-3382223
  • issue/cloud-3382242
  • issue/cloud-3382222
  • issue/cloud-3382427
  • issue/cloud-3382740
  • issue/cloud-3382739
  • issue/cloud-3382746
  • issue/cloud-3382783
  • issue/cloud-3383005
  • issue/cloud-3383010
  • issue/cloud-3383054
  • issue/cloud-3383248
  • issue/cloud-3383258
  • issue/cloud-3383329
  • issue/cloud-3383507
  • issue/cloud-3383575
  • issue/cloud-3383633
  • issue/cloud-3383636
  • issue/cloud-3383641
  • issue/cloud-3383642
  • issue/cloud-3383687
  • issue/cloud-3384450
  • issue/cloud-3384636
  • issue/cloud-3384506
  • issue/cloud-3385077
  • issue/cloud-3385085
  • issue/cloud-3385104
  • issue/cloud-3385244
  • issue/cloud-3385247
  • issue/cloud-3385269
  • issue/cloud-3385261
  • issue/cloud-3385308
  • issue/cloud-3385535
  • issue/cloud-3385807
  • issue/cloud-3385822
  • issue/cloud-3385981
  • issue/cloud-3386037
  • issue/cloud-3386224
  • issue/cloud-3386250
  • issue/cloud-3386259
  • issue/cloud-3386365
  • issue/cloud-3386366
  • issue/cloud-3386367
  • issue/cloud-3386384
  • issue/cloud-3386471
  • issue/cloud-3386601
  • issue/cloud-3386610
  • issue/cloud-3386619
  • issue/cloud-3386712
  • issue/cloud-3386739
  • issue/cloud-3386873
  • issue/cloud-3386883
  • issue/cloud-3387181
  • issue/cloud-3387448
  • issue/cloud-3387454
  • issue/cloud-3387479
  • issue/cloud-3387562
  • issue/cloud-3387722
  • issue/cloud-3387724
  • issue/cloud-3387728
  • issue/cloud-3387819
  • issue/cloud-3387854
  • issue/cloud-3387938
  • issue/cloud-3387987
  • issue/cloud-3388149
  • issue/cloud-3388428
  • issue/cloud-3388430
  • issue/cloud-3388435
  • issue/cloud-3388469
  • issue/cloud-3388533
  • issue/cloud-3388714
  • issue/cloud-3388999
  • issue/cloud-3389044
  • issue/cloud-3389063
  • issue/cloud-3389266
  • issue/cloud-3389343
  • issue/cloud-3389344
  • issue/cloud-3389352
  • issue/cloud-3389430
  • issue/cloud-3389433
  • issue/cloud-3389470
  • issue/cloud-3389474
  • issue/cloud-3389704
  • issue/cloud-3389830
  • issue/cloud-3390034
  • issue/cloud-3390522
  • issue/cloud-3390564
  • issue/cloud-3390573
  • issue/cloud-3390762
  • issue/cloud-3390897
  • issue/cloud-3390908
  • issue/cloud-3390991
  • issue/cloud-3391015
  • issue/cloud-3391487
  • issue/cloud-3391488
  • issue/cloud-3392084
  • issue/cloud-3392090
  • issue/cloud-3392095
  • issue/cloud-3392108
  • issue/cloud-3392127
  • issue/cloud-3392137
  • issue/cloud-3392305
  • issue/cloud-3392432
  • issue/cloud-3392783
  • issue/cloud-3392803
  • issue/cloud-3393133
  • issue/cloud-3393432
  • issue/cloud-3393448
  • issue/cloud-3393450
  • issue/cloud-3395061
  • issue/cloud-3396478
  • issue/cloud-3396494
  • issue/cloud-3396497
  • issue/cloud-3396782
  • issue/cloud-3396841
  • issue/cloud-3397568
  • issue/cloud-3397597
  • issue/cloud-3396795
  • issue/cloud-3397917
  • issue/cloud-3397921
  • issue/cloud-3398036
  • issue/cloud-3398238
  • issue/cloud-3398925
  • issue/cloud-3399189
  • issue/cloud-3406842
  • issue/cloud-3406908
  • issue/cloud-3406963
  • issue/cloud-3407721
  • issue/cloud-3407815
  • issue/cloud-3407818
  • issue/cloud-3407819
  • issue/cloud-3407826
  • issue/cloud-3407829
  • issue/cloud-3407830
  • issue/cloud-3407982
  • issue/cloud-3407990
  • issue/cloud-3408015
  • issue/cloud-3408028
  • issue/cloud-3408068
  • issue/cloud-3408070
  • issue/cloud-3408104
  • issue/cloud-3408343
  • issue/cloud-3408346
  • issue/cloud-3408134
  • issue/cloud-3408372
  • issue/cloud-3408385
  • issue/cloud-3408832
  • issue/cloud-3408899
  • issue/cloud-3408933
  • issue/cloud-3408939
  • issue/cloud-3408965
  • issue/cloud-3408967
  • issue/cloud-3409356
  • issue/cloud-3409363
  • issue/cloud-3409375
  • issue/cloud-3409382
  • issue/cloud-3409553
  • issue/cloud-3409555
  • issue/cloud-3446961
  • issue/cloud-3409889
  • issue/cloud-3409911
  • issue/cloud-3409916
  • issue/cloud-3410153
  • issue/cloud-3410164
  • issue/cloud-3410185
  • issue/cloud-3410475
  • issue/cloud-3410677
  • issue/cloud-3410766
  • issue/cloud-3410771
  • issue/cloud-3410780
  • issue/cloud-3410824
  • issue/cloud-3410830
  • issue/cloud-3410832
  • issue/cloud-3410852
  • issue/cloud-3410853
  • issue/cloud-3410955
  • issue/cloud-3410968
  • issue/cloud-3410970
  • issue/cloud-3411114
  • issue/cloud-3411116
  • issue/cloud-3411129
  • issue/cloud-3411135
  • issue/cloud-3411149
  • issue/cloud-3411154
  • issue/cloud-3413903
  • issue/cloud-3413926
  • issue/cloud-3413928
  • issue/cloud-3413929
  • issue/cloud-3414125
  • issue/cloud-3414192
  • issue/cloud-3414204
  • issue/cloud-3414209
  • issue/cloud-3414221
  • issue/cloud-3414223
  • issue/cloud-3415106
  • issue/cloud-3415190
  • issue/cloud-3415219
  • issue/cloud-3415363
  • issue/cloud-3415372
  • issue/cloud-3415697
  • issue/cloud-3416044
  • issue/cloud-3416628
  • issue/cloud-3418203
  • issue/cloud-3418510
  • issue/cloud-3420266
  • issue/cloud-3422779
  • issue/cloud-3422777
  • issue/cloud-3423102
  • issue/cloud-3424163
  • issue/cloud-3424203
  • issue/cloud-3424219
  • issue/cloud-3424234
  • issue/cloud-3424222
  • issue/cloud-3425376
  • issue/cloud-3425385
  • issue/cloud-3425508
  • issue/cloud-3425630
  • issue/cloud-3425894
  • issue/cloud-3425931
  • issue/cloud-3426516
  • issue/cloud-3426535
  • issue/cloud-3426534
  • issue/cloud-3426964
  • issue/cloud-3427185
  • issue/cloud-3426240
  • issue/cloud-3427759
  • issue/cloud-3428019
  • issue/cloud-3436665
  • issue/cloud-3428380
  • issue/cloud-3437561
  • issue/cloud-3437562
  • issue/cloud-3437563
  • issue/cloud-3437159
  • issue/cloud-3436606
  • issue/cloud-3443311
  • issue/cloud-3436314
  • issue/cloud-3443330
  • issue/cloud-3436316
  • issue/cloud-3431187
  • issue/cloud-3432015
  • issue/cloud-3432549
  • issue/cloud-3432891
  • issue/cloud-3432907
  • issue/cloud-3447759
  • issue/cloud-3447760
  • issue/cloud-3449171
  • issue/cloud-3452826
  • issue/cloud-3452874
  • issue/cloud-3452875
  • issue/cloud-3452876
  • issue/cloud-3458095
  • issue/cloud-3458421
  • issue/cloud-3458886
  • issue/cloud-3458887
  • issue/cloud-3458885
  • issue/cloud-3458897
  • issue/cloud-3461750
  • issue/cloud-3461928
  • issue/cloud-3464812
  • issue/cloud-3467938
  • issue/cloud-3487684
  • issue/cloud-3487704
  • issue/cloud-3488325
  • issue/cloud-3504976
  • issue/cloud-3505229
  • issue/cloud-3506005
  • issue/cloud-3506006
  • issue/cloud-3506535
1985 results
Show changes
Showing
with 194 additions and 83 deletions
......@@ -2,18 +2,17 @@
namespace Drupal\cloud_budget\Form;
use Drupal\cloud\Form\CloudContentDeleteForm;
use Drupal\cloud\Plugin\cloud\config\CloudConfigPluginManagerInterface;
use Drupal\cloud\Service\EntityLinkRendererInterface;
use Drupal\Component\Datetime\TimeInterface;
use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Entity\EntityRepositoryInterface;
use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
use Drupal\Core\Entity\EntityTypeManager;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Messenger\Messenger;
use Drupal\Core\Plugin\CachedDiscoveryClearerInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\cloud\Form\CloudContentDeleteForm;
use Drupal\cloud\Plugin\cloud\config\CloudConfigPluginManagerInterface;
use Drupal\cloud\Service\EntityLinkRendererInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
......@@ -89,15 +88,17 @@ class CloudCreditDeleteForm extends CloudContentDeleteForm {
* @param \Drupal\cloud\Plugin\cloud\config\CloudConfigPluginManagerInterface $cloud_config_plugin_manager
* The cloud service provider plugin manager (CloudConfigPluginManager).
*/
public function __construct(EntityRepositoryInterface $entity_repository,
EntityTypeBundleInfoInterface $entity_type_bundle_info,
TimeInterface $time,
Messenger $messenger,
EntityTypeManager $entity_type_manager,
CacheBackendInterface $cacheRender,
CachedDiscoveryClearerInterface $plugin_cache_clearer,
EntityLinkRendererInterface $entity_link_renderer,
CloudConfigPluginManagerInterface $cloud_config_plugin_manager) {
public function __construct(
EntityRepositoryInterface $entity_repository,
EntityTypeBundleInfoInterface $entity_type_bundle_info,
TimeInterface $time,
Messenger $messenger,
EntityTypeManager $entity_type_manager,
CacheBackendInterface $cacheRender,
CachedDiscoveryClearerInterface $plugin_cache_clearer,
EntityLinkRendererInterface $entity_link_renderer,
CloudConfigPluginManagerInterface $cloud_config_plugin_manager,
) {
parent::__construct($entity_repository, $entity_type_bundle_info, $time, $messenger);
$this->entityTypeManager = $entity_type_manager;
$this->entityLinkRenderer = $entity_link_renderer;
......
......@@ -2,8 +2,8 @@
namespace Drupal\cloud_budget\Form;
use Drupal\cloud\Traits\CloudContentEntityTrait;
use Drupal\Core\Form\FormStateInterface;
use Drupal\cloud\Traits\CloudContentEntityTrait;
/**
* Form controller for the cloud credit edit forms.
......@@ -38,7 +38,7 @@ class CloudCreditEditForm extends CloudBudgetContentForm {
$this->addOthersFieldset($form, $weight++, $cloud_context);
$form['actions'] = $this->actions($form, $form_state, $cloud_context);
$form['actions'] = $this->actions($form, $form_state);
return $form;
}
......
......@@ -2,11 +2,11 @@
namespace Drupal\cloud_budget\Form\Config;
use Drupal\cloud\Plugin\cloud\config\CloudConfigPluginManagerInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\File\FileSystemInterface;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\cloud\Plugin\cloud\config\CloudConfigPluginManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
......@@ -41,7 +41,7 @@ class CloudBudgetAdminSettings extends ConfigFormBase {
public function __construct(
ConfigFactoryInterface $config_factory,
FileSystemInterface $file_system,
CloudConfigPluginManagerInterface $cloud_config_plugin_manager
CloudConfigPluginManagerInterface $cloud_config_plugin_manager,
) {
parent::__construct($config_factory);
......
......@@ -13,7 +13,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Plugin implementation of the 'credit_link_formatter' formatter.
*
* This formatter links user name to the entity of
* This formatter links username to the entity of
* cloud credits.
*
* @FieldFormatter(
......@@ -49,7 +49,7 @@ class CloudCreditLinkFormatter extends FormatterBase implements ContainerFactory
* @param string $view_mode
* The view mode.
* @param array $third_party_settings
* Any third party settings settings.
* Any third party settings.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
*/
......@@ -80,6 +80,7 @@ class CloudCreditLinkFormatter extends FormatterBase implements ContainerFactory
*/
public function viewElements(FieldItemListInterface $items, $langcode): array {
$entity = $items->getEntity();
$elements = [];
$storage = $this->entityTypeManager->getStorage('cloud_credit');
foreach ($items ?: [] as $delta => $item) {
if (!$item->isEmpty()) {
......
......@@ -28,6 +28,7 @@ class CloudCreditListFormatter extends FormatterBase {
*/
public function viewElements(FieldItemListInterface $items, $langcode): array {
$entity = $items->getEntity();
$elements = [];
foreach ($items ?: [] as $delta => $item) {
if (!$item->isEmpty()) {
$label = $item->value;
......
......@@ -2,10 +2,10 @@
namespace Drupal\cloud_budget\Plugin\cloud_budget;
use Drupal\cloud\Plugin\cloud\CloudPluginManager;
use Drupal\cloud_budget\Annotation\CloudCostCalculator;
use Drupal\Core\Cache\CacheBackendInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\cloud\Plugin\cloud\CloudPluginManager;
use Drupal\cloud_budget\Annotation\CloudCostCalculator;
/**
* Provides a cloud cost calculator manager.
......
getNodes: []
getNamespaces: []
getPods: []
getDeployments: []
getReplicaSets: []
getServices: []
getApiServices: []
getClusterRoleBindings: []
getClusterRoles: []
getConfigMaps: []
getCronJobs: []
getDaemonSets: []
getDeployments: []
getEndpoints: []
getEvents: []
getHorizontalPodAutoscalers: []
getIngresses: []
getJobs: []
getResourceQuotas: []
getLimitRanges: []
getSecrets: []
getConfigMaps: []
getNetworkPolicies: []
getRoles: []
getMetricsPods: []
getClusterRoles: []
getNamespaces: []
getNetworkPolicies: []
getNodes: []
getPersistentVolumeClaims: []
getPersistentVolumes: []
getPods: []
getPriorityClasses: []
getReplicaSets: []
getResourceQuotas: []
getRoles: []
getRoleBindings: []
getSecrets: []
getServiceAccounts: []
getServices: []
getStatefulSets: []
getStorageClasses: []
---
# {} below is the placeholder for the empty value for linting.
{}
......@@ -2,12 +2,12 @@
namespace Drupal\Tests\cloud_budget\Functional;
use Drupal\cloud\Entity\CloudConfig;
use Drupal\cloud\Entity\CloudContentEntityBase;
use Drupal\Tests\cloud\Functional\CloudTestBase;
use Drupal\Tests\cloud_budget\Traits\CloudBudgetTestEntityTrait;
use Drupal\Tests\cloud_budget\Traits\CloudBudgetTestFormDataTrait;
use Drupal\Tests\cloud_budget\Traits\CloudBudgetTestMockTrait;
use Drupal\cloud\Entity\CloudConfig;
use Drupal\cloud\Entity\CloudContentEntityBase;
/**
* Base Test Case class for Cloud Budget.
......@@ -45,7 +45,7 @@ abstract class CloudBudgetTestBase extends CloudTestBase {
* Create cloud context.
*
* @param string $bundle
* The CloudConfig Bundle Type ('k8s'). This is used for `cloud_budget'.
* The CloudConfig Bundle Type ('k8s'). This is used for 'cloud_budget'.
*
* @return \Drupal\cloud\Entity\CloudConfig
* The cloud service provider (CloudConfig) entity.
......@@ -84,7 +84,8 @@ abstract class CloudBudgetTestBase extends CloudTestBase {
array $entities,
$operation = 'delete',
$passive_operation = 'deleted',
$path_prefix = '/clouds/budget'): void {
$path_prefix = '/clouds/budget',
): void {
$this->runTestEntityBulkImpl(
$type,
......
......@@ -46,8 +46,10 @@ class CloudCreditTest extends CloudBudgetTestBase {
$this->drupalGet("/clouds/budget/$cloud_context/credit/add");
$this->submitForm(
$add[$i],
$this->t('Save'));
$this->t('Save')->render()
);
$this->assertNoErrorMessage();
$t_args = ['@type' => 'Cloud Credit', '%label' => $label];
$this->assertSession()->pageTextContains(strip_tags($this->t('The @type %label has been created.', $t_args)));
......@@ -65,11 +67,14 @@ class CloudCreditTest extends CloudBudgetTestBase {
$this->drupalGet("/clouds/budget/$cloud_context/credit/$num/edit");
$this->submitForm(
$edit[$i],
$this->t('Save'));
$this->t('Save')->render()
);
$this->assertNoErrorMessage();
$label = explode(' ', $add[$i]['user[0][target_id]'])[0];
$this->assertNoErrorMessage();
$t_args = ['@type' => 'Cloud Credit', '%label' => $label];
$this->assertSession()->pageTextContains(strip_tags($this->t('The @type %label has been updated.', $t_args)));
}
......@@ -82,8 +87,10 @@ class CloudCreditTest extends CloudBudgetTestBase {
$this->drupalGet("/clouds/budget/$cloud_context/credit/$num/delete");
$this->submitForm(
[],
$this->t('Delete'));
$this->t('Delete')->render()
);
$this->assertNoErrorMessage();
$t_args = ['@type' => 'Cloud Credit', '%label' => $label];
$this->assertSession()->pageTextContains(strip_tags($this->t('The @type %label has been deleted.', $t_args)));
......
......@@ -2,9 +2,9 @@
namespace Drupal\Tests\cloud_budget\Traits;
use Drupal\Tests\cloud\Traits\CloudTestEntityTrait;
use Drupal\cloud\Entity\CloudContentEntityBase;
use Drupal\cloud_budget\Entity\CloudCredit;
use Drupal\Tests\cloud\Traits\CloudTestEntityTrait;
/**
* The trait creating test entity for cloud budget testing.
......
......@@ -10,8 +10,8 @@ INTRODUCTION
REQUIREMENTS
============
- Drupal `9.4.x` or higher (The latest version of Drupal `9.x`)
- Cloud `5.x` or higher
- Drupal `10.x` or higher (The latest version of Drupal `10.x`)
- Cloud `8.x` or higher
INSTALLATION
============
......
......@@ -2,7 +2,7 @@ name: 'Cloud Orchestrator Worker'
type: module
description: 'Allows users to manage Cloud Orchestrator Workers.'
package: Cloud
core_version_requirement: ^9
core_version_requirement: ^10.3 || ^11
configure: cloud_cluster_worker.settings
dependencies:
- drupal:serialization
......
......@@ -5,9 +5,9 @@
* Cloud Orchestrator Worker module.
*/
use Drupal\cloud\Entity\CloudContentEntityBase;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\cloud\Entity\CloudContentEntityBase;
/**
* Implements hook_help().
......
......@@ -2,8 +2,6 @@
namespace Drupal\cloud_cluster_worker\Form\Config;
use Drupal\cloud\Service\CloudServiceInterface;
use Drupal\cloud\Traits\CloudFormTrait;
use Drupal\Component\Render\FormattableMarkup;
use Drupal\Component\Uuid\UuidInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
......@@ -13,8 +11,11 @@ use Drupal\Core\Locale\CountryManager;
use Drupal\Core\Messenger\Messenger;
use Drupal\Core\Routing\RouteProvider;
use Drupal\Core\Url;
use Drupal\Core\Utility\Error;
use Drupal\cloud\Service\CloudServiceInterface;
use Drupal\cloud\Traits\CloudFormTrait;
use GuzzleHttp\ClientInterface;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Exception\ClientException;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
......@@ -77,12 +78,14 @@ class CloudClusterWorkerAdminSettings extends ConfigFormBase {
* @param \Drupal\Core\Messenger\Messenger $messenger
* The Messenger Service.
*/
public function __construct(ConfigFactoryInterface $config_factory,
CloudServiceInterface $cloud,
RouteProvider $route_provider,
ClientInterface $http_client,
UuidInterface $uuid_service,
Messenger $messenger) {
public function __construct(
ConfigFactoryInterface $config_factory,
CloudServiceInterface $cloud,
RouteProvider $route_provider,
ClientInterface $http_client,
UuidInterface $uuid_service,
Messenger $messenger,
) {
parent::__construct($config_factory);
$this->cloud = $cloud;
......@@ -264,7 +267,8 @@ class CloudClusterWorkerAdminSettings extends ConfigFormBase {
* @throws \Exception
*/
private function logError($type, \Exception $exception, $message, $throw = TRUE): void {
watchdog_exception($type, $exception, $message);
// See also: https://www.drupal.org/node/2932520.
Error::logException($this->logger($type), $exception, $message);
if ($throw === TRUE) {
throw new \Exception($exception->getMessage());
}
......@@ -281,11 +285,11 @@ class CloudClusterWorkerAdminSettings extends ConfigFormBase {
private function registerWorker(FormStateInterface $form_state): void {
try {
$headers = [
'Authorization' => 'Bearer ' . base64_encode($form_state->getValue('cloud_cluster_worker_token')),
'Authorization' => 'Bearer ' . base64_encode($form_state->getValue('cloud_cluster_worker_token') ?? ''),
'Content-Type' => 'application/json',
];
$endpoint_url = $form_state->getValue('cloud_cluster_worker_api_endpoint');
$endpoint_url = $form_state->getValue('cloud_cluster_worker_api_endpoint') ?? '';
// Remove the '/' if the endpoint url ends with '/'.
if (substr($endpoint_url, -1) === '/') {
......@@ -293,7 +297,8 @@ class CloudClusterWorkerAdminSettings extends ConfigFormBase {
}
// @todo Add field tags.
$response = $this->httpClient->post(
$response = $this->httpClient->request(
'POST',
$endpoint_url . self::API_PATH,
[
'body' => json_encode([
......@@ -312,7 +317,7 @@ class CloudClusterWorkerAdminSettings extends ConfigFormBase {
throw new \Exception($output['error'] ?? 'Unknown error.');
}
}
catch (GuzzleException $error) {
catch (ClientException $error) {
$response = $error->getResponse();
$response_info = $response->getBody()->getContents();
$message = new FormattableMarkup(
......
......@@ -2,9 +2,9 @@
namespace Drupal\cloud_cluster_worker\Plugin\QueueWorker;
use Drupal\cloud_cluster_worker\Service\CloudClusterWorkerServiceInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Queue\QueueWorkerBase;
use Drupal\cloud_cluster_worker\Service\CloudClusterWorkerServiceInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
......@@ -41,7 +41,7 @@ class CloudClusterWorkerSyncResourcesQueueWorker extends QueueWorkerBase impleme
array $configuration,
$plugin_id,
array $plugin_definition,
CloudClusterWorkerServiceInterface $cluster_worker
CloudClusterWorkerServiceInterface $cluster_worker,
) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
......
......@@ -2,12 +2,12 @@
namespace Drupal\cloud_cluster_worker\Service;
use Drupal\cloud\Plugin\cloud\config\CloudConfigPluginManagerInterface;
use Drupal\cloud\Service\CloudServiceBase;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Logger\LoggerChannelFactoryInterface;
use Drupal\Core\Queue\QueueFactory;
use Drupal\cloud\Plugin\cloud\config\CloudConfigPluginManagerInterface;
use Drupal\cloud\Service\CloudServiceBase;
use GuzzleHttp\ClientInterface;
use Symfony\Component\Serializer\Serializer;
......@@ -38,7 +38,7 @@ class CloudClusterWorkerService extends CloudServiceBase implements CloudCluster
/**
* Guzzle client.
*
* @var \GuzzleHttp\Client
* @var \GuzzleHttp\ClientInterface
*/
protected $httpClient;
......@@ -95,7 +95,7 @@ class CloudClusterWorkerService extends CloudServiceBase implements CloudCluster
QueueFactory $queue_factory,
Serializer $serializer,
CloudConfigPluginManagerInterface $cloud_config_plugin_manager,
LoggerChannelFactoryInterface $logger_factory
LoggerChannelFactoryInterface $logger_factory,
) {
// The parent constructor takes care of $this->messenger object.
......@@ -128,7 +128,7 @@ class CloudClusterWorkerService extends CloudServiceBase implements CloudCluster
try {
$headers = [
'Authorization' => 'Bearer ' . base64_encode($config->get('cloud_cluster_worker_token')),
'Authorization' => 'Bearer ' . base64_encode($config->get('cloud_cluster_worker_token') ?? ''),
'Content-Type' => 'application/json',
];
......@@ -140,7 +140,8 @@ class CloudClusterWorkerService extends CloudServiceBase implements CloudCluster
$cloud_cluster_worker_name = $config->get('cloud_cluster_worker_id');
$response = $this->httpClient->post(
$response = $this->httpClient->request(
'POST',
$endpoint_url . '/cloud_cluster/operation',
[
'body' => json_encode([
......@@ -150,14 +151,12 @@ class CloudClusterWorkerService extends CloudServiceBase implements CloudCluster
]
);
$output = json_decode($response->getBody()
->getContents(), TRUE, 512, JSON_THROW_ON_ERROR);
if ($response->getStatusCode() !== 200) {
$this->logger->error(!empty($output['error']) ? $output['error'] : $this->t('Unknown error.'));
return;
}
$output = json_decode($response->getBody()
->getContents(), TRUE, 512, JSON_THROW_ON_ERROR);
$this->logger->info('Operations: ' . $response->getBody());
$results = [];
......@@ -172,7 +171,7 @@ class CloudClusterWorkerService extends CloudServiceBase implements CloudCluster
// Run operation.
$service_name = $item['service_name'];
// phpcs:ignore
$service = \Drupal::service($service_name);
$service = \Drupal::service($service_name); // @phpstan-ignore-line
$service->setCloudContext($cloud_context);
$method_name = lcfirst($item['operation']);
......@@ -290,7 +289,7 @@ class CloudClusterWorkerService extends CloudServiceBase implements CloudCluster
try {
$headers = [
'Authorization' => 'Bearer ' . base64_encode($config->get('cloud_cluster_worker_token')),
'Authorization' => 'Bearer ' . base64_encode($config->get('cloud_cluster_worker_token') ?? ''),
'Content-Type' => 'application/json',
];
......@@ -305,7 +304,8 @@ class CloudClusterWorkerService extends CloudServiceBase implements CloudCluster
}
$cloud_cluster_worker_name = $config->get('cloud_cluster_worker_id');
$response = $this->httpClient->post(
$response = $this->httpClient->request(
'POST',
$endpoint_url . self::API_PATH,
[
'body' => json_encode([
......@@ -334,25 +334,25 @@ class CloudClusterWorkerService extends CloudServiceBase implements CloudCluster
* Resolve references in parameters.
*
* @param array $params
* The paramters.
* The parameters.
* @param array $refs
* The reference information.
* @param array $results
* The results of method calls.
* The results of method call.
*
* @return array
* The parameters processed.
*/
private function resolveRefs(array $params, array $refs, array $results): array {
$param_refs = [];
foreach ($refs ?? [] as $key => $ref) {
foreach ($refs as $key => $ref) {
$parts = explode('#', $ref);
if (!empty($results[$parts[0]])) {
$param_refs[$key] = $results[$parts[0]][$parts[1]];
}
}
array_walk_recursive($params, function (&$value, $key) use ($param_refs, $refs) {
array_walk_recursive($params, static function (&$value, $key) use ($param_refs, $refs) {
if (!empty($param_refs[$key]) && $value === $refs[$key]) {
$value = $param_refs[$key];
}
......
......@@ -7,7 +7,7 @@ use Drupal\Tests\cloud\Functional\Module\CloudModuleTestBase;
/**
* Tests install/uninstall module(s) and confirm table creation/deletion.
*
* @group Cloud Orchestrator
* @group Cloud
*/
class InstallUninstallTest extends CloudModuleTestBase {
......
......@@ -65,7 +65,7 @@ SPA client Structure
`<div id="root">` part.
- `App.tsx` is called from `index.tsx`, and `App.tsx` switches pages for each
endpoint.
- Each page is defined in the pages directory.
- Each page is defined in the 'pages' directory.
- `i18n.ts` defines the processing required for i18n support.
- `constant` directory defines the various constants required by the SPA client.
......@@ -80,3 +80,7 @@ SPA client Structure
| organisms | Defining a Component that consists of multiple `molecules` |
| pages | Define a page-by-page Component |
| service | Defining service classes and utility functions |
index.js Compilation Date
=========================
- Initial compilation (5.22.2023)
......@@ -6,8 +6,8 @@ Introduction
Requirements
============
- Drupal `9.4.x` or higher (The latest version of Drupal `9.x`)
- Cloud `5.x` or higher
- Drupal `10.x` or higher (The latest version of Drupal `10.x`)
- Cloud `8.x` or higher
- [Simple OAuth](
https://www.drupal.org/project/simple_oauth
) `5.0`.x module (Not `5.2.x` or higher)
......@@ -24,3 +24,79 @@ Build from source code
- If you want to build the source code for the SPA-side, please check
[BUILD.md](BUILD.md).
NPM libraries used in this module
============
- react v17
- The UI library by JavaScript/TypeScript.
- react-router-dom v5
- The routing library for React.
- react-bootstrap
- The CSS/JS library for React.
- Unlike normal web development, `bootstrap` is supplied by the Rigel theme.
- leaflet, react-leaflet
- The chart library by JavaScript.
- react-leaflet is a wrapper library for leaflet.js in React.
- d3
- The 2D graphic library by JavaScript.
- Used to graphically display server metrics.
- react-loader-spinner
- The spinner logo library for React.
Directory structure
============
- cloud_dashboard
- src
- atoms, molecules, organisms, pages
- Various *.tsx files according to Atomic design.
- constant
- others
- Definition files for various constants.
- templates
- Template files for describing various forms.
- hooks
- drupal_jsonapi.ts
- Wrapper library for using JSON:API.
- drupal_oauth2.ts
- Wrapper library for using OAuth2.
- model
- Various files of data models.
- service
- convert.ts
- Service class for converting data for transmission or display.
- state.ts
- Service class for managing cloud context.
- storage.ts
- Service class for editing localstorage.
- string.ts
- Service class for string manipulation.
- i18n.ts
- The definition of words to be translated.
- build.sh
- The shell script to build forms written in React.
- package.json
- Definition of library used in forms written in React.
- css
- Put the CSS generated by building code written in React.
- js
- Put the JavaScript generated by building code written in React.
- src
- Controller/CloudDashboardConfigController.php
- The definition of REST APIs.
- Form
- Config/CloudDashboardAdminSettings.php
- The config form of this custom module.
- React/CloudDashboardForm.php
- The base form for React.
- cloud_dashboard.info.yml
- cloud_dashboard.libraries.yml
- Mapping CSS/JS generated by building code for React to Drupal forms.
- cloud_dashboard.links.menu.yml
- cloud_dashboard.module
- Implements hook_help().
- cloud_dashboard.routing.yml
- The routing of the base form for React.
- The routing of the configuration form of this custom module.
- The routing of REST APIs used by this custom module.