podsorz 0.0.1 → 0.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c817bbde2a999fb5a286e8e15b2a25427b07865e11e62297b296d4539770ad40
4
- data.tar.gz: 8586b8f32cfb1d2ba847d30cacf806f044483e2fb6e57e2fdb6ee41d9f5ae98c
3
+ metadata.gz: c960d70973147909a6a1898da3101b1655a2a08426a90ae9c39cfbb7a838ffcd
4
+ data.tar.gz: fa464fe262693347b34eef283f83200571376124b60039c69ded9f688daf6575
5
5
  SHA512:
6
- metadata.gz: bfc2ab6a02268c30887d20242676df8ea8c82cb294239e44cd4dfed9507969c8da74b6cd697806df127c31eda35637ec316c25e11c205ae98cad166f1c96d824
7
- data.tar.gz: 6b90b63373e2e80461611e0c6a5f20d716bf0bcb2e685e2dfbdb38117a0e040b233f804ba9917a7c3891eb6810f9ae871587f29dc1d0466d9744a968517ae051
6
+ metadata.gz: 979c4ee2d0dbf7d788aa5a9cab14633850c0c7d36ce7297356f2919aa5fc620ce578b995d25cce96d28453b828f381271fadc0f6b1d993624a088d7520316ef9
7
+ data.tar.gz: 649d4d2148002e5cdcb7140ee9553946f50f9747adf7d8e5da9ac79845ed8ea973785c679b2afe5a9b93b6e97b78fecc7320c26d4d5b208d6a8ff28d17a597a8
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- podsorz (0.0.1)
4
+ podsorz (0.0.2)
5
5
  cocoapods
6
6
  colorize
7
7
  gli (~> 2.16)
@@ -80,7 +80,6 @@ GEM
80
80
  nap (1.1.0)
81
81
  netrc (0.11.0)
82
82
  public_suffix (4.0.6)
83
- rake (10.5.0)
84
83
  ruby-macho (1.4.0)
85
84
  thread_safe (0.3.6)
86
85
  typhoeus (1.4.0)
@@ -98,12 +97,7 @@ PLATFORMS
98
97
  ruby
99
98
 
100
99
  DEPENDENCIES
101
- bundler (~> 1.17)
102
- cocoapods
103
- colorize
104
- gli (~> 2.16)
105
100
  podsorz!
106
- rake (~> 10.0)
107
101
 
108
102
  BUNDLED WITH
109
103
  1.17.2
data/Note ADDED
@@ -0,0 +1,3 @@
1
+
2
+ gem build
3
+ gem push
@@ -6,6 +6,7 @@ require "podsorz/command/switch"
6
6
  require "podsorz/command/commit"
7
7
  require "podsorz/command/publish"
8
8
  require "podsorz/command/install"
9
+ require "podsorz/command/sync"
9
10
 
10
11
  require 'gli'
11
12
 
@@ -28,6 +29,7 @@ module PodsOrz
28
29
  commit_command()
29
30
  publish_command()
30
31
  install_command()
32
+ sync_command()
31
33
 
32
34
  desc "Show podsorz version"
33
35
  command :version do |version|
@@ -0,0 +1,32 @@
1
+ require "podsorz/core/pods_detector"
2
+ require "podsorz/core/pods_git_manager"
3
+
4
+ module PodsOrz
5
+ def self.sync_command
6
+ desc "Sync current_branch latest code from origin/current_branch or --rebase=‘other_branch’ "
7
+ command :sync do |sync|
8
+ sync.flag [:r, :rebase], :desc => "set rebase command on 'other_branch' "
9
+
10
+ sync.example "podsorz sync", desc:"current_branch 'git pull --rebase' "
11
+ sync.example "podsorz sync -r release", desc:"1.current_branch 'git pull --rebase', 2.sync commit from release"
12
+ sync.example "podsorz sync --rebase=feature/xq_2.0.0", desc:"1.current_branch 'git pull --rebase', 2.sync commit from feature/xq_2.0.0"
13
+
14
+ sync.action do |global_options, options, args|
15
+ other_branch = options[:rebase]
16
+ other_branch = other_branch.to_s.strip.chomp
17
+
18
+ dir_path = global_options[:path]
19
+
20
+ detector = PodsOrz::PodsDetector.new(dir_path)
21
+ detector.start_detector()
22
+
23
+ git_manager = PodsOrz::PodsGitManager.new(dir_path)
24
+ is_same = git_manager.ensure_pods_branch()
25
+ exit() unless is_same
26
+
27
+ git_manager.cmd_sync_pod(other_branch)
28
+ end
29
+ end
30
+ end
31
+
32
+ end
@@ -1,6 +1,5 @@
1
1
  require "podsorz/util/logger"
