rebuild 0.3.3 → 0.4.0

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
  SHA1:
3
- metadata.gz: 9f7ff71bbc2b638909372adaeff0be72eb56e85c
4
- data.tar.gz: 731d87947d3a4df2d4420e399b8ffd8bf6d74f6c
3
+ metadata.gz: e33526c3d57fa8c7990afa9c11a72aa765bcfc4c
4
+ data.tar.gz: 8218f4d7b9208c2e70ac068b1ca9c85d364883ef
5
5
  SHA512:
6
- metadata.gz: c14c287fff63835ee7797a990b219eab021dda9720afe1880e438df4e2bc04aee8e305a3afd94d7170332f1cdc683f845c0601e0032bf55e9179490df7a5857b
7
- data.tar.gz: e5d4eb106ffe89af216ac12a81e260dbeb947c2bbcde68ac64507feaeb2af9f8970e1976fd481c914cd150a15f47f53b6c87297accce2d2463873ce2a0b78896
6
+ metadata.gz: f2f0ad4b13f6489ff0d3aa7cb8f89d1c224f947ee31aa4741d9f50a18e5eb90b03e0c82d41b1c9523760248e9de10951e2fafe645689f2e90e369a554c86452f
7
+ data.tar.gz: 9ac96105ce30d59d538c68ce7421b5eb0204e5288dc65156f233d4cb49d5d6bf7c2baa0de4d0070164635fc9091718692e3b1a148d0fef0d10c35355c7a6ca1c
data/README.md CHANGED
@@ -2,35 +2,44 @@
2
2
 
3
3
  Development environment bootstrap automation toolkit for OSX
4
4
 
