git-bundle 1.0.10 → 1.0.11

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: 969518eba015e3e24e4c1a3a99235553eebd7a6df95aac38eede235021a95210
4
+ data.tar.gz: aa3e87047bbda8e7ce7b7c44f74b0def4fbf1c3c34a9eedac0a15716584ff114
5
5
  SHA512:
6
- metadata.gz: afa4e548fe51edd754276848913b6a28b64feb117fc7986166f2f3a55aecff48b0cfcbd0bbfcc793a6117a3925b160439899c492b5df963b52e1d3818407d57b
7
- data.tar.gz: 3a64d54bd5b22032ba155ed97b374f7e03a035682c236f8876bce70abf717805e1f46c28ea68613966f76dc66b4a48f73802de3b0f83247219d008e5d182fdc2
6
+ metadata.gz: 87167ce9f08edd4f318fa392b8c4dcec4ce24bc2f5368fb71cf77e5c405030b82dbfac1550c325b529b7a62c8913c3b643c19ee2bc5432348da7fd9d5cdbd1df
7
+ data.tar.gz: e8bfec3b2f616be96f6cb4758711db8f82a7bde511a10c5d2f52ed314e1e01e47938f248bc655662678ba8859af863e36dd6a25105ec6815b15cc4287ced17de
@@ -1,4 +1,5 @@
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'
@@ -7,4 +8,5 @@ require 'git_bundle/repository'
7
8
  require 'git_bundle/project'
8
9
  require 'git_bundle/commands/generic'
9
10
  require 'git_bundle/commands/push'
11
+ require 'git_bundle/commands/checkout'
10
12
  require 'git_bundle/commands/version'
@@ -13,6 +13,8 @@ module GitBundle
13
13
  puts `git #{args.join(' ')}`.gsub('git', 'gitb')
14
14
  when 'push'
15
15
  GitBundle::Commands::Push.new(@project, args[1..-1]).invoke
16
+ when 'checkout'
17
+ GitBundle::Commands::Checkout.new(@project, args[1..-1]).invoke
16
18
  when '--version'
17
19
  GitBundle::Commands::Version.new.invoke
18
20
  else
@@ -0,0 +1,78 @@
1
+ module GitBundle
2
+ module Commands
3
+ class Checkout
4
+ BRANCH_CONFIG_FILE = '.gitb.yml'
5
+ include GitBundle::Console
6
+
7
+ def initialize(project, args)
8
+ @project = project
9
+ @args = args
10
+ end
11
+
12
+ def invoke
13
+ @project.load_dependant_repositories
14
+
15
+ if @args.empty?
16
+ checkout_parallel(@project.dependant_repositories, @project.main_repository.branch)
17
+
18
+ elsif @args.size == 1
19
+ if checkout(@project.main_repository, @args.first)
20
+ checkout_parallel(@project.dependant_repositories, @args.first)
21
+ end
22
+
23
+ elsif @args.size == 2 && @args.first == '-b'
24
+ if checkout(@project.main_repository, @args.last, create_new: true, force: true)
25
+ @project.dependant_repositories.each {|r| checkout(r, @args.last, create_new: true)}
26
+ end
27
+ else
28
+ puts_error "Invalid arguments for checkout. Usage: \n\tgitb checkout\n\tgitb checkout <branch>\n\tgitb checkout -b <new_branch>"
29
+ end
30
+ end
31
+
32
+ def checkout(repo, branch, create_new: false, force: false)
33
+ if create_new
34
+ unless force
35
+ puts_repo_heading(repo)
36
+ puts_prompt("Create #{branch}? (Y/N)")
37
+ return unless STDIN.getch.upcase == 'Y'
38
+ end
39
+ args = ['checkout', '-b', branch]
40
+ else
41
+ args = ['checkout', branch]
42
+ end
43
+
44
+ output = repo.execute_git(args, color: true)
45
+ success = $?.exitstatus == 0
46
+ repo.refresh_branch
47
+ puts_repo_heading(repo) unless create_new && !force
48
+ success ? puts(output) : puts_error(output)
49
+ if create_new && success && branch_config
50
+ branch_config[repo.name] = branch
51
+ write_branch_config
52
+ end
53
+ success
54
+ end
55
+
56
+ def checkout_parallel(repositories, fallback_branch)
57
+ parallel(repositories) do |repo|
58
+ output = repo.execute_git(['checkout', branch_config[repo.name] || fallback_branch], color: true)
59
+ repo.refresh_branch
60
+ ExecutionResult.new($?.exitstatus != 0, output)
61
+ end
62
+ end
63
+
64
+ def branch_config
65
+ return @branch_config if defined?(@branch_config)
66
+ @branch_config ||= File.exists?(config_file) ? YAML.load_file(config_file) || {} : nil
67
+ end
68
+
69
+ def config_file
70
+ File.join(Dir.pwd, BRANCH_CONFIG_FILE)
71
+ end
72
+
73
+ def write_branch_config
74
+ File.open(File.join(Dir.pwd, BRANCH_CONFIG_FILE), 'w') {|file| file.write(branch_config.to_yaml.lines[1..-1].join)}
75
+ end
76
+ end
77
+ end
78
+ 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.11'
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.11
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: 2020-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -44,6 +44,7 @@ files:
44
44
  - git-bundle.gemspec
45
45
  - lib/git_bundle.rb
46
46
  - lib/git_bundle/cli.rb
47
+ - lib/git_bundle/commands/checkout.rb
47
48
  - lib/git_bundle/commands/generic.rb
48
49
  - lib/git_bundle/commands/push.rb
49
50
  - lib/git_bundle/commands/version.rb