podsorz 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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
- ]