safe-bundle-update 0.0.1
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 +7 -0
- data/bin/safe-bundle-update +4 -0
- data/lib/safe-bundle-update.rb +52 -0
- metadata +47 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 03e26b4b04201b355043bd0bfa2c14fadd1b5e63
|
4
|
+
data.tar.gz: 6dc56c6128f4e94f010a1711776c25632647d411
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e739d2f758c09c65efacef3e93f9b9795d1c2b9cd2b4bfc77a60ac9ebe6e217d3c9d642f4a36738ab6849b0423ff173af3d2133f5b8040138c3d81fb2101a008
|
7
|
+
data.tar.gz: 1f3c3ca4ea851f976a3d2c83c4ae85719338117a2d05d5c9e97fb2cfef5d6d43aeadad905b47582fc3086f6bc51910e90ffd027d18cf6909d05a2855c4160e5c
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'colorize'
|
2
|
+
|
3
|
+
class SafeBundleUpdate
|
4
|
+
def self.start(*commands)
|
5
|
+
excludes = []
|
6
|
+
gems = fetch_gems
|
7
|
+
puts "#{gems.size} gems to be updated"
|
8
|
+
|
9
|
+
while gem = gems.detect { |name| !excludes.include?(name) }
|
10
|
+
puts "Updating #{gem}..."
|
11
|
+
next excludes << gem unless try_system("bundle update #{gem}", gem)
|
12
|
+
if `git status | grep "nothing to commit, working tree clean" | wc -l`.strip.to_i == 1
|
13
|
+
excludes << gem
|
14
|
+
puts "Nothing changed".red
|
15
|
+
next
|
16
|
+
end
|
17
|
+
next excludes << gem unless commands.all? { |cmd| try_system(cmd, gem, color: :yellow, null: false) }
|
18
|
+
try_system("git add .", gem)
|
19
|
+
try_system("git commit -m 'Updating #{gem}'", gem, color: :green)
|
20
|
+
gems = fetch_gems
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class << self
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def try_system(cmd, gem, color: nil, null: !ENV['SHOW_OUTPUT'])
|
29
|
+
puts "Running `#{cmd}` for #{gem}"
|
30
|
+
|
31
|
+
ok = system(cmd, out: File::NULL)
|
32
|
+
|
33
|
+
if !ok
|
34
|
+
puts "`#{cmd}` failed, reverting and excluding".red
|
35
|
+
system("#{cmd} > /dev/null") if !null
|
36
|
+
system("git add Gemfile**")
|
37
|
+
system("git checkout Gemfile")
|
38
|
+
system("git checkout Gemfile.lock")
|
39
|
+
false
|
40
|
+
elsif color
|
41
|
+
puts "Ran `#{cmd}` for #{gem}".colorize(color)
|
42
|
+
true
|
43
|
+
else
|
44
|
+
true
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def fetch_gems
|
49
|
+
`bundle outdated`.lines.grep(/\*/).map { |l| l.split[1] }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
metadata
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: safe-bundle-update
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Dorian Marié
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-02-28 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: "`bundle update` updates all your gems, this safely updates yours gems
|
14
|
+
one by one"
|
15
|
+
email: dorian@doma.io
|
16
|
+
executables:
|
17
|
+
- safe-bundle-update
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- bin/safe-bundle-update
|
22
|
+
- lib/safe-bundle-update.rb
|
23
|
+
homepage: https://github.com/Dorian/safe-bundle-update
|
24
|
+
licenses:
|
25
|
+
- MIT
|
26
|
+
metadata: {}
|
27
|
+
post_install_message:
|
28
|
+
rdoc_options: []
|
29
|
+
require_paths:
|
30
|
+
- lib
|
31
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
36
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
requirements: []
|
42
|
+
rubyforge_project:
|
43
|
+
rubygems_version: 2.6.8
|
44
|
+
signing_key:
|
45
|
+
specification_version: 4
|
46
|
+
summary: Update gems one by one, running tests and commiting changes
|
47
|
+
test_files: []
|