2
2
  require "podsorz/core/podfile_model"
3
- require File.expand_path("../core/podfile_model.rb", File.dirname(__FILE__))
4
3
 
5
4
  module PodsOrz
6
5
 
@@ -98,7 +98,7 @@ module PodsOrz
98
98
  #Commit Command --
99
99
 
100
100
  def pod_commit(is_push, is_notify)
101
- is_push_success = true
101
+ is_commit_success = true
102
102
 
103
103
  pods_list = @orzconfig_parse.fix_pod_list
104
104
  pods_list.each {|pod|
@@ -108,11 +108,13 @@ module PodsOrz
108
108
  @pods_git_operator.commit_local(pod)
109
109
 
110
110
  if is_push
111
- is_push_success = @pods_git_operator.commit_push(pod)
111
+ is_push_success = @pods_git_operator.commit_push(pod)
112
+ is_commit_success = false unless is_push_success
112
113
  end
113
114
 
114
115
  if is_notify && is_push_success
115
- is_push_success = @pods_git_operator.commit_notify(pod)
116
+ is_notify_success = @pods_git_operator.commit_notify(pod)
117
+ is_commit_success = false unless is_notify_success
116
118
  end
117
119
  end
118
120
 
@@ -120,7 +122,7 @@ module PodsOrz
120
122
  Logger.separator
121
123
  }
122
124
 
123
- exit() unless is_push_success
125
+ exit() unless is_commit_success
124
126
 
125
127
  if is_push && is_notify
126
128
  update_push_podfile_io
@@ -202,8 +204,8 @@ module PodsOrz
202
204
  #2.Podspec versoin
203
205
  increase_pods_version(newContent_pod_list)
204
206
 
205
- #3.Merge into master / develop
206
- publish_master_develop_branch(newContent_pod_list)
207
+ #3.Merge into master
208
+ publish_master_branch(newContent_pod_list)
207
209
 
208
210
  #4.Tag
209
211
  add_publish_tag(newContent_pod_list)
@@ -216,6 +218,9 @@ module PodsOrz
216
218
 
217
219
  #6.Update Podfile_orz
218
220
  update_publish_podfile_orz
221
+
222
+ #7.Merge into develop
223
+ publish_develop_branch(newContent_pod_list)
219
224
  end
220
225
 
221
226
  def filter_newContent_pods()
@@ -264,13 +269,30 @@ module PodsOrz
264
269
  exit() unless is_increase_success
265
270
  end
266
271
 
267
- def publish_master_develop_branch(pods_list)
272
+ def publish_master_branch(pods_list)
268
273
  is_publish_success = true
