git-bundle 1.0.10 → 1.0.15

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: f4a6f54ab617ba63055efff63cbf9d37153e72d31854e026f29f488f18fb684c
4
- data.tar.gz: a806019ec6771dd366685e9010378e13307da996e12953c35dc6924d4c92f7b8
3
+ metadata.gz: 12b776d0338d7edbb3ecb6a8e6c41f5489778f61e0d1bd5304d2dd131eb56371
4
+ data.tar.gz: e03aa0c6178a9c3a2a15e2f2103381226df4aba8e1da657aa00e8b74ef5f6b6d
5
5
  SHA512:
6
- metadata.gz: afa4e548fe51edd754276848913b6a28b64feb117fc7986166f2f3a55aecff48b0cfcbd0bbfcc793a6117a3925b160439899c492b5df963b52e1d3818407d57b
7
- data.tar.gz: 3a64d54bd5b22032ba155ed97b374f7e03a035682c236f8876bce70abf717805e1f46c28ea68613966f76dc66b4a48f73802de3b0f83247219d008e5d182fdc2
6
+ metadata.gz: b137c0527c447066095068e005691b3e186fd21e7048513d91411795a20925f8cb4c7ad19daf34a4d4f048199d087d37065d67e5b5f4d5602f085e64c797850d
7
+ data.tar.gz: f6fa7c3fabcee252b780bcbbb476c260ddd634fea984b57d089538e70fcffa8de94999494ee78b81dede17f862b2b6b2a65425b7a73e4aac609fda58bb6b4482
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- git-bundle (1.0.10)
4
+ git-bundle (1.0.14)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -15,4 +15,4 @@ DEPENDENCIES
15
15
  git-bundle!
16
16
 
17
17
  BUNDLED WITH
18
- 1.16.1
18
+ 1.17.3
data/lib/git_bundle.rb CHANGED
@@ -1,10 +1,14 @@
1
1
  require 'bundler'
2
+ require 'yaml'
2
3
  require 'git_bundle/version'
3
4
  require 'git_bundle/console'
4
5
  require 'git_bundle/shell'
5
6
  require 'git_bundle/cli'
6
7
  require 'git_bundle/repository'
7
8
  require 'git_bundle/project'
9
+ require 'git_bundle/branch_config'
8
10
  require 'git_bundle/commands/generic'
9
11
  require 'git_bundle/commands/push'
12
+ require 'git_bundle/commands/checkout'
13
+ require 'git_bundle/commands/generate'
10
14
  require 'git_bundle/commands/version'
@@ -0,0 +1,42 @@
1
+ module GitBundle
2
+ class BranchConfig
3
+ include GitBundle::Console
4
+ BRANCH_CONFIG_FILE = '.gitb.yml'
5
+
6
+ attr_reader :filename
7
+
8
+ def initialize(filename = nil)
9
+ @filename = filename || BRANCH_CONFIG_FILE
10
+ end
11
+
12
+ def path
13
+ File.join(Dir.pwd, filename)
14
+ end
15
+
16
+ def current
17
+ return @current if defined?(@current)
18
+ @current = read
19
+ end
20
+
21
+ def read
22
+ File.exists?(path) ? YAML.load_file(path) || {} : nil
23
+ end
24
+
25
+ def changed?
26
+ current != read
27
+ end
28
+
29
+ def save
30
+ if changed?
31
+ File.open(path, 'w') {|file| file.write(current.to_yaml.lines[1..-1].join)}
32
+ if File.exists?(path)
33
+ puts "\t#{colorize('update', 34, bold: true)}\t#{filename}"
34
+ else
35
+ puts "\t#{colorize('create', 32, bold: true)}\t#{filename}"
36
+ end
37
+ else
38
+ puts "\t#{colorize('identical', 34, bold: true)}\t#{filename}"
39
+ end
40
+ end
41
+ end
42
+ end
@@ -9,14 +9,18 @@ module GitBundle
9
9
 
10
10
  def invoke(args)
11
11
  case args[0]
