zabel 1.0.3 → 1.0.4

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.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +23 -11
  3. data/bin/zabel +2 -2
  4. data/lib/zabel/version.rb +2 -1
  5. data/lib/zabel.rb +88 -62
  6. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c252d78baa1f53c925ae86fcd441c044e36240b25d4d9586e27e922901c0cc91
4
- data.tar.gz: f3d310882935e4010bdce00b4a0fb248df34639a8af59a35f032491d2b478881
3
+ metadata.gz: 7bbbbd6d01a9148ff002993ceebe5ed44aba4fd905cb1529689ca40406357aff
4
+ data.tar.gz: b0ef1fd3e75802bc1ab90f99f3c2910263e84c0fa4352536a7e7515a7e8515c5
5
5
  SHA512:
6
- metadata.gz: c6adde390bb82e92bbf984530690bf399b062e689696bdff2fcc82e2d4c2cd9109ee54f8ead16308000999577cca6865893580aeaef37228e388c51ab678f62a
7
- data.tar.gz: ab08a8ac353e898945f8d7b7866caf890a027e31729af110d89d1bed1b32d71130ab6a0a282d0bb352ff2bed948e82f8000458a2545897651e7de5c499976c31
6
+ metadata.gz: 842b4eade28085456376de660c8f353108d488caf3f26dcd6308476c2eab2a60cfa67e1c4f5a248cc9a7c4a29d574ecbaa41273d56dd3d323a05a8453698fd11
7
+ data.tar.gz: 28fdc857de4f92a8c6c806305e858bdd94c5fb2888bc86eaa7fb7f9a3b67ea311ef28bf132ffb4690ab5bea9449f62eb62c5a983fb5f0a9bc1988d38f343cf3b
data/README.md CHANGED
@@ -1,9 +1,21 @@
1
- # Zabel
2
-
3
1
  Zabel, is a build cacher for Xcode, using Xcodeproj and MD5, to detect and cache products for targets. Designed for CI by now. Zabel is not Bazel.
4
2
 
5
3
  WARNING: BE CAREFUL IN PRODUCTION ENVIRONMENT.
6
4
 