269
274
  pods_list.each {|pod|
270
- Logger.default("【#{pod}】start merge into master & develop ...\n")
275
+ Logger.default("【#{pod}】start merge into master ...\n")
271
276
 
272
277
  command = Thread.new do
273
- each_result = @pods_git_operator.publish_merge(pod)
278
+ each_result = @pods_git_operator.publish_merge(pod, "master")
279
+ is_publish_success = false unless each_result
280
+ end
281
+
282
+ command.join
283
+ Logger.separator
284
+ }
285
+
286
+ exit() unless is_publish_success
287
+ end
288
+
289
+ def publish_develop_branch(pods_list)
290
+ is_publish_success = true
291
+ pods_list.each {|pod|
292
+ Logger.default("【#{pod}】start merge into develop ...\n")
293
+
294
+ command = Thread.new do
295
+ each_result = @pods_git_operator.publish_merge(pod, "develop")
274
296
  is_publish_success = false unless each_result
275
297
  end
276
298
 
@@ -425,5 +447,27 @@ module PodsOrz
425
447
 
426
448
  command.join
427
449
  end
450
+
451
+ #Sync Command --
452
+ def cmd_sync_pod(rebase_branch)
453
+ is_sync_success = true
454
+
455
+ pods_list = @orzconfig_parse.fix_pod_list
456
+ pods_list.each {|pod|
457
+ Logger.default("【#{pod}】 begin sync ...\n")
458
+
459
+ command = Thread.new do
460
+ each_result = @pods_git_operator.sync_pod(pod, rebase_branch)
461
+ is_sync_success = false unless each_result
462
+ end
463
+
464
+ command.join
465
+ Logger.separator
466
+ }
467
+
468
+ exit() unless is_sync_success
469
+
470
+ end
471
+
428
472
  end
429
473
  end
@@ -214,7 +214,7 @@ module PodsOrz
214
214
  is_develop = current_branch.include? "develop"
215
215
  is_release = current_branch.include? "release/"
216
216
  if is_develop || is_release
217
- Logger.error("【#{pod}】on branch: \'#{current_branch}\' forbidden local commit which will be reset hard by other operation.Please manual 'git checkout #{current_branch};git push' first")
217
+ Logger.error("【#{pod}】on branch: \'#{current_branch}\' forbidden local commit which will be reset --hard by other operation.Please manual 'git checkout #{current_branch};git push' first")
218
218
  is_ready = false
219
219
  else
220
220
  Logger.warning("【#{pod}】on branch: \'#{current_branch}\' has local commits that not push remote, please do not forget to push remote in future.")
@@ -296,35 +296,19 @@ module PodsOrz
296
296
 
297
297
  has_remote_branch = @git_operator.has_remote_branch(pod_file_path, current_branch)
298
298
  unless has_remote_branch
299
- @git_operator.push_to_remote(pod_file_path, current_branch)
299
+ is_push_success = @git_operator.push_to_remote(pod_file_path, current_branch)
300
300
  return is_push_success
301
301
  end
302
302
 
303
+ is_pull_success = @git_operator.pull(pod_file_path, current_branch, false)
303
304
 
304
- has_conflicts = false
305
-
306
- pull_cmd_list = []
307
- pull_cmd_list << "cd #{pod_file_path}"
308
- pull_cmd_list << "git fetch origin #{current_branch}"
309
- pull_cmd_list << "git pull --no-ff --no-squash --no-edit"
310
- pull_io_lines = []
311
- IO.popen(pull_cmd_list.join(";")) do |io|
312
- pull_io_lines = io.readlines
313
- pull_io_lines.each do |line|
314
- has_conflicts = true if line.include? "Merge conflict"
315
- end
316
-
317
- io.close
318
- end
319
-
320
- if has_conflicts
321
- Logger.error("【#{pod}】 on branch: \"#{current_branch}\" Merge conflict, please manual fix conflicts.(fix conflicts and run \"git commit\")(use \"git merge --abort\" to abort the merge)")
322
- is_push_success = false
305
+ if is_pull_success
306
+ is_push_success = @git_operator.push_to_remote(pod_file_path, current_branch)
323
307
  else
324
- @git_operator.push_to_remote(pod_file_path, current_branch)
308
+ is_push_success = false
325
309
  end
326
310
 
327
- return is_push_success
311
+ is_push_success
328
312
  end
329
313
 
330
314
  def commit_notify(pod)
@@ -365,25 +349,10 @@ module PodsOrz
365
349
 
366
350
  pod_file_path = File.expand_path(pod, @kx_pods_path)
367
351
  current_branch = self.current_pod_branch(pod)
368
-
369
352
  is_push_success = true
370
- has_conflicts = false
371
-
372
- rebase_cmd_list = []
373
- rebase_cmd_list << "cd #{pod_file_path}"
374
- rebase_cmd_list << "git fetch origin #{base_on_branch}"
375
- rebase_cmd_list << "git rebase origin/#{base_on_branch}"
376
- rebase_cmd_lines = []
377
- IO.popen(rebase_cmd_list.join(";")) do |io|
378
- rebase_cmd_lines = io.readlines
379
- rebase_cmd_lines.each do |line|
380
- has_conflicts = true if line.include? "Merge conflict"
381
- end
382
-
383
- io.close
384
- end
353
+ is_rebase_success = @git_operator.rebase(pod_file_path, base_on_branch)
385
354
 
386
- if has_conflicts
355
+ unless is_rebase_success
387
356
  Logger.error("【#{pod}】 on branch: \"#{current_branch}\" Merge conflict, please manual fix conflicts.(fix conflicts and run \"git rebase --continue\")(use \"git rebase --abort\" to abort the merge)")
388
357
  is_push_success = false
389
358
  else
@@ -530,14 +499,12 @@ module PodsOrz
530
499
  is_ready
531
500
  end
532
501
 
533
- def publish_merge(pod)
502
+ def publish_merge(pod, merge_into_branch)
534
503
  is_merge_success = true
535
504
 
536
505
  is_merge_success = is_publish_ready(pod)
537
506
  return is_merge_success unless is_merge_success
538
507
 
539
- double_check_alert(pod)
540
-
541
508
  pod_file_path = File.expand_path(pod, @kx_pods_path)
542
509
  current_branch = self.current_pod_branch(pod)
543
510
 
@@ -546,33 +513,17 @@ module PodsOrz
546
513
  fetch_cmd_list << "git fetch origin #{current_branch}"
547
514
  fetch_cmd_list << "git reset --hard origin/#{current_branch}"
548
515
  IO.popen(fetch_cmd_list.join(";")) do |io|
549
- io.each do |line|
550
- puts line
551
- end
552
- io.close
516
+ io.each do |line|
517
+ puts line
518
+ end
519
+ io.close
553
520
  end
554
521
 
555
- is_merge_success = publish_merge_branch(pod, "master", current_branch)
556
- return is_merge_success unless is_merge_success
557
-
558
- is_merge_success = publish_merge_branch(pod, "develop", current_branch)
522
+ is_merge_success = publish_merge_branch(pod, merge_into_branch, current_branch)
559
523
 
560
524
  is_merge_success
561
525
  end
562
526
 
563
- def double_check_alert(pod)
564
- Logger.warning("【#{pod}】 即将提交合并到主干分支,请再次确认无异常,选择输入:[continue / stop]")
565
- force_fetch_input = gets
566
- if force_fetch_input.downcase.include? "stop"
567
- Logger.error("【#{pod}】中止,程序已停止")
568
- exit()
569
- end
570
-
571
- unless force_fetch_input.downcase.include? "continue"
572
- double_check_alert(pod)
573
- end
574
- end
575
-
576
527
  def publish_merge_branch(pod, into_branch, from_branch)
577
528
  is_merge_success = true
578
529
  pod_file_path = File.expand_path(pod, @kx_pods_path)
@@ -604,6 +555,7 @@ module PodsOrz
604
555
  push_cmd_list = []
605
556
  push_cmd_list << "cd #{pod_file_path}"
606
557
  push_cmd_list << "git push -u origin #{into_branch}"
558
+ push_cmd_list << "git checkout #{from_branch}"
607
559
  IO.popen(push_cmd_list.join(";")) do |io|
608
560
  io.each do |line|
609
561
  puts line
@@ -695,6 +647,175 @@ module PodsOrz
695
647
 
696
648
  git_tag
697
649
  end
650
+
651
+ #sync cmd
652
+
653
+ def sync_pod(pod, rebase_branch)
654
+ is_sync_success = true
655
+
656
+ is_ready = check_prepare_work(pod)
657
+ unless is_ready
658
+ is_sync_success = false
659
+ return is_sync_success
660
+ end
661
+
662
+ #pull
663
+ is_pull_success = sync_current_branch_pull(pod)
664
+ unless is_pull_success
665
+ is_sync_success = false
666
+ return is_sync_success
667
+ end
668
+
669
+ #rebase
670
+ rebase_branch = rebase_branch.strip.chomp
671
+ if rebase_branch.empty?
672
+ return is_check_success
673
+ end
674
+
675
+ is_prepare_rebase = sync_prepare_rebase(pod, rebase_branch)
676
+ unless is_prepare_rebase
677
+ is_sync_success = false
678
+ return is_sync_success
679
+ end
680
+
681
+ is_rebase_success = sync_rebase(pod, rebase_branch)
682
+ unless is_rebase_success
683
+ is_sync_success = false
684
+ return is_sync_success
685
+ end
686
+
687
+ is_sync_success
688
+ end
689
+
690
+ def sync_current_branch_pull(pod)
691
+ is_pull_success = true
692
+
693
+ pod_file_path = File.expand_path(pod, @kx_pods_path)
694
+ current_branch = @git_operator.current_branch(pod_file_path)
695
+
696
+ has_remote_branch = @git_operator.has_remote_branch(pod_file_path, current_branch)
697
+ if has_remote_branch
698
+ is_pull_success = @git_operator.pull(pod_file_path, current_branch, false)
699
+ end
700
+
701
+ is_pull_success
702
+ end
703
+
704
+ def sync_prepare_rebase(pod, rebase_branch)
705
+ is_check_success = true
706
+
707
+ pod_file_path = File.expand_path(pod, @kx_pods_path)
708
+ has_branch = @git_operator.has_branch(pod_file_path, rebase_branch)
709
+ unless has_branch
710
+ Logger.error("branch '#{rebase_branch}' is not exist")
711
+ is_check_success = false
712
+ return is_check_success
713
+ end
714
+
715
+ is_check_success
716
+ end
717
+
718
+ def sync_rebase(pod, rebase_branch)
719
+ is_rebase_success = true
720
+
721
+ pod_file_path = File.expand_path(pod, @kx_pods_path)
722
+ current_branch = @git_operator.current_branch(pod_file_path)
723
+
724
+ is_rebase_branch_check = sync_rebase_branch_check(pod, rebase_branch)
725
+ unless is_rebase_branch_check
726
+ is_rebase_success = false
727
+ return is_rebase_success
728
+ end
729
+
730
+ #personal
731
+ is_rebase_success = sync_personal_rebase(pod, rebase_branch)
732
+
733
+ is_rebase_success
734
+ end
735
+
736
+ def sync_rebase_branch_check(pod, rebase_branch)
737
+ is_check_success = true
738
+
739
+ pod_file_path = File.expand_path(pod, @kx_pods_path)
740
+ current_branch = @git_operator.current_branch(pod_file_path)
741
+
742
+ #1.except develop
743
+ cmp_result = current_branch.casecmp("develop")
744
+ if cmp_result == 0
745
+ Logger.error("CMD of sync which current_branch can't be 'develop','develop' not support --rebase")
746
+ is_check_success = false
747
+ return is_check_success
748
+ end
749
+
750
+ #2.except release rebase
751
+ is_current_release_branch = current_branch.include? "release"
752
+ if is_current_release_branch
753
+ Logger.error("CMD of sync which current_branch is '#{current_branch}','release' not support --rebase, switch 'bugfix' branch, 'podsorz sync --rebase=develop' instead")
754
+ is_check_success = false
755
+ return is_check_success
756
+ end
757
+
758
+ #3.except rebase myself
759
+ cmp_result = current_branch.casecmp(rebase_branch)
760
+ if cmp_result == 0
761
+ Logger.error("CMD of sync which current_branch :#{current_branch} can't --rebase itself ")
762
+ is_check_success = false
763
+ return is_check_success
764
+ end
765
+
766
+ is_check_success
767
+ end
768
+
769
+ def sync_personal_rebase(pod, rebase_branch)
770
+ is_rebase_success = true
771
+
772
+ pod_file_path = File.expand_path(pod, @kx_pods_path)
773
+ current_branch = @git_operator.current_branch(pod_file_path)
774
+
775
+ Logger.default("【#{pod}】 current_branch:#{current_branch} --rebase=#{rebase_branch} start...")
776
+ p_rebase_success = @git_operator.rebase(pod_file_path, rebase_branch)
777
+
778
+ unless p_rebase_success
779
+ is_rebase_success = false
780
+ Logger.warning("【#{pod}】--rebase=#{rebase_branch} 冲突,请手动解决冲突,并且进行后续强推个人分支操作('git push -f -u orogin #{current_branch}')。切勿反复调用 podsorz sync --rebase=#{rebase_branch} 带来未知情况的错误")
781
+ return is_rebase_success
782
+ end
783
+
784
+ #Personal branch diverged
785
+ has_div = @git_operator.has_diverged(pod_file_path)
786
+ if has_div
787
+ is_rebase_success = double_check_personal_rebase_fore_push(pod)
788
+ else
789
+ Logger.highlight("【#{pod}】 current_branch:#{current_branch} --rebase=#{rebase_branch} completed, use 'podsorz commit --push --notify' to push & notify updated code, or 'git reset commit' role back to old version")
790
+ end
791
+
792
+ is_rebase_success
793
+ end
794
+
795
+ def double_check_personal_rebase_fore_push(pod)
796
+ is_check_success = true
797
+ pod_file_path = File.expand_path(pod, @kx_pods_path)
798
+ current_branch = @git_operator.current_branch(pod_file_path)
799
+
800
+ Logger.warning("【#{pod}】本地分支:#{current_branch} rebase后与远端分支origin/#{current_branch}存在分叉,是否以本地分支'强推'覆盖远端分支,请选择输入:[force / wait]")
801
+ force_input = gets
802
+ if force_input.downcase.include? "wait"
803
+ Logger.warning("取消强推后,需要自行手动'git push -f'提交代码 or 'git reset commit'回退版本,请个人处理分支情况")
804
+ return is_check_success
805
+ end
806
+
807
+ unless force_input.downcase.include? "force"
808
+ is_check_success = double_check_personal_rebase_fore_push(pod)
809
+ return is_check_success
810
+ end
811
+
812
+ #push -f
813
+ is_check_success = @git_operator.push_personal_force_to_remote(pod_file_path, current_branch)
814
+
815
+ is_check_success
816
+ end
817
+
818
+ #class end
698
819
  end
699
820
 
700
821
  end
@@ -1,4 +1,4 @@
1
- require File.expand_path("../util/logger.rb", File.dirname(__FILE__))
1
+ require "podsorz/util/logger"
2
2
 
3
3
  module PodsOrz
4
4
  class GitOperator
@@ -14,6 +14,8 @@ module PodsOrz
14
14
  io.each do |line|
15
15
  has_branch = true if line.include? branch_name
16
16
  end
17
+
18
+ io.close
17
19
  end
18
20
  has_branch
19
21
  end
@@ -24,6 +26,8 @@ module PodsOrz
24
26
  io.each do |line|
25
27
  has_branch = true if line.include? branch_name
26
28
  end
29
+
30
+ io.close
27
31
  end
28
32
  has_branch
29
33
  end
@@ -34,36 +38,28 @@ module PodsOrz
34
38
  io.each do |line|
35
39
  has_branch = true if line.include? branch_name
36
40
  end
41
+
42
+ io.close
37
43
  end
38
44
  has_branch
39
45
  end
40
46
 
41
47
  def checkout(path, branch_name)
48
+ is_checkout_success = true
42
49
  Dir.chdir(path) do
43
50
  IO.popen("git checkout #{branch_name}") do |io|
44
51
  io.each do |line|
45
- Logger.error("Checkout #{branch_name} failed.") if line.include? 'error'
52
+ if line.include? 'error'
53
+ Logger.error("Checkout #{branch_name} failed.")
54
+ is_checkout_success = false
55
+ end
46
56
  end
47
- end
48
- end
49
- end
50
-
51
- def fetch(path)
52
- Dir.chdir(path) do
53
- `git fetch origin`
54
- end
55
- end
56
57
 
57
- def rebase(path, branch_name)
58
- Dir.chdir(path) do
59
- `git rebase origin/#{branch_name}`
58
+ io.close
59
+ end
60
60
  end
61
- end
62
61
 
63
- def clone(path, git_base)
64
- Dir.chdir(path) do
65
- `git clone #{git_base}`
66
- end
62
+ is_checkout_success
67
63
  end
68
64
 
69
65
  def commit(path, message)
@@ -74,15 +70,57 @@ module PodsOrz
74
70
  end
75
71
 
76
72
  def push_to_remote(path, branch_name)
77
- Dir.chdir(path) do
78
- `git push -u origin #{branch_name}`
73
+ is_push_success = true
74
+
75
+ push_lines = []
76
+ IO.popen("cd #{path};git push -u origin #{branch_name}") do |io|
77
+ push_lines = io.readlines
78
+ io.each do |line|
79
+ if line.include? "error"
80
+ is_push_success = false
81
+ end
82
+
83
+ if line.include? "fatal"
84
+ is_push_success = false
85
+ end
86
+ end
87
+
88
+ io.close
89
+ end
90
+
91
+ unless is_push_success
92
+ Logger.error("#{branch_name} push to remote failed!")
93
+ push_lines.each do |line|
94
+ puts(line)
95
+ end
79
96
  end
97
+
98
+ is_push_success
80
99
  end
81
100
 
82
- def pull(path)
83
- Dir.chdir(path) do
84
- `git pull`
101
+ def push_personal_force_to_remote(path, branch_name)
102
+ is_push_success = true
103
+
104
+ push_lines = []
105
+ IO.popen("cd #{path};git push -u -f origin #{branch_name}") do |io|
106
+ push_lines = io.readlines
107
+ io.each do |line|
108
+ if line.include? "error"
109
+ is_push_success = false
110
+ end
111
+ end
112
+
113
+ io.close
114
+ end
115
+
116
+ unless is_push_success
117
+ Logger.error("#{branch_name} push to remote failed!")
118
+ push_lines.each do |line|
119
+ puts(line)
120
+ end
85
121
  end
122
+
123
+ is_push_success
86
124
  end
87
125
 
88
126
  def has_commits(path, branch_name)
@@ -91,7 +129,10 @@ module PodsOrz
91
129
  io.each do |line|
92
130
  has_commits = true if line.include? "commit"
93
131
  end
132
+
133
+ io.close
94
134
  end
135
+
95
136
  has_commits
96
137
  end
97
138
 
@@ -102,7 +143,10 @@ module PodsOrz
102
143
  io.each do |line|
103
144
  has_changes = false if line.include? clear_flag
104
145
  end
146
+
147
+ io.close
105
148
  end
149
+
106
150
  has_changes
107
151
  end
108
152
 
@@ -141,7 +185,10 @@ module PodsOrz
141
185
  io.each do |line|
142
186
  tags << line
143
187
  end
188
+
189
+ io.close
144
190
  end
191
+
145
192
  unless tags.include? "#{version}\n"
146
193
  Dir.chdir(path) do
147
194
  `git tag -a #{version} -m "release: V #{version}" master;`
@@ -149,6 +196,7 @@ module PodsOrz
149
196
  end
150
197
  return
151
198
  end
199
+
152
200
  Logger.highlight("tag already exists in the remote, skip this step")
153
201
  end
154
202
 
@@ -158,7 +206,10 @@ module PodsOrz
158
206
  io.each do |line|
159
207
  tag_list << line
160
208
  end
209
+
210
+ io.close
161
211
  end
212
+
162
213
  tag_list
163
214
  end
164
215
 
@@ -168,7 +219,10 @@ module PodsOrz
168
219
  io.each do |line|
169
220
  unmerged_branch.push(line) if line.include? "#{condition}"
170
221
  end
222
+
223
+ io.close
171
224
  end
225
+
172
226
  if (unmerged_branch.size > 0)
173
227
  unmerged_branch.map { |item|
174
228
  Logger.default(item)
@@ -177,12 +231,6 @@ module PodsOrz
177
231
  end
178
232
  end
179
233
 
180
- def merge(path, branch_name)
181
- IO.popen("cd '#{path}'; git merge #{branch_name}") do |line|
182
- Logger.error("Merge conflict in #{branch_name}") if line.include? 'Merge conflict'
183
- end
184
- end
185
-
186
234
  def compare_branch(path, branch, compare_branch)
187
235
  diff_commit_list = []
188
236
 
@@ -195,14 +243,100 @@ module PodsOrz
195
243
  diff_commit_list << line unless line.strip.chomp.empty?
196
244
  end
197
245
 
246
+ io.close
198
247
  end
199
248
 
200
249
  diff_commit_list
201
250
  end
202
251
 
252
+ def pull(path, branch, is_merge)
253
+ is_pull_success = true
254
+ has_conflicts = false
255
+
256
+ pull_cmd_list = []
257
+ pull_cmd_list << "cd #{path}"
258
+ pull_cmd_list << "git fetch origin #{branch}"
259
+
260
+ if is_merge
261
+ pull_cmd_list << "git pull --no-ff --no-squash --no-edit"
262
+ else
263
+ pull_cmd_list << "git pull --rebase"
264
+ end
265
+
266
+ pull_io_lines = []
267
+ IO.popen(pull_cmd_list.join(";")) do |io|
268
+ pull_io_lines = io.readlines
269
+ pull_io_lines.each do |line|
270
+ has_conflicts = true if line.include? "Merge conflict"
271
+ end
272
+
273
+ io.close
274
+ end
275
+
276
+ if has_conflicts
277
+ if is_merge
278
+ Logger.error("【#{path}】\n on branch: \"#{branch}\" (pull)Merge conflict, please manual fix conflicts.(fix conflicts and run \"git commit\")(use \"git merge --abort\" to abort the merge)")
279
+ else
280
+ Logger.error("【#{path}】\n on branch: \"#{branch}\" (pull)Rebase conflict, please manual fix conflicts.(fix conflicts and run \"git rebase --continue\")(use \"git rebase --abort\" to abort the merge)")
281
+ end
282
+
283
+ is_pull_success = false
284
+ end
285
+
286
+ is_pull_success
287
+
288
+ end
289
+
290
+ def rebase(path, branch)
291
+ is_rebase_success = true
292
+
293
+ is_remote_branch = has_remote_branch(path, branch)
294
+
295
+ rebase_cmd_list = []
296
+ rebase_cmd_list << "cd #{path}"
297
+
298
+ if is_remote_branch
299
+ rebase_cmd_list << "git fetch origin #{branch}"
300
+ rebase_cmd_list << "git rebase origin/#{branch}"
301
+ else
302
+ rebase_cmd_list << "git rebase #{branch}"
303
+ end
304
+
305
+ has_conflicts = false
306
+ rebase_cmd_lines = []
307
+ IO.popen(rebase_cmd_list.join(";")) do |io|
308
+ rebase_cmd_lines = io.readlines
309
+ rebase_cmd_lines.each do |line|
310
+ has_conflicts = true if line.include? "Merge conflict"
311
+ end
312
+
313
+ io.close
314
+ end
315
+
316
+ if has_conflicts
317
+ c_branch = current_branch(path)
318
+ Logger.error("【#{path}】\n on branch: \"#{c_branch}\" Merge conflict, please manual fix conflicts.(fix conflicts and run \"git rebase --continue\")(use \"git rebase --abort\" to abort the merge)")
319
+ is_rebase_success = false
320
+ end
321
+
322
+ is_rebase_success
323
+ end
203
324
 
325
+ def has_diverged(path)
326
+ has_div = false
327
+ IO.popen("cd #{path};git status") do |io|
328
+ rebase_cmd_lines = io.readlines
329
+ rebase_cmd_lines.each do |line|
330
+ has_div = true if line.include? "diverged"
331
+ end
204
332
 
333
+ io.close
334
+ end
335
+
336
+ has_div
337
+ end
205
338
 
339
+ #Class end
206
340
  end
207
341
 
208
342
  end
@@ -1,3 +1,3 @@
1
1
  module PodsOrz
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: podsorz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Xiangqi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-24 00:00:00.000000000 Z
11
+ date: 2021-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gli
@@ -65,8 +65,7 @@ files:
65
65
  - Gemfile
66
66
  - Gemfile.lock
67
67
  - LICENSE.txt
68
- - Podfile
69
- - PodsOrzConfig.rb
68
+ - Note
70
69
  - README.md
71
70
  - Rakefile
72
71
  - bin/podsorz
@@ -76,6 +75,7 @@ files:
76
75
  - lib/podsorz/command/publish.rb
77
76
  - lib/podsorz/command/setup.rb
78
77
  - lib/podsorz/command/switch.rb
78
+ - lib/podsorz/command/sync.rb
79
79
  - lib/podsorz/core/orz_config_templet.rb
80
80
  - lib/podsorz/core/orz_env_detector.rb
81
81
  - lib/podsorz/core/pod_orzconfig_parse.rb
data/Podfile DELETED
File without changes
@@ -1,13 +0,0 @@
1
- module GitConfig
2
- #App 当前版本
3
- APP_RELEASE_VERSION = "2.0.8"
4
-
5
- #作者姓名xiangqi简写
6
- BRANCH_AUTHOR_SUFFIX = "xq"
7
- end
8
-
9
- #想要开发修改的的Pod
10
- $FIX_POD_LIST = [
11
- # "KXModuleOrz",
12
- # "KXModuleQuestionRepo",
13
- ]