12
- when nil, '--help', 'help'
13
- puts `git #{args.join(' ')}`.gsub('git', 'gitb')
14
- when 'push'
15
- GitBundle::Commands::Push.new(@project, args[1..-1]).invoke
16
- when '--version'
17
- GitBundle::Commands::Version.new.invoke
18
- else
19
- GitBundle::Commands::Generic.new(@project, args).invoke
12
+ when nil, '--help', 'help'
13
+ puts `git #{args.join(' ')}`.gsub('git', 'gitb')
14
+ when 'push'
15
+ GitBundle::Commands::Push.new(@project, args[1..-1]).invoke
16
+ when 'checkout'
17
+ GitBundle::Commands::Checkout.new(@project, args[1..-1]).invoke
18
+ when 'generate', 'g'
19
+ GitBundle::Commands::Generate.new(@project, args[1..-1]).invoke
20
+ when '--version'
21
+ GitBundle::Commands::Version.new.invoke
22
+ else
23
+ GitBundle::Commands::Generic.new(@project, args).invoke
20
24
  end
21
25
  rescue Bundler::GemfileNotFound => e
22
26
  puts_error("Could not find Gemfile in the current directory")
@@ -0,0 +1,68 @@
1
+ module GitBundle
2
+ module Commands
3
+ class Checkout
4
+ include GitBundle::Console
5
+
6
+ def initialize(project, args)
7
+ @project = project
8
+ @args = args
9
+ end
10
+
11
+ def invoke
12
+ @project.load_dependant_repositories
13
+
14
+ if @args.empty?
15
+ checkout_parallel(@project.dependant_repositories, @project.main_repository.branch)
16
+
17
+ elsif @args.size == 1
18
+ if checkout(@project.main_repository, @args.first)
19
+ checkout_parallel(@project.dependant_repositories, @args.first)
20
+ end
21
+ elsif @args.size == 2 && @args.first == '-b'
22
+ if checkout(@project.main_repository, @args.last, create_new: true, force: true)
23
+ @project.dependant_repositories.each {|r| checkout(r, @args.last, create_new: true)}
24
+ end
25
+ @project.branch_config.save if @project.branch_config.changed?
26
+ elsif @args.size == 2 && (@args.first == '-a' || @args.first == '--all')
27
+ if checkout(@project.main_repository, @args.last)
28
+ @project.dependant_repositories.each {|r| checkout(r, @args.last)}
29
+ end
30
+ @project.branch_config.save if @project.branch_config.changed?
31
+ else
32
+ puts_error "Invalid arguments for checkout. Usage: \n\tgitb checkout\n\tgitb checkout <branch>\n\tgitb checkout -b <new branch>\n\tgitb checkout -a <force branch all repositories>"
33
+ end
34
+ end
35
+
36
+ def checkout(repo, branch, create_new: false, force: false)
37
+ if create_new
38
+ unless force
39
+ puts_repo_heading(repo)
40
+ puts_prompt("Create #{branch}? (Y/N)")
41
+ return unless STDIN.getch.upcase == 'Y'
42
+ end
43
+ args = ['checkout', '-b', branch]
44
+ else
45
+ args = ['checkout', branch]
46
+ end
47
+
48
+ output = repo.execute_git(args, color: true)
49
+ success = $?.exitstatus == 0
50
+ repo.refresh_branch
51
+ puts_repo_heading(repo) unless create_new && !force
52
+ success ? puts(output) : puts_error(output)
53
+ if success && !repo.main && @project.branch_config.current && @project.branch_config.current[repo.name] != branch
54
+ @project.branch_config.current[repo.name] = branch
55
+ end
56
+ success
57
+ end
58
+
59
+ def checkout_parallel(repositories, fallback_branch)
60
+ parallel(repositories) do |repo|
61
+ output = repo.execute_git(['checkout', @project.branch_config.current&.dig(repo.name) || fallback_branch], color: true)
62
+ repo.refresh_branch
63
+ ExecutionResult.new($?.exitstatus != 0, output)
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,18 @@
1
+ module GitBundle
2
+ module Commands
3
+ class Generate
4
+ include GitBundle::Console
5
+
6
+ def initialize(project, args)
7
+ @project = project
8
+ @args = args
9
+ end
10
+
11
+ def invoke
12
+ @project.load_dependant_repositories
13
+ @project.dependant_repositories.each {|p| @project.branch_config.current[p.name] = p.branch}
14
+ @project.branch_config.save
15
+ end
16
+ end
17
+ end
18
+ end
@@ -66,6 +66,7 @@ module GitBundle
66
66
  end
67
67
 
68
68
  private
69
+
69
70
  def prompt_confirm
70
71
  if @project.main_repository.file_changed?('Gemfile')