5
+ - [Feature](https://github.com/WeijunDeng/Zabel#feature)
6
+ - [Installation](https://github.com/WeijunDeng/Zabel#installation)
7
+ - [Usage](https://github.com/WeijunDeng/Zabel#usage)
8
+ - [Advanced usage](https://github.com/WeijunDeng/Zabel#advanced-usage)
9
+ - [Options](https://github.com/WeijunDeng/Zabel#options)
10
+ - [Changelog](https://github.com/WeijunDeng/Zabel#changelog)
11
+ - [Development](https://github.com/WeijunDeng/Zabel#development)
12
+ - [Test](https://github.com/WeijunDeng/Zabel#test)
13
+ - [Contributing](https://github.com/WeijunDeng/Zabel#contributing)
14
+ - [License](https://github.com/WeijunDeng/Zabel#license)
15
+ - [Code of Conduct](https://github.com/WeijunDeng/Zabel#code-of-conduct)
16
+ - [FAQ](https://github.com/WeijunDeng/Zabel#faq)
17
+ - [TODO](https://github.com/WeijunDeng/Zabel#todo)
18
+
7
19
  ## Feature
8
20
 
9
21
  - only support Cocoapods targets now
@@ -65,7 +77,7 @@ Importantly, configuration argument must be set with zabel.
65
77
 
66
78
  ## Options
67
79
 
68
- You can custom some options by yourself.
80
+ You can customize some options by yourself.
69
81
 
70
82
  Zabel stores caches in `~/zabel` by default. You can change this path.
71
83
 
@@ -85,6 +97,7 @@ Zabel detects module map dependecy by default. However, there are bugs of xcodeb
85
97
 
86
98
  ## Changelog
87
99
 
100
+ - 1.0.4 optimize spec checksums; optimize output log; use CACHE_VERSION; should not cache if dependency error
88
101
  - 1.0.3 support bundle install
89
102
  - 1.0.2 support legacy build system
90
103
  - 1.0.1 support xcodebuild archive and fastlane
@@ -107,14 +120,6 @@ ruby test/one.rb test/case/simple/Podfile
107
120
  ruby test/one.rb test/todo/modulemap_file/Podfile
108
121
  ```
109
122
 
110
- ## TODO
111
-
112
- - support more projects and targets, not only Pods
113
- - support and test more clang arguments
114
- - support intermediate cache such as .o and .gcno
115
- - try to support local development
116
- - try to support remote cache server
117
-
118
123
  ## Contributing
119
124
 
120
125
  Bug reports and pull requests are welcome on GitHub at https://github.com/WeijunDeng/Zabel. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
@@ -149,4 +154,11 @@ Q: What about dependencies ?
149
154
 
150
155
  A: Simple dependent files (headers) and implicit dependent targets will be detected. If dependent files of a target change, this target will be recompiled. If dependent targets of a target miss cache, this target and dependent targets will be recompiled.
151
156
 
157
+ ## TODO
158
+
159
+ - support more projects and targets, not only Pods
160
+ - support and test more clang arguments
161
+ - support intermediate cache such as .o and .gcno
162
+ - try to support local development
163
+ - try to support remote cache server
152
164
 
data/bin/zabel CHANGED
@@ -19,11 +19,11 @@ elsif ARGV.include?("-configuration") or ARGV.include?("--configuration")
19
19
 
20
20
  build_start_time = Time.now
21
21
  exit 1 unless system(*ARGV)
22
- puts "[ZABEL]<INFO> duration = #{(Time.now - build_start_time).to_i} s in stage build"
22
+ puts "[ZABEL/I] duration = #{(Time.now - build_start_time).to_i} s in stage build"
23
23
 
24
24
  Zabel::zabel_post(ARGV)
25
25
 
26
- puts "[ZABEL]<INFO> duration = #{(Time.now - total_start_time).to_i} s in stage all"
26
+ puts "[ZABEL/I] duration = #{(Time.now - total_start_time).to_i} s in stage all"
27
27
  elsif ARGV.size == 0 or (ARGV.size == 1 and ARGV[0].include?("v"))
28
28
  puts "ver: #{Zabel::VERSION}"
29
29
  puts "exe: #{$0}"
data/lib/zabel/version.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  module Zabel
2
- VERSION = "1.0.3"
2
+ VERSION = "1.0.4"
3
+ CACHE_VERSION = "1"
3
4
  end
data/lib/zabel.rb CHANGED
@@ -99,6 +99,7 @@ module Zabel
99
99
 
100
100
  def self.zabel_can_cache_target(target)
101
101
  if target.name.start_with? "Pods-"
102
+ puts "[ZABEL/I] skip #{target.name}"
102
103
  return false
103
104
  end
104
105
  if target.class == Xcodeproj::Project::Object::PBXNativeTarget
@@ -107,7 +108,11 @@ module Zabel
107
108
  target.product_type == "com.apple.product-type.library.static" or
108
109
  target.product_type == "com.apple.product-type.framework"
109
110
  return true
111
+ else
112
+ puts "[ZABEL/I] skip #{target.name} #{target.class} #{target.product_type}"
110
113
  end
114
+ else
115
+ puts "[ZABEL/I] skip #{target.name} #{target.class}"
111
116
  end
112
117
  return false
113
118
  end
@@ -125,7 +130,7 @@ module Zabel
125
130
  file = file.gsub("\\ ", " ")
126
131
 
127
132
  unless File.exist? file
128
- puts "[ZABEL]<ERROR> #{target.name} #{file} should exist in dependency file #{dependency_file}"
133
+ puts "[ZABEL/E] #{target.name} #{file} should exist in dependency file #{dependency_file}"
129
134
  return []
130
135
  end
131
136
 
@@ -194,11 +199,11 @@ module Zabel
194
199
  file_time_hash[file] = File.mtime(file)
195
200
  end
196
201
  file_list = file_list.sort_by {|file| - file_time_hash[file].to_f}
197
- puts "[ZABEL]<INFO> keep cache " + file_list.size.to_s + " " + Open3.capture3("du -sh #{zabel_get_cache_root}")[0].to_s
202
+ puts "[ZABEL/I] keep cache " + file_list.size.to_s + " " + Open3.capture3("du -sh #{zabel_get_cache_root}")[0].to_s
198
203
 
199
204
  if file_list.size > 1
200
- puts "[ZABEL]<INFO> keep oldest " + file_time_hash[file_list.last].to_s + " " + file_list.last
201
- puts "[ZABEL]<INFO> keep newest " + file_time_hash[file_list.first].to_s + " " + file_list.first
205
+ puts "[ZABEL/I] keep oldest " + file_time_hash[file_list.last].to_s + " " + file_list.last
206
+ puts "[ZABEL/I] keep newest " + file_time_hash[file_list.first].to_s + " " + file_list.first
202
207
  end
203
208
 
204
209
  if file_list.size > zabel_get_cache_count
@@ -242,7 +247,7 @@ module Zabel
242
247
  project_configuration_content = project_configuration.pretty_print.to_yaml
243
248
  project_xcconfig = ""
244
249
  if project_configuration.base_configuration_reference
245
- config_file_path = project_configuration.base_configuration_reference.real_path
250
+ config_file_path = project_configuration.base_configuration_reference.real_path.to_s
246
251
  if File.exist? config_file_path
247
252
  project_xcconfig = File.read(config_file_path).lines.reject{|line|line.include? "_SEARCH_PATHS"}.sort.join("")
248
253
  end
@@ -251,8 +256,10 @@ module Zabel
251
256
  target_configuration = target.build_configurations.detect { | config | config.name == configuration_name}
252
257
  target_configuration_content = target_configuration.pretty_print.to_yaml
253
258
  target_xcconfig = ""
259
+ target_spec_name = ""
254
260
  if target_configuration.base_configuration_reference
255
- config_file_path = target_configuration.base_configuration_reference.real_path
261
+ config_file_path = target_configuration.base_configuration_reference.real_path.to_s
262
+ target_spec_name = File.basename(File.dirname(config_file_path))
256
263
  if File.exist? config_file_path
257
264
  target_xcconfig = File.read(config_file_path).lines.reject{|line|line.include? "_SEARCH_PATHS"}.sort.join("")
258
265
  end
@@ -289,22 +296,15 @@ module Zabel
289
296
 
290
297
  source_md5_list = []
291
298
  # zabel built-in verison, which will be changed for incompatibility in the future
292
- source_md5_list.push "Zabel version : #{Zabel::VERSION}"
299
+ source_md5_list.push "Zabel cache version : #{Zabel::CACHE_VERSION}"
293
300
  source_md5_list.push "ARGV : #{key_argv.to_s}"
294
301
 
295
- has_found_checksum = false
296
- split_parts = target.name.split("-")
297
- split_parts.each_with_index do | part, index |
298
- spec_name = split_parts[0..index].join("-")
299
- # TODO: to get a explicit spec name from a target.
300
- # Now all potential spec names are push into md5 for safety.
301
- if $zabel_podfile_spec_checksums.has_key? spec_name
302
- source_md5_list.push "SPEC CHECKSUM : #{spec_name} #{$zabel_podfile_spec_checksums[spec_name]}"
303
- has_found_checksum = true
304
- end
305
- end
306
- unless has_found_checksum
307
- puts "[ZABEL]<ERROR> #{target.name} SPEC CHECKSUM should be found"
302
+ # TODO: to get a explicit spec name from a target.
303
+ if target_spec_name.size > 0 and $zabel_podfile_spec_checksums.has_key? target_spec_name
304
+ source_md5_list.push "SPEC CHECKSUM : #{target_spec_name} #{$zabel_podfile_spec_checksums[target_spec_name]}"
305
+ has_found_checksum = true
306
+ else
307
+ puts "[ZABEL/E] #{target.name} #{target_spec_name} SPEC CHECKSUM should be found"
308
308
  end
309
309
 
310
310
  source_md5_list.push "Project : #{File.basename(project.path)}"
@@ -338,10 +338,6 @@ module Zabel
338
338
  command = "rm -rf Pods/*.xcodeproj/*.#{FILE_NAME_TARGET_CONTEXT}"
339
339
  puts command
340
340
  raise unless system command
341
-
342
- command = "rm -rf Pods/zabel.xcodeproj"
343
- puts command
344
- raise unless system command
345
341
  end
346
342
 
347
343
  def self.zabel_add_cache(target, target_context, message)
@@ -362,7 +358,7 @@ module Zabel
362
358
  end
363
359
 
364
360
  unless full_product_name and full_product_name.size > 0 and File.exist? "#{product_dir}/#{full_product_name}"
365
- puts "[ZABEL]<ERROR> #{target.name} #{product_dir}/#{full_product_name} should exist"
361
+ puts "[ZABEL/E] #{target.name} #{product_dir}/#{full_product_name} should exist"
366
362
  return false
367
363
  end
368
364
 
@@ -375,12 +371,12 @@ module Zabel
375
371
 
376
372
  puts command
377
373
  unless system command
378
- puts "[ZABEL]<ERROR> #{command} should succeed"
374
+ puts "[ZABEL/E] #{command} should succeed"
379
375
  return false
380
376
  end
381
377
 
382
378
  if File.exist? target_cache_dir
383
- puts "[ZABEL]<ERROR> #{target_cache_dir} should not exist"
379
+ puts "[ZABEL/E] #{target_cache_dir} should not exist"
384
380
  raise unless system "rm -rf \"#{target_cache_dir}\""
385
381
  return false
386
382
  end
@@ -388,7 +384,7 @@ module Zabel
388
384
  command = "mkdir -p \"#{target_cache_dir}\""
389
385
  unless system command
390
386
  puts command
391
- puts "[ZABEL]<ERROR> #{command} should succeed"
387
+ puts "[ZABEL/E] #{command} should succeed"
392
388
  return false
393
389
  end
394
390
 
@@ -398,11 +394,11 @@ module Zabel
398
394
  puts command
399
395
  unless system command
400
396
  puts command
401
- puts "[ZABEL]<ERROR> #{command} should succeed"
397
+ puts "[ZABEL/E] #{command} should succeed"
402
398
  return false
403
399
  end
404
400
  unless File.exist? cache_product_path
405
- puts "[ZABEL]<ERROR> #{cache_product_path} should exist after mv"
401
+ puts "[ZABEL/E] #{cache_product_path} should exist after mv"
406
402
  return false
407
403
  end
408
404
 
@@ -418,6 +414,7 @@ module Zabel
418
414
  target_context.delete(:target_status)
419
415
  target_context.delete(:potential_hit_target_cache_dirs)
420
416
  target_context.delete(:target_md5_content)
417
+ target_context.delete(:miss_dependency_list)
421
418
  [BUILD_KEY_SYMROOT, BUILD_KEY_CONFIGURATION_BUILD_DIR, BUILD_KEY_OBJROOT, BUILD_KEY_TARGET_TEMP_DIR, BUILD_KEY_PODS_XCFRAMEWORKS_BUILD_DIR, BUILD_KEY_SRCROOT].each do | key |
422
419
  target_context.delete(key)
423
420
  end
@@ -438,7 +435,7 @@ module Zabel
438
435
  configuration_name = argv[argv.index("--configuration") + 1]
439
436
  end
440
437
  unless configuration_name and configuration_name.size > 0
441
- raise "[ZABEL]<ERROR> -configuration or --configuration should be set"
438
+ raise "[ZABEL/E] -configuration or --configuration should be set"
442
439
  end
443
440
 
444
441
  start_time = Time.now
@@ -450,14 +447,17 @@ module Zabel
450
447
  post_targets_context = {}
451
448
 
452
449
  projects.each do | project |
450
+ project_configuration = project.build_configurations.detect { | config | config.name == configuration_name}
451
+ unless project_configuration
452
+ puts "[ZABEL/E] #{project.path} should have config #{configuration_name}"
453
+ next
454
+ end
453
455
  project.native_targets.each do | target |
456
+ target_context_file = "#{project.path}/#{target.name}.#{FILE_NAME_TARGET_CONTEXT}"
457
+ unless File.exist? target_context_file
458
+ next
459
+ end
454
460
  if zabel_can_cache_target(target)
455
-
456
- target_context_file = "#{project.path}/#{target.name}.#{FILE_NAME_TARGET_CONTEXT}"
457
- unless File.exist? target_context_file
458
- next
459
- end
460
-
461
461
  target_context = YAML.load(File.read(target_context_file))
462
462
 
463
463
  if target_context[:target_status] == STATUS_MISS
@@ -469,7 +469,7 @@ module Zabel
469
469
 
470
470
  dependency_files = zabel_get_dependency_files(target, intermediate_dir, product_dir, xcframeworks_build_dir)
471
471
  if source_files.size > 0 and dependency_files.size == 0 and target.product_type != "com.apple.product-type.bundle"
472
- puts "[ZABEL]<ERROR> #{target.name} should have dependent files"
472
+ puts "[ZABEL/E] #{target.name} should have dependent files"
473
473
  next
474
474
  end
475
475
  target_context[:dependency_files] = dependency_files - source_files
@@ -477,7 +477,7 @@ module Zabel
477
477
  target_context[:target_md5_content] = target_md5_content
478
478
  target_md5 = Digest::MD5.hexdigest(target_md5_content)
479
479
  unless target_context[:target_md5] == target_md5
480
- puts "[ZABEL]<ERROR> #{target.name} md5 should not be changed after build"
480
+ puts "[ZABEL/E] #{target.name} md5 should not be changed after build"
481
481
  next
482
482
  end
483
483
  if target_context[BUILD_KEY_SRCROOT] and target_context[BUILD_KEY_SRCROOT].size > 0 and
@@ -485,19 +485,19 @@ module Zabel
485
485
  if File.exist? Dir.pwd + "/" + zabel_get_content_without_pwd("#{target_context[BUILD_KEY_SRCROOT]}/#{target_context[BUILD_KEY_MODULEMAP_FILE]}")
486
486
  target_context[BUILD_KEY_MODULEMAP_FILE] = zabel_get_content_without_pwd("#{target_context[BUILD_KEY_SRCROOT]}/#{target_context[BUILD_KEY_MODULEMAP_FILE]}")
487
487
  else
488
- puts "[ZABEL]<ERROR> #{target.name} #{target_context[BUILD_KEY_MODULEMAP_FILE]} should be supported"
488
+ puts "[ZABEL/E] #{target.name} #{target_context[BUILD_KEY_MODULEMAP_FILE]} should be supported"
489
489
  next
490
490
  end
491
491
  end
492
492
  elsif target_context[:target_status] == STATUS_HIT
493
493
  if target_context[BUILD_KEY_MODULEMAP_FILE] and target_context[BUILD_KEY_MODULEMAP_FILE].size > 0
494
494
  if not File.exist? Dir.pwd + "/" + target_context[BUILD_KEY_MODULEMAP_FILE]
495
- puts "[ZABEL]<ERROR> #{target.name} #{target_context[BUILD_KEY_MODULEMAP_FILE]} should be supported"
495
+ puts "[ZABEL/E] #{target.name} #{target_context[BUILD_KEY_MODULEMAP_FILE]} should be supported"
496
496
  next
497
497
  end
498
498
  end
499
499
  else
500
- puts "[ZABEL]<ERROR> #{target.name} should be hit or miss"
500
+ puts "[ZABEL/E] #{target.name} should be hit or miss"
501
501
  next
502
502
  end
503
503
 
@@ -555,9 +555,17 @@ module Zabel
555
555
 
556
556
  target_context[:dependency_files] = target_context[:dependency_files] - implicit_dependencies
557
557
  dependency_files_md5 = []
558
+ should_not_cache = false
558
559
  target_context[:dependency_files].each do | file |
560
+ if file.start_with? target_context[BUILD_KEY_OBJROOT] + "/" or file.start_with? target_context[BUILD_KEY_SYMROOT] + "/"
561
+ puts "[ZABEL/W] #{target.name} #{file} dependecy should not include build path"
562
+ should_not_cache = true
563
+ break
564
+ end
559
565
  dependency_files_md5.push [zabel_get_content_without_pwd(file), zabel_get_file_md5(file)]
560
566
  end
567
+ next if should_not_cache
568
+
561
569
  target_context[:dependency_files_md5] = dependency_files_md5.sort.uniq
562
570
 
563
571
  dependency_targets_md5 = dependency_targets_set.to_a.map { | target | [target.name, post_targets_context[target][:target_md5]]}
@@ -578,13 +586,13 @@ module Zabel
578
586
 
579
587
  zabel_keep
580
588
 
581
- puts "[ZABEL]<INFO> total add #{add_count}"
589
+ puts "[ZABEL/I] total add #{add_count}"
582
590
 
583
- puts "[ZABEL]<INFO> duration = #{(Time.now - start_time).to_i} s in stage post"
591
+ puts "[ZABEL/I] duration = #{(Time.now - start_time).to_i} s in stage post"
584
592
 
585
593
  end
586
594
 
587
- def self.zabel_get_potential_hit_target_cache_dirs(target, target_md5)
595
+ def self.zabel_get_potential_hit_target_cache_dirs(target, target_md5, miss_dependency_list)
588
596
  dependency_start_time = Time.now
589
597
  target_cache_dirs = Dir.glob(zabel_get_cache_root + "/" + target.name + "-" + target_md5 + "-*")
590
598
  file_time_hash = {}
@@ -603,12 +611,12 @@ module Zabel
603
611
  dependency_md5 = item[1]
604
612
 
605
613
  unless File.exist? dependency_file
606
- puts "[ZABEL]<WARNING> #{target.name} #{dependency_file} file should exist to be hit"
614
+ miss_dependency_list.push "[ZABEL/W] #{target.name} #{dependency_file} file should exist to be hit"
607
615
  dependency_miss = true
608
616
  break
609
617
  end
610
618
  unless zabel_get_file_md5(dependency_file) == dependency_md5
611
- puts "[ZABEL]<WARNING> #{target.name} #{dependency_file} md5 should match to be hit"
619
+ miss_dependency_list.push "[ZABEL/W] #{target.name} #{dependency_file} md5 #{zabel_get_file_md5(dependency_file)} should match #{dependency_md5} to be hit"
612
620
  dependency_miss = true
613
621
  break
614
622
  end
@@ -617,14 +625,14 @@ module Zabel
617
625
  if not target_context[:target_md5] == target_md5
618
626
  command = "rm -rf \"#{target_cache_dir}\""
619
627
  raise unless system command
620
- puts "[ZABEL]<ERROR> #{target.name} #{target_cache_dir} target md5 should match to be verified"
628
+ puts "[ZABEL/E] #{target.name} #{target_cache_dir} target md5 should match to be verified"
621
629
  dependency_miss = false
622
630
  next
623
631
  end
624
632
  if not target_context[:product_md5] == zabel_get_file_md5(target_cache_dir + "/" + FILE_NAME_PRODUCT)
625
633
  command = "rm -rf \"#{target_cache_dir}\""
626
634
  raise unless system command
627
- puts "[ZABEL]<ERROR> #{target.name} #{target_cache_dir} product md5 should match to be verified"
635
+ puts "[ZABEL/E] #{target.name} #{target_cache_dir} product md5 should match to be verified"
628
636
  dependency_miss = false
629
637
  next
630
638
  end
@@ -685,7 +693,7 @@ module Zabel
685
693
  configuration_name = argv[argv.index("--configuration") + 1]
686
694
  end
687
695
  unless configuration_name and configuration_name.size > 0
688
- raise "[ZABEL]<ERROR> -configuration or --configuration should be set"
696
+ raise "[ZABEL/E] -configuration or --configuration should be set"
689
697
  end
690
698
 
691
699
  start_time = Time.now
@@ -708,19 +716,32 @@ module Zabel
708
716
  iteration_count = 0
709
717
 
710
718
  projects.each do | project |
719
+ project_configuration = project.build_configurations.detect { | config | config.name == configuration_name}
720
+ unless project_configuration
721
+ puts "[ZABEL/E] #{project.path} should have config #{configuration_name}"
722
+ next
723
+ end
711
724
  project.native_targets.each do | target |
712
725
  if zabel_can_cache_target(target)
713
726
  source_files = zabel_get_target_source_files(target)
714
- next unless source_files.size >= zabel_get_min_source_file_count
727
+ unless source_files.size >= zabel_get_min_source_file_count
728
+ puts "[ZABEL/I] skip #{target.name} #{source_files.size} >= #{zabel_get_min_source_file_count}"
729
+ next
730
+ end
715
731
  target_md5_content = zabel_get_target_md5_content(project, target, configuration_name, argv, source_files)
716
732
  target_md5 = Digest::MD5.hexdigest(target_md5_content)
717
- potential_hit_target_cache_dirs = zabel_get_potential_hit_target_cache_dirs(target, target_md5)
733
+ miss_dependency_list = []
734
+ potential_hit_target_cache_dirs = zabel_get_potential_hit_target_cache_dirs(target, target_md5, miss_dependency_list)
718
735
 
719
736
  target_context = {}
720
737
  target_context[:target_md5] = target_md5
721
738
  target_context[:potential_hit_target_cache_dirs] = potential_hit_target_cache_dirs
739
+ target_context[:miss_dependency_list] = miss_dependency_list
722
740
  if potential_hit_target_cache_dirs.size == 0
723
- puts "[ZABEL]<INFO> miss #{target.name} #{target_md5} in iteration #{iteration_count}"
741
+ if miss_dependency_list.size > 0
742
+ puts miss_dependency_list.uniq.join("\n")
743
+ end
744
+ puts "[ZABEL/I] miss #{target.name} #{target_md5} in iteration #{iteration_count}"
724
745
  target_context[:target_status] = STATUS_MISS
725
746
  miss_count = miss_count + 1
726
747
  end
@@ -764,7 +785,7 @@ module Zabel
764
785
  end
765
786
  end
766
787
  if hit_target_cache_dir
767
- puts "[ZABEL]<INFO> hit #{target.name} #{target_context[:target_md5]} in iteration #{iteration_count} potential #{potential_hit_target_cache_dirs.size}"
788
+ puts "[ZABEL/I] hit #{target.name} #{target_context[:target_md5]} in iteration #{iteration_count} potential #{potential_hit_target_cache_dirs.size}"
768
789
  target_context[:target_status] = STATUS_HIT
769
790
  target_context[:hit_target_cache_dir] = hit_target_cache_dir
770
791
  hit_count = hit_count + 1
@@ -788,7 +809,11 @@ module Zabel
788
809
  else
789
810
  unless target_context[:target_status] == STATUS_MISS
790
811
  target_context[:target_status] = STATUS_MISS
791
- puts "[ZABEL]<INFO> miss #{target.name} #{target_context[:target_md5]} in iteration #{iteration_count}"
812
+ miss_dependency_list = target_context[:miss_dependency_list]
813
+ if miss_dependency_list.size > 0
814
+ puts miss_dependency_list.uniq.join("\n")
815
+ end
816
+ puts "[ZABEL/I] miss #{target.name} #{target_context[:target_md5]} in iteration #{iteration_count}"
792
817
  miss_count = miss_count + 1
793
818
  end
794
819
  zabel_inject_printenv(project, target)
@@ -806,12 +831,15 @@ module Zabel
806
831
  end
807
832
  end
808
833
 
809
- puts "[ZABEL]<INFO> total #{hit_count + miss_count} hit #{hit_count} miss #{miss_count} iteration #{iteration_count}"
834
+ puts "[ZABEL/I] total #{hit_count + miss_count} hit #{hit_count} miss #{miss_count} iteration #{iteration_count}"
810
835
 
811
- puts "[ZABEL]<INFO> duration = #{(Time.now - start_time).to_i} s in stage pre"
836
+ puts "[ZABEL/I] duration = #{(Time.now - start_time).to_i} s in stage pre"
812
837
  end
813
838
 
814
839
  def self.zabel_extract
840
+ puts "[ZABEL/D] #{Time.now.to_f.to_s}"
841
+ start_time = Time.now
842
+
815
843
  target_cache_dir = ARGV[1]
816
844
 
817
845
  cache_product_path = target_cache_dir + "/#{FILE_NAME_PRODUCT}"
@@ -843,6 +871,9 @@ module Zabel
843
871
  puts command
844
872
  raise unless system command
845
873
  end
874
+
875
+ puts "[ZABEL/I] duration = #{(Time.now - start_time).to_i} s in stage extract"
876
+ puts "[ZABEL/D] #{Time.now.to_f.to_s}"
846
877
  end
847
878
 
848
879
  def self.zabel_printenv
@@ -861,11 +892,6 @@ module Zabel
861
892
  end
862
893
 
863
894
  def self.zabel_clean
864
- if File.exist? "Pods/zabel.xcodeproj"
865
- command = "rm -rf Pods/*.xcodeproj"
866
- puts command
867
- raise unless system command
868
- end
869
895
  zabel_clean_temp_files
870
896
  end
871
897
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zabel
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - dengweijun
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-05 00:00:00.000000000 Z
11
+ date: 2021-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xcodeproj