akcache 1.0.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +2 -1
- data/bin/kcache +1 -1
- data/kcache.gemspec +1 -1
- data/lib/kcache/README.md +29 -0
- data/lib/kcache/version.rb +1 -1
- data/lib/kcache.rb +145 -79
- data/lib/pod_plugin.rb +0 -0
- metadata +9 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 890961de10e634c3aecdfabf9e89d93b78c50a310e04e44d3ea75c0fb4565c53
|
4
|
+
data.tar.gz: a7f2473162f65bc4f67a66abb1d7a93e97a2647a720856900671b43850bf9036
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 765afe47fcc2df2d63095d49c8817b6212efa7c64d768a97105da8626075244de37bfb0549af153e08d910dc06c0f37a10775179094f7923f4d061e452ba3cbb
|
7
|
+
data.tar.gz: 87006aa95d29ec372f9e28d88b6c0c70d397a297f9019af031d3bb0503117f8be061d4a02e18e168a27edecdd1e6fbc418ee9f6cb5f9a2b118bf03a01b08c052
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# AKCache
|
2
|
+
|
2
3
|
|
3
4
|
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/kcache`. To experiment with that code, run `bin/console` for an interactive prompt.
|
4
5
|
|
data/bin/kcache
CHANGED
data/kcache.gemspec
CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.email = ["1433233832@qq.com"]
|
13
13
|
|
14
14
|
spec.summary = "a cache tool"
|
15
|
-
spec.description = "a cache tool that can
|
15
|
+
spec.description = "a cache tool that can reduce xcode archive time"
|
16
16
|
spec.homepage = "https://github.com/yusheng00"
|
17
17
|
spec.license = "MIT"
|
18
18
|
spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# AKMall
|
2
|
+
|
3
|
+
[](https://travis-ci.org/pangyulei/AKMall)
|
4
|
+
[](https://cocoapods.org/pods/AKMall)
|
5
|
+
[](https://cocoapods.org/pods/AKMall)
|
6
|
+
[](https://cocoapods.org/pods/AKMall)
|
7
|
+
|
8
|
+
## Example
|
9
|
+
|
10
|
+
To run the example project, clone the repo, and run `pod install` from the Example directory first.
|
11
|
+
|
12
|
+
## Requirements
|
13
|
+
|
14
|
+
## Installation
|
15
|
+
|
16
|
+
AKMall is available through [CocoaPods](https://cocoapods.org). To install
|
17
|
+
it, simply add the following line to your Podfile:
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
pod 'AKMall'
|
21
|
+
```
|
22
|
+
|
23
|
+
## Author
|
24
|
+
|
25
|
+
pangyulei, pangyulei@gmail.com
|
26
|
+
|
27
|
+
## License
|
28
|
+
|
29
|
+
AKMall is available under the MIT license. See the LICENSE file for more info.
|
data/lib/kcache/version.rb
CHANGED
data/lib/kcache.rb
CHANGED
@@ -9,7 +9,6 @@ require "find"
|
|
9
9
|
require 'set'
|
10
10
|
|
11
11
|
#配置
|
12
|
-
Target_Build_Configuration = "Release"
|
13
12
|
|
14
13
|
TARGET_CACHE_CONFIG = "target_cache_config.yml"
|
15
14
|
|
@@ -36,11 +35,12 @@ OBJROOT = "OBJROOT"
|
|
36
35
|
|
37
36
|
|
38
37
|
#变量
|
38
|
+
$target_build_configuration = "Release"
|
39
39
|
$podfile_spec_checksums = nil
|
40
40
|
$file_md5_hash = {}
|
41
|
+
$exclude_target = []
|
41
42
|
|
42
|
-
|
43
|
-
class CacheManager
|
43
|
+
class CacheManager
|
44
44
|
|
45
45
|
def get_cache_root
|
46
46
|
return Dir.home + "/ysCache"
|
@@ -82,23 +82,24 @@ $file_md5_hash = {}
|
|
82
82
|
end
|
83
83
|
return wrapper_project_paths.uniq
|
84
84
|
end
|
85
|
+
|
85
86
|
|
86
87
|
def backup_project(project)
|
87
|
-
command = "cp \"#{project.path}/project.pbxproj\" \"#{project.path}/
|
88
|
+
command = "cp \"#{project.path}/project.pbxproj\" \"#{project.path}/ysTest_backup.pbxproj\""
|
88
89
|
raise unless system command
|
89
90
|
end
|
90
91
|
|
91
92
|
def clean_temp_files
|
92
|
-
command = "rm -rf Pods/*.xcodeproj/
|
93
|
-
raise unless system command
|
93
|
+
# command = "rm -rf Pods/*.xcodeproj/ysTest_backup.pbxproj"
|
94
|
+
# raise unless system command
|
94
95
|
|
95
96
|
command = "rm -rf Pods/*.xcodeproj/*.#{FILE_NAME_TARGET_CONTEXT}"
|
96
97
|
raise unless system command
|
97
98
|
end
|
98
99
|
|
99
100
|
def restore_project(project)
|
100
|
-
if File.exist? "#{project.path}/
|
101
|
-
command = "mv \"#{project.path}/
|
101
|
+
if File.exist? "#{project.path}/ysTest_backup.pbxproj"
|
102
|
+
command = "mv \"#{project.path}/ysTest_backup.pbxproj\" \"#{project.path}/project.pbxproj\""
|
102
103
|
raise unless system command
|
103
104
|
end
|
104
105
|
end
|
@@ -152,6 +153,7 @@ $file_md5_hash = {}
|
|
152
153
|
file_path = file.file_ref.real_path.to_s
|
153
154
|
files.push file_path
|
154
155
|
end
|
156
|
+
|
155
157
|
#获取所有头文件(.h)
|
156
158
|
target.headers_build_phase.files.each do | file |
|
157
159
|
file_path = file.file_ref.real_path.to_s
|
@@ -186,7 +188,7 @@ $file_md5_hash = {}
|
|
186
188
|
$podfile_spec_checksums = podfile_lock["SPEC CHECKSUMS"]
|
187
189
|
end
|
188
190
|
|
189
|
-
project_configuration = project.build_configurations.detect { | config | config.name ==
|
191
|
+
project_configuration = project.build_configurations.detect { | config | config.name == $target_build_configuration}
|
190
192
|
project_configuration_content = project_configuration.pretty_print.to_yaml
|
191
193
|
|
192
194
|
project_xcconfig = ""
|
@@ -197,7 +199,7 @@ $file_md5_hash = {}
|
|
197
199
|
end
|
198
200
|
end
|
199
201
|
|
200
|
-
target_configuration = target.build_configurations.detect { | config | config.name ==
|
202
|
+
target_configuration = target.build_configurations.detect { | config | config.name == $target_build_configuration}
|
201
203
|
target_configuration_content = target_configuration.pretty_print.to_yaml
|
202
204
|
|
203
205
|
target_xcconfig = ""
|
@@ -296,7 +298,7 @@ $file_md5_hash = {}
|
|
296
298
|
if target_context[:target_md5] != target_md5 or target_context[:product_md5] != get_file_md5(target_cache_dir + "/" + FILE_NAME_PRODUCT)
|
297
299
|
command = "rm -rf \"#{target_cache_dir}\""
|
298
300
|
raise unless system command
|
299
|
-
puts "<ERROR> #{target.name} target md5
|
301
|
+
puts "<ERROR> #{target.name} target md5 does not match: #{target_cache_dir}"
|
300
302
|
end
|
301
303
|
|
302
304
|
dependency_exit = true
|
@@ -306,12 +308,12 @@ $file_md5_hash = {}
|
|
306
308
|
dependency_file = item[0]
|
307
309
|
dependency_md5 = item[1]
|
308
310
|
unless File.exist? dependency_file
|
309
|
-
|
311
|
+
puts "<WARNING> #{target.name} dependency file miss: #{dependency_file}"
|
310
312
|
dependency_exit = false
|
311
313
|
break
|
312
314
|
end
|
313
315
|
unless get_file_md5(dependency_file) == dependency_md5
|
314
|
-
|
316
|
+
puts "<WARNING> #{target.name} dependency file md5 does not match: #{dependency_file}"
|
315
317
|
dependency_exit = false
|
316
318
|
break
|
317
319
|
end
|
@@ -344,7 +346,7 @@ $file_md5_hash = {}
|
|
344
346
|
end
|
345
347
|
|
346
348
|
def inject_flag_action(project, target)
|
347
|
-
command_exec = "
|
349
|
+
command_exec = "\"#{$0}\""
|
348
350
|
inject_phase = target.new_shell_script_build_phase("ys_inject_#{target.name}")
|
349
351
|
inject_phase.shell_script = "#{command_exec} #{"inject"} #{target.name} \"#{project.path}\""
|
350
352
|
inject_phase.show_env_vars_in_log = '1'
|
@@ -352,8 +354,6 @@ $file_md5_hash = {}
|
|
352
354
|
|
353
355
|
def inject_copy_action(project, target, target_context)
|
354
356
|
target_cache_dir = target_context[:hit_target_cache_dir]
|
355
|
-
target_product_dir = target_context[:build_product_dir]
|
356
|
-
build_intermediate_dir = target_context[:build_intermediate_dir]
|
357
357
|
|
358
358
|
target.build_phases.delete_if { | build_phase |
|
359
359
|
build_phase.class == Xcodeproj::Project::Object::PBXHeadersBuildPhase or
|
@@ -361,15 +361,9 @@ $file_md5_hash = {}
|
|
361
361
|
build_phase.class == Xcodeproj::Project::Object::PBXResourcesBuildPhase
|
362
362
|
}
|
363
363
|
|
364
|
-
|
365
|
-
# target.build_phases.delete_if { |phase|
|
366
|
-
# phase.class == Xcodeproj::Project::Object::PBXShellScriptBuildPhase
|
367
|
-
# }
|
368
|
-
# end
|
369
|
-
|
370
|
-
command_exec = "kcache"
|
364
|
+
command_exec = "\"#{$0}\""
|
371
365
|
inject_phase = target.new_shell_script_build_phase("ys_copy_#{target.name}")
|
372
|
-
inject_phase.shell_script = "#{command_exec} #{"copy"} \"#{target_cache_dir}\"
|
366
|
+
inject_phase.shell_script = "#{command_exec} #{"copy"} \"#{target_cache_dir}\""
|
373
367
|
inject_phase.show_env_vars_in_log = '1'
|
374
368
|
end
|
375
369
|
|
@@ -379,10 +373,10 @@ $file_md5_hash = {}
|
|
379
373
|
start_time = Time.now
|
380
374
|
target_cache_dir = ARGV[1]
|
381
375
|
cache_product_path = target_cache_dir + "/#{FILE_NAME_PRODUCT}"
|
382
|
-
|
376
|
+
|
383
377
|
[SYMROOT, CONFIGURATION_BUILD_DIR, CONFIGURATION_TEMP_DIR, OBJROOT, TARGET_BUILD_DIR, TARGET_TEMP_DIR, SRCROOT, FULL_PRODUCT_NAME].sort.each do | key |
|
384
378
|
unless ENV.has_key? key and ENV[key] and ENV[key].size > 0
|
385
|
-
raise "<INFO> #{
|
379
|
+
raise "<INFO> #{$0} should have #{key}"
|
386
380
|
break
|
387
381
|
end
|
388
382
|
end
|
@@ -413,7 +407,6 @@ $file_md5_hash = {}
|
|
413
407
|
def add_cache(target, target_info)
|
414
408
|
target_md5 = target_info[:target_md5]
|
415
409
|
product_dir = target_info[CONFIGURATION_BUILD_DIR]
|
416
|
-
# intermediate_dir = target_info[TARGET_TEMP_DIR]
|
417
410
|
full_product_name = target_info[FULL_PRODUCT_NAME]
|
418
411
|
|
419
412
|
Dir.glob("#{product_dir}/**/*.modulemap").each do | modulemap |
|
@@ -493,23 +486,69 @@ $file_md5_hash = {}
|
|
493
486
|
return true
|
494
487
|
|
495
488
|
end
|
489
|
+
|
490
|
+
def get_custom_config_information
|
491
|
+
if File.exist? "project_cache_config.yml"
|
492
|
+
custom_config = YAML.load (File.read("project_cache_config.yml"))
|
493
|
+
$exclude_target = custom_config[:exclude_targets]
|
494
|
+
else
|
495
|
+
source = {
|
496
|
+
:description => nil,
|
497
|
+
:dependency_check => true,
|
498
|
+
:exclude_targets => ["target1", "target2"],
|
499
|
+
}.to_yaml
|
500
|
+
|
501
|
+
substitution_list = {
|
502
|
+
/:description:/ => "# You can assign values to these parameters to achieve some custom functions\n",
|
503
|
+
/:dependency_check:/ => "\n\n# Whether to check the dependencies of the target. For exzample: target A depends on target B. Under normal circumstances, target B is recompiled, then target A will be recompiled, but if the dependencies are not checked, target A will not be recompiled at this time\n:dependency_check:",
|
504
|
+
/:exclude_targets:/ => "\n\n# the targets that will not participate in cache dependency detection\n:exclude_targets:",
|
505
|
+
}
|
506
|
+
|
507
|
+
substitution_list.each do |pattern, replacement|
|
508
|
+
source.gsub!(pattern, replacement)
|
509
|
+
end
|
510
|
+
puts source
|
511
|
+
File.write("project_cache_config.yml", source)
|
512
|
+
end
|
496
513
|
|
497
|
-
|
514
|
+
end
|
498
515
|
|
499
|
-
|
516
|
+
|
517
|
+
def project_task_begin(argv)
|
518
|
+
|
519
|
+
argv.each do |prama|
|
520
|
+
if prama.include? "configuration"
|
521
|
+
if prama.include? "Debug"
|
522
|
+
$target_build_configuration = "Debug"
|
523
|
+
elsif prama.include? "Release"
|
524
|
+
$target_build_configuration = "Release"
|
525
|
+
end
|
526
|
+
end
|
527
|
+
end
|
528
|
+
|
500
529
|
projects = get_projects
|
501
530
|
total_count = 0
|
502
531
|
hit_count = 0
|
503
532
|
miss_count = 0
|
504
533
|
error_count = 0
|
505
534
|
hit_target_md5_cache_set = Set.new
|
535
|
+
miss_target_cache_set = Set.new
|
536
|
+
|
537
|
+
get_custom_config_information
|
506
538
|
|
507
539
|
pre_targets_info = {}
|
540
|
+
|
541
|
+
projects.each do |project|
|
542
|
+
restore_project(project)
|
543
|
+
backup_project(project)
|
544
|
+
end
|
545
|
+
|
546
|
+
clean_temp_files
|
547
|
+
|
548
|
+
projects = get_projects
|
549
|
+
|
508
550
|
projects.each do |project|
|
509
551
|
project.native_targets.each do |target|
|
510
|
-
target.build_phases.delete_if { |phase|
|
511
|
-
phase.class == Xcodeproj::Project::Object::PBXShellScriptBuildPhase and phase.name.include? "ys_"
|
512
|
-
}
|
513
552
|
if can_cache_target(target)
|
514
553
|
total_count = total_count + 1
|
515
554
|
source_files = get_target_source_files(target)
|
@@ -539,58 +578,86 @@ $file_md5_hash = {}
|
|
539
578
|
end
|
540
579
|
end
|
541
580
|
end
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
581
|
+
|
582
|
+
while true
|
583
|
+
projects.each do |project|
|
584
|
+
project.native_targets.each do |target|
|
585
|
+
target_info = pre_targets_info[target]
|
586
|
+
next unless target_info and target_info[:target_status] != CACHE_STATUS_MISS
|
587
|
+
next unless target_info and target_info[:target_status] != CACHE_STATUS_HIT
|
588
|
+
hit_target_cache_dirs = target_info[:hit_target_cache_dir]
|
589
|
+
next unless hit_target_cache_dirs and hit_target_cache_dirs.count > 0
|
590
|
+
target_md5 = target_info[:target_md5]
|
591
|
+
|
592
|
+
target_really_hit_dir = ""
|
593
|
+
target_really_miss = false
|
594
|
+
hit_target_cache_dirs.each do |hit_target_cache_dir|
|
595
|
+
all_dependency_target_exist = true
|
596
|
+
target_really_miss = false
|
597
|
+
hit_targets_info = YAML.load(File.read(hit_target_cache_dir + "/" + FILE_NAME_CONTEXT))
|
598
|
+
if hit_targets_info[:dependency_targets_md5]
|
599
|
+
hit_targets_info[:dependency_targets_md5].each do | item |
|
600
|
+
dependency_target = item[0]
|
601
|
+
dependency_target_md5 = item[1]
|
602
|
+
if $exclude_target.include? dependency_target
|
603
|
+
puts "<INFO> #{target.name} #{target_md5} hit cache, dependency target #{dependency_target}-#{dependency_target_md5} skip check"
|
604
|
+
next
|
605
|
+
end
|
606
|
+
|
607
|
+
if miss_target_cache_set.include? "#{dependency_target}"
|
608
|
+
puts "<INFO> #{target.name} #{target_md5} hit cache, but dependency target #{dependency_target}-#{dependency_target_md5} does not hit"
|
609
|
+
target_really_miss = true
|
610
|
+
all_dependency_target_exist = false
|
611
|
+
break
|
612
|
+
end
|
613
|
+
|
614
|
+
unless hit_target_md5_cache_set.include? "#{dependency_target}-#{dependency_target_md5}"
|
615
|
+
puts "<INFO> #{target.name} #{target_md5} hit cache, but dependency target #{dependency_target}-#{dependency_target_md5} does not hit"
|
616
|
+
all_dependency_target_exist = false
|
617
|
+
target_really_miss = true
|
618
|
+
break
|
619
|
+
end
|
620
|
+
end
|
621
|
+
|
622
|
+
if all_dependency_target_exist
|
623
|
+
target_really_hit_dir = hit_target_cache_dir
|
624
|
+
break
|
625
|
+
end
|
626
|
+
|
627
|
+
if target_really_miss
|
562
628
|
break
|
563
629
|
end
|
564
|
-
end
|
565
|
-
|
566
|
-
if all_dependency_target_exist
|
567
|
-
really_hit_dir = hit_target_cache_dir
|
568
|
-
break
|
569
630
|
end
|
570
631
|
end
|
632
|
+
|
633
|
+
if target_really_hit_dir.length > 0
|
634
|
+
puts "<INFO> #{target.name} #{target_md5} hit cache"
|
635
|
+
hit_count = hit_count + 1
|
636
|
+
hit_target_info = YAML.load(File.read(target_really_hit_dir + "/" + FILE_NAME_CONTEXT))
|
637
|
+
target_info = target_info.merge!(hit_target_info)
|
638
|
+
target_info[:target_status] = CACHE_STATUS_HIT
|
639
|
+
target_info[:hit_target_cache_dir] = target_really_hit_dir
|
640
|
+
inject_copy_action(project, target, target_info)
|
641
|
+
end
|
642
|
+
|
643
|
+
if target_really_miss
|
644
|
+
miss_count = miss_count + 1
|
645
|
+
miss_target_cache_set.add "#{target.name}"
|
646
|
+
hit_target_md5_cache_set.delete "#{target.name}-#{target_info[:target_md5]}"
|
647
|
+
target_info[:target_status] = CACHE_STATUS_MISS
|
648
|
+
target_info.delete(:hit_target_cache_dir)
|
649
|
+
inject_flag_action(project, target)
|
650
|
+
end
|
651
|
+
|
652
|
+
File.write("#{project.path}/#{target.name}.#{FILE_NAME_TARGET_CONTEXT}", target_info.to_yaml)
|
571
653
|
end
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
target_info[:target_status] = CACHE_STATUS_HIT
|
579
|
-
target_info[:hit_target_cache_dir] = really_hit_dir
|
580
|
-
inject_copy_action(project, target, target_info)
|
581
|
-
else
|
582
|
-
puts "<INFO> #{target.name} #{target_md5} miss cache for reason dependency miss"
|
583
|
-
target_info[:target_status] = CACHE_STATUS_MISS
|
584
|
-
target_info.delete(:hit_target_cache_dir)
|
585
|
-
inject_flag_action(project, target)
|
586
|
-
miss_count = miss_count + 1
|
587
|
-
end
|
588
|
-
File.write("#{project.path}/#{target.name}.#{FILE_NAME_TARGET_CONTEXT}", target_info.to_yaml)
|
589
|
-
|
654
|
+
project.save
|
655
|
+
end
|
656
|
+
if total_count == hit_count + miss_count + error_count
|
657
|
+
break
|
658
|
+
else
|
659
|
+
puts "<INFO> continue to find hit cache"
|
590
660
|
end
|
591
|
-
|
592
|
-
backup_project(project)
|
593
|
-
project.save
|
594
661
|
end
|
595
662
|
puts "<INFO> total count: #{total_count}, hit count: #{hit_count}, miss_count: #{miss_count}, error_count: #{error_count}"
|
596
663
|
end
|
@@ -741,7 +808,6 @@ $file_md5_hash = {}
|
|
741
808
|
|
742
809
|
puts "<INFO> total add cache count: #{total_add_count}"
|
743
810
|
end
|
744
|
-
|
745
811
|
|
746
812
|
end
|
747
813
|
|
data/lib/pod_plugin.rb
ADDED
File without changes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: akcache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- yusheng
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: xcodeproj
|
@@ -24,7 +24,7 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.0'
|
27
|
-
description: a cache tool that can
|
27
|
+
description: a cache tool that can reduce xcode archive time
|
28
28
|
email:
|
29
29
|
- 1433233832@qq.com
|
30
30
|
executables:
|
@@ -47,7 +47,9 @@ files:
|
|
47
47
|
- bin/setup
|
48
48
|
- kcache.gemspec
|
49
49
|
- lib/kcache.rb
|
50
|
+
- lib/kcache/README.md
|
50
51
|
- lib/kcache/version.rb
|
52
|
+
- lib/pod_plugin.rb
|
51
53
|
homepage: https://github.com/yusheng00
|
52
54
|
licenses:
|
53
55
|
- MIT
|
@@ -55,7 +57,7 @@ metadata:
|
|
55
57
|
homepage_uri: https://github.com/yusheng00
|
56
58
|
source_code_uri: https://github.com/yusheng00
|
57
59
|
changelog_uri: https://github.com/yusheng00
|
58
|
-
post_install_message:
|
60
|
+
post_install_message:
|
59
61
|
rdoc_options: []
|
60
62
|
require_paths:
|
61
63
|
- lib
|
@@ -70,8 +72,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
70
72
|
- !ruby/object:Gem::Version
|
71
73
|
version: '0'
|
72
74
|
requirements: []
|
73
|
-
rubygems_version: 3.
|
74
|
-
signing_key:
|
75
|
+
rubygems_version: 3.1.6
|
76
|
+
signing_key:
|
75
77
|
specification_version: 4
|
76
78
|
summary: a cache tool
|
77
79
|
test_files: []
|