71
72
  puts_error 'Your Gemfile has uncommitted changes. Commit them first before pushing.'
@@ -74,6 +75,7 @@ module GitBundle
74
75
 
75
76
  commits_to_push = false
76
77
  upstream_branches_missing = []
78
+ diverged_repos = []
77
79
  @project.repositories.each do |repo|
78
80
  commits = repo.commits_not_pushed
79
81
  puts_repo_heading(repo)
@@ -83,6 +85,7 @@ module GitBundle
83
85
  puts 'No changes.'
84
86
  else
85
87
  commits_to_push = true
88
+ diverged_repos << repo if repo.branch != @project.main_repository.branch
86
89
  puts commits
87
90
  end
88
91
  else
@@ -91,6 +94,17 @@ module GitBundle
91
94
  end
92
95
  end
93
96
 
97
+ if diverged_repos.any?
98
+ puts_prompt("\nThese repositories have changes and have diverged from the main application's branch (#{@project.main_repository.branch})")
99
+ puts_diverged_repos(diverged_repos)
100
+ puts_prompt("\nDo you want to continue? (Y/N)")
101
+ if STDIN.getch.upcase == 'Y'
102
+ puts ''
103
+ else
104
+ return false
105
+ end
106
+ end
107
+
94
108
  if !upstream_branches_missing.empty?
95
109
  puts_prompt("Missing upstream branches (#{upstream_branches_missing.join(', ')}) will be created and changes pushed.")
96
110
  puts_prompt('Do you want to continue? (Y/N)')
@@ -23,6 +23,10 @@ module GitBundle
23
23
  puts colorize("\n=== #{repo.name} (#{repo.branch} ⇒ #{new_branch})", COLORS[:heading], true)
24
24
  end
25
25
 
26
+ def puts_diverged_repos(repos)
27
+ repos.each { |repo| puts colorize(" #{repo.name} (#{repo.branch})", COLORS[:prompt], true) }
28
+ end
29
+
26
30
  def puts_heading(text)
27
31
  puts colorize("\n=== #{text}", COLORS[:heading])
28
32
  end
@@ -88,6 +92,7 @@ module GitBundle
88
92
  end
89
93
 
90
94
  private
95
+
91
96
  def colorize(text, color_code, bold = false)
92
97
  if bold
93
98
  "\e[1m\e[#{color_code}m#{text}\e[0m"
@@ -96,4 +101,4 @@ module GitBundle
96
101
  end
97
102
  end
98
103
  end
99
- end
104
+ end
@@ -30,6 +30,10 @@ module GitBundle
30
30
  end
31
31
  end
32
32
 
33
+ def branch_config
34
+ @branch_config ||= GitBundle::BranchConfig.new
35
+ end
36
+
33
37
  def repositories
34
38
  @dependant_repositories + [@main_repository]
35
39
  end
@@ -20,13 +20,13 @@ module GitBundle
20
20
  @name = name
21
21
  @path = path
22
22
  @main = main_repository
23
- @branch = fetch_branch
24
23
  @locked_branch = locked_branch
25
24
  @locked_revision = locked_revision
25
+ refresh_branch
26
26
  end
27
27
 
28
- def fetch_branch
29
- execute_git('rev-parse', '--abbrev-ref', 'HEAD').chomp
28
+ def refresh_branch
29
+ @branch = execute_git('rev-parse', '--abbrev-ref', 'HEAD').chomp
30
30
  end
31
31
 
32
32
  def locked_branch
@@ -1,3 +1,3 @@
1
1
  module GitBundle
2
- VERSION = '1.0.10'
2
+ VERSION = '1.0.15'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-bundle
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.10
4
+ version: 1.0.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pierre Pretorius
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-28 00:00:00.000000000 Z
11
+ date: 2021-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -43,7 +43,10 @@ files:
43
43
  - bin/gitb
44
44
  - git-bundle.gemspec
45
45
  - lib/git_bundle.rb
46
+ - lib/git_bundle/branch_config.rb
46
47
  - lib/git_bundle/cli.rb
48
+ - lib/git_bundle/commands/checkout.rb
49
+ - lib/git_bundle/commands/generate.rb
47
50
  - lib/git_bundle/commands/generic.rb
48
51
  - lib/git_bundle/commands/push.rb
49
52
  - lib/git_bundle/commands/version.rb