5
- ![](http://pic.k0kubun.com/EccWEeglRnobUo4.gif)
5
+ ![](http://pic.k0kubun.com/174syGrQYpdTo0N.gif)
6
6
 
7
7
  ## What's this?
8
8
 
9
9
  `rebuild` allows you to achieve mouse-free command line tools installation in OSX Yosemite.
10
- Then `rebuild` clones your GitHub repository and runs all of your bootstrap scripts.
10
+ And `rebuild` clones your GitHub repository and runs all of your bootstrap scripts.
11
11
 
12
12
  You can setup or synchronize your environment by just executing `rebuild <username>/<project>`
13
13
 
14
+ ## Installation
15
+
16
+ ```bash
17
+ $ gem install rebuild
18
+ ```
19
+
14
20
  ## Usage
15
21
 
16
- ### Full automated command line tools installation
22
+ ### Clean-installed bootstrap
17
23
 
18
24
  ```bash
19
- $ sudo gem install rebuild
20
- $ rebuild
25
+ # For example: rebuild k0kubun/dotfiles
26
+ $ rebuild [username]/[repository]
21
27
  ```
22
28
 
23
- You can install command line tools to clean-installed Yosemite only by typing `rebuild`.
29
+ **No need to touch your mouse.** Rebuild will click buttons for you in command line tools installation.
30
+ Just typing the command allows you to reproduce your development environment.
24
31
 
25
- ### Environment Bootstrap
32
+ ### Sync multiple environments
33
+
34
+ ![](http://pic.k0kubun.com/treCcBeBSil20o7.gif)
26
35
 
27
36
  ```bash
28
- $ sudo gem install rebuild
29
- $ rebuild k0kubun/dotfiles
37
+ # force update repository by `-f`
38
+ $ rebuild -f k0kubun/dotfiles
30
39
  ```
31
40
 
32
- After installing command line tools, the archive of [repository](https://github.com/k0kubun/dotfiles) is unzipped to `/tmp/k0kubun/dotfiles`.
33
- Then executes all of `/tmp/k0kubun/dotfiles/*.sh`.
41
+ If you manage your development environment on GitHub repository,
42
+ you can use this gem to synchronize multiple environments.
34
43
 
35
44
  ## Options
36
45
 
@@ -46,13 +55,34 @@ $ rebuild -d ~/src/github.com/k0kubun/dotfiles
46
55
  $ rebuild -s script
47
56
 
48
57
  # You can choose which script to run first by shell pipeline
49
- echo "first.sh second.sh" | rebuild
50
58
  rebuild <<-EOS
51
59
  first.sh
52
60
  second.sh
53
61
  EOS
54
62
  ```
55
63
 
64
+ ## Config
65
+
66
+ You can skip choosing option by ~/.gitconfig
67
+
68
+ ```aconf
69
+ # ~/.gitconfig
70
+ # You can append config template by `rebuild config`
71
+
72
+ [rebuild]
73
+ # if true, everytime git pull
74
+ update = false
75
+
76
+ # you can change script run directory
77
+ scriptdir = script
78
+
79
+ # if present, you can `rebuild` without argument
80
+ repo = k0kubun/dotfiles
81
+
82
+ # cloned directory path
83
+ directory = ~/src/github.com/k0kubun/dotfiles
84
+ ```
85
+
56
86
  ## Supported OS
57
87
 
58
88
  - 10.10 Yosemite
@@ -62,8 +92,7 @@ Prior to 10.8 Mountain Lion, features except command line tools installation are
62
92
 
63
93
  ## TODO
64
94
 
65
- - revision lock
66
- - more flexible upstream pull
95
+ - Write test with rspec
67
96
 
68
97
  ## License
69
98
 
@@ -1,5 +1,6 @@
1
1
  require 'rebuild'
2
2
  require 'optparse'
3
+ require 'unindent'
3
4
 
4
5
  module Rebuild
5
6
  class CLI
@@ -10,7 +11,9 @@ module Rebuild
10
11
 
11
12
  class << self
12
13
  def start
13
- options = DEFAULT_OPTIONS
14
+ @installed = CommandLineTools.installed?
15
+ @gitconfig = GitConfig.instance
16
+ options = DEFAULT_OPTIONS.merge(@gitconfig.rebuild_config)
14
17
 
15
18
  opt = OptionParser.new
16
19
  opt.on('-v', '--version') { |v| options[:version] = true }
@@ -20,19 +23,21 @@ module Rebuild
20
23
 
21
24
  args = opt.parse!(ARGV)
22
25
  return print_version if options[:version]
23
- return show_usage if args.empty? && CommandLineTools.installed?
24
26
 
25
27
  CommandLineTools.install unless CommandLineTools.installed?
26
28
  License.agree unless License.agreed?
27
29
 
28
- return if args.empty?
29
- command = args.first
30
-
31
- if command.include?('/')
32
- stdin = STDIN.read unless STDIN.isatty
33
- bootstrap(command, stdin, options)
30
+ stdin = STDIN.read unless STDIN.isatty
31
+ if args.empty?
32
+ if options[:repo]
33
+ bootstrap(options[:repo], stdin, options)
34
+ elsif @installed
35
+ show_usage
36
+ end
37
+ elsif args.first.include?('/')
38
+ bootstrap(args.first, stdin, options)
34
39
  else
35
- run_command(command)
40
+ run_command(args.first)
36
41
  end
37
42
  end
38
43
 
@@ -49,7 +54,10 @@ module Rebuild
49
54
  def run_command(command)
50
55
  case command
51
56
  when 'brew'
57
+ # This is a secret feature because it is not so useful now
52
58
  command_brew
59
+ when 'config'
60
+ command_config
53
61
  else
54
62
  puts "Command #{command} is not found."
55
63
  puts
@@ -65,12 +73,20 @@ module Rebuild
65
73
  end
66
74
  end
67
75
 
76
+ def command_config
77
+ if @gitconfig.has_rebuild_config?
78
+ puts '.gitconfig is already initialized for rebuild.'
79
+ else
80
+ @gitconfig.add_rebuild_config
81
+ end
82
+ end
83
+
68
84
  def show_usage
69
- puts unindent(<<-EOS) # <- 80 columns
85
+ puts <<-EOS.unindent
70
86
  Commands:
71
87
  rebuild install command line tools, done
72
88
  rebuild USER/PROJECT execute all scripts in GitHub repo's root directory
73
- rebuild brew start homebrew installation and press ENTER for you
89
+ rebuild config add rebuild config template to ~/.gitconfig
74
90
 
75
91
  Options:
76
92
  -v, [--version] Print version
@@ -0,0 +1,75 @@
1
+ require 'rebuild'
2
+ require 'singleton'
3
+ require 'parseconfig'
4
+
5
+ module Rebuild
6
+ class GitConfig
7
+ include Singleton
8
+
9
+ def initialize
10
+ return unless File.exists?(gitconfig_path)
11
+ @config = ParseConfig.new(gitconfig_path)
12
+ end
13
+
14
+ def has_rebuild_config?
15
+ @config.params["rebuild"] != nil
16
+ end
17
+
18
+ def add_rebuild_config
19
+ git_config =
20
+ if File.exists?(gitconfig_path)
21
+ File.read(gitconfig_path)
22
+ else
23
+ ''
24
+ end
25
+ rebuild_config = <<-EOS.unindent
26
+ [rebuild]
27
+ # if true, everytime git pull
28
+ update = false
29
+
30
+ # you can change script run directory
31
+ scriptdir = /
32
+
33
+ # if present, you can `rebuild` without argument
34
+ # repo = username/dotfiles
35
+
36
+ # cloned directory path
37
+ # directory = ~/src/dotfiles
38
+ EOS
39
+
40
+ File.write(gitconfig_path, "#{git_config}\n#{rebuild_config}")
41
+ Logger.info('Succeed to update ~/.gitconfig')
42
+ end
43
+
44
+ def rebuild_config
45
+ symbolize_keys(@config.params["rebuild"] || {})
46
+ end
47
+
48
+ private
49
+
50
+ def symbolize_keys(hash)
51
+ symbolized = {}
52
+
53
+ hash.each do |key, value|
54
+ symbolized[key.to_sym] = normalize_value(value)
55
+ end
56
+ symbolized
57
+ end
58
+
59
+ # TODO: Migrate from parseconfig
60
+ def normalize_value(value)
61
+ case value
62
+ when 'true'
63
+ true
64
+ when 'false'
65
+ false
66
+ else
67
+ value
68
+ end
69
+ end
70
+
71
+ def gitconfig_path
72
+ File.expand_path('~/.gitconfig')
73
+ end
74
+ end
75
+ end
@@ -19,7 +19,7 @@ module Rebuild
19
19
 
20
20
  def fatal(text)
21
21
  puts red("Error: #{text}")
22
- exit(1)
22
+ exit 1
23
23
  end
24
24
 
25
25
  private
@@ -1,3 +1,3 @@
1
1
  module Rebuild
2
- VERSION = '0.3.3'
2
+ VERSION = '0.4.0'
3
3
  end
@@ -18,6 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
+ spec.add_runtime_dependency "unindent", "~> 1.0"
22
+ spec.add_runtime_dependency "parseconfig", "~> 1.0.6"
21
23
  spec.add_development_dependency "pry", "~> 0.10"
22
24
  spec.add_development_dependency "bundler", "~> 1.7"
23
25
  spec.add_development_dependency "rake", "~> 10.0"
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rebuild
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takashi Kokubun
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-26 00:00:00.000000000 Z
11
+ date: 2014-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: unindent
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: parseconfig
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.6
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.0.6
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: pry
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -73,6 +101,7 @@ files:
73
101
  - lib/rebuild.rb
74
102
  - lib/rebuild/cli.rb
75
103
  - lib/rebuild/command_line_tools.rb
104
+ - lib/rebuild/git_config.rb
76
105
  - lib/rebuild/homebrew.rb
77
106
  - lib/rebuild/license.rb
78
107
  - lib/rebuild/logger.rb