scm_workspace 0.2.2 → 0.3.0

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
  SHA1:
3
- metadata.gz: 99dc52c5c303b85855a5926f2f2be19af620b793
4
- data.tar.gz: 15b8d698f5d4a5d7d4970158093309472d635e13
3
+ metadata.gz: 6a6ca321bae08aaafea7d717e1807f8d22f79945
4
+ data.tar.gz: c49506dc81028ed0052301b4b69e8549e972655c
5
5
  SHA512:
6
- metadata.gz: 0a09fe9bf444998f0bafa1c702aa6f4a9cb9b90e0c760dc2aa349abee70392df00fc3f2d9a99dfeca0e3c7b85d74555d301f4c731e851850c8d34545de06e217
7
- data.tar.gz: d223c163a460ea1d96efb6e3afdf747c4f853debcb332fe8a41061c61d4517a0a82cd79915e68525795c793733c62bdef3571c4ab70e5c837ba560f99bee70a6
6
+ metadata.gz: 4aad7efa2ec7fb4db8298c3d65de9be0413a0a6bbf04ade013c5b4ec9a7e7c47074dccc28bca0eb59ff63014cf9ed8dfd04122cebe535623a8f72079cc0dbfcb
7
+ data.tar.gz: 2bc81ed0c8769892b8e8c0e4ea915891ea630b3747c39dca282bd0d50f56806c5932035fb20589472d030b32e2643c7c5c4d76cc08319176b8ba48b8ab3fcbd2
@@ -0,0 +1,44 @@
1
+ require 'fileutils'
2
+ require 'logger'
3
+
4
+ module FileUtils
5
+
6
+ class << self
7
+ def with_logger(logger, level = :info)
8
+ output = LoggerAdapter.new(logger, level)
9
+
10
+ Module.new do
11
+ include FileUtils
12
+ @fileutils_output = output
13
+ @fileutils_label = ''
14
+
15
+ ::FileUtils.collect_method(:verbose).each do |name|
16
+ module_eval(<<-EOS, __FILE__, __LINE__ + 1)
17
+ def #{name}(*args)
18
+ super(*fu_update_option(args, :verbose => true))
19
+ end
20
+ private :#{name}
21
+ EOS
22
+ end
23
+
24
+ extend self
25
+ class << self
26
+ ::FileUtils::METHODS.each do |m|
27
+ public m
28
+ end
29
+ end
30
+ end
31
+
32
+ end
33
+ end
34
+
35
+ class LoggerAdapter
36
+ def initialize(logger, level)
37
+ @logger, @level = logger, level
38
+ end
39
+ def puts(msg)
40
+ @logger.send(@level, msg)
41
+ end
42
+ end
43
+
44
+ end
@@ -1,3 +1,3 @@
1
1
  class ScmWorkspace
2
- VERSION = "0.2.2"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/scm_workspace.rb CHANGED
@@ -7,6 +7,7 @@ require 'tengine/support/core_ext/hash/deep_dup'
7
7
  require 'tengine/support/null_logger'
8
8
 
9
9
  require "scm_workspace/version"
10
+ require "scm_workspace/core_ext/fileutils"
10
11
 
11
12
  class ScmWorkspace
12
13
 
@@ -28,9 +29,8 @@ class ScmWorkspace
28
29
  @logger ||= Tengine::Support::NullLogger.new
29
30
  end
30
31
 
31
- def puts_info(msg)
32
- logger.info(msg)
33
- $stdout.puts(msg) if verbose
32
+ def fileutils
33
+ @fileutils ||= FileUtils.with_logger(logger)
34
34
  end
35
35
 
36
36
  def system!(cmd)
@@ -44,8 +44,11 @@ class ScmWorkspace
44
44
  end
45
45
 
46
46
  if $?.exitstatus == 0
47
- logger.info("\e[33mSUCCESS: %s\e[0m" % cmd)
48
- return buf.join
47
+ msg = "\e[33mSUCCESS: %s\e[0m" % cmd
48
+ r = buf.join
49
+ msg << "\n" << r.strip if verbose
50
+ logger.info(msg)
51
+ return r
49
52
  else
50
53
  msg = "\e[31mFAILURE: %s\n%s\e[0m" % [cmd, buf.join.strip]
51
54
  logger.error(msg)
@@ -54,7 +57,9 @@ class ScmWorkspace
54
57
  end
55
58
 
56
59
  def system_at_root!(cmd)
57
- Dir.chdir(root){ system!(cmd) }
60
+ fileutils.chdir(root) do
61
+ return system!(cmd)
62
+ end
58
63
  end
59
64
 
60
65
  def configure(url)
@@ -71,12 +76,11 @@ class ScmWorkspace
71
76
  logger.info("SCM configure")
72
77
  system!("git clone #{url} #{repo_dir} #{opt}")
73
78
  when :svn then
74
- Dir.chdir(@root) do
79
+ fileutils.chdir(@root) do
75
80
  cmd = "git svn clone #{url} #{repo_dir} #{opt}"
76
81
  cmd << " > /dev/null 2>&1" unless verbose
77
82
  logger.info("*" * 100)
78
83
  logger.info("SCM configure")
79
- puts_info "cd #{@root} && " + cmd
80
84
  system(cmd)
81
85
  end
82
86
  else
@@ -86,10 +90,10 @@ class ScmWorkspace
86
90
 
87
91
  def clear
88
92
  return unless Dir.exist?(repo_dir)
89
- Dir.chdir(repo_dir) do
93
+ fileutils.chdir(repo_dir) do
90
94
  (Dir.glob("*") + Dir.glob(".*")).each do |d|
91
95
  next if d =~ /\A\.+\Z/
92
- FileUtils.remove_entry_secure(d)
96
+ fileutils.remove_entry_secure(d)
93
97
  end
94
98
  end
95
99
  end
@@ -123,7 +127,6 @@ class ScmWorkspace
123
127
  logger.info("-" * 100)
124
128
  case scm_type
125
129
  when :git then
126
- # puts_info("git status")
127
130
  status_text = system_at_root!("git status") # in_repo_dir{ `git status` }
128
131
  value = status_text.scan(/Your branch is behind 'origin\/#{current_branch_name}' by (\d+\s+commits)/)
129
132
  if value && !value.empty?
@@ -217,7 +220,7 @@ class ScmWorkspace
217
220
 
218
221
  def git_current_branch_name(dir = repo_dir)
219
222
  return nil unless Dir.exist?(dir)
220
- Dir.chdir(dir) do
223
+ fileutils.chdir(dir) do
221
224
  # http://qiita.com/sugyan/items/83e060e895fa8ef2038c
222
225
  result = `git symbolic-ref --short HEAD`.strip
223
226
  return result unless result.nil? || result.empty?
@@ -313,7 +316,7 @@ class ScmWorkspace
313
316
  end
314
317
 
315
318
  def in_root
316
- Dir.chdir(repo_dir) do
319
+ fileutils.chdir(repo_dir) do
317
320
  return yield
318
321
  end
319
322
  end
@@ -26,5 +26,6 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency "simplecov"
27
27
 
28
28
  spec.add_development_dependency "pry"
29
+ spec.add_development_dependency "pry-debugger"
29
30
  spec.add_development_dependency "fuubar"
30
31
  end
@@ -0,0 +1,71 @@
1
+ require 'spec_helper'
2
+
3
+ require 'scm_workspace/core_ext/fileutils'
4
+ require "stringio"
5
+ require "tmpdir"
6
+
7
+ describe FileUtils do
8
+
9
+ let(:io){ StringIO.new }
10
+ let(:logger){ Logger.new(io) }
11
+ let(:fu){ FileUtils.with_logger(logger) }
12
+
13
+ describe :chdir do
14
+ it "default" do
15
+ dir = File.expand_path("../..", __FILE__)
16
+ fu.chdir(dir) do
17
+ fu.pwd.should == dir
18
+ end
19
+ io.rewind
20
+ lines = io.read.lines
21
+ lines.length.should == 2
22
+ lines[0].should =~ /\AI, \[.+\]\s+INFO -- : cd #{Regexp.escape(dir)}/
23
+ lines[1].should =~ /\AI, \[.+\]\s+INFO -- : cd -/
24
+ end
25
+
26
+ it "debug" do
27
+ debug_fu = FileUtils.with_logger(logger, :debug)
28
+ dir = File.expand_path("../..", __FILE__)
29
+ debug_fu.chdir(dir) do
30
+ debug_fu.pwd.should == dir
31
+ end
32
+ io.rewind
33
+ lines = io.read.lines
34
+ lines.length.should == 2
35
+ lines[0].should =~ /\AD, \[.+\]\s+DEBUG -- : cd #{Regexp.escape(dir)}/
36
+ lines[1].should =~ /\AD, \[.+\]\s+DEBUG -- : cd -/
37
+ end
38
+ end
39
+
40
+ describe :mkdir_p do
41
+ it "default" do
42
+ path = nil
43
+ Dir.mktmpdir do |dir|
44
+ path = File.join(dir, "foo/bar")
45
+ fu.mkdir_p(path)
46
+ Dir.exist?(path).should be_true
47
+ end
48
+ io.rewind
49
+ lines = io.read.lines
50
+ lines.length.should == 1
51
+ lines[0].should =~ /\AI, \[.+\]\s+INFO -- : mkdir -p #{Regexp.escape(path)}/
52
+ end
53
+ end
54
+
55
+ describe :touch do
56
+ it "default" do
57
+ path = nil
58
+ Dir.mktmpdir do |dir|
59
+ path = File.join(dir, "restart.txt")
60
+ fu.touch(path)
61
+ File.exist?(path).should be_true
62
+ IO.read(path).should == ""
63
+ end
64
+ io.rewind
65
+ lines = io.read.lines
66
+ lines.length.should == 1
67
+ lines[0].should =~ /\AI, \[.+\]\s+INFO -- : touch #{Regexp.escape(path)}/
68
+ end
69
+ end
70
+
71
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scm_workspace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - akima
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-09 00:00:00.000000000 Z
11
+ date: 2013-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tengine_support
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - '>='
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry-debugger
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: fuubar
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -123,8 +137,10 @@ files:
123
137
  - README.md
124
138
  - Rakefile
125
139
  - lib/scm_workspace.rb
140
+ - lib/scm_workspace/core_ext/fileutils.rb
126
141
  - lib/scm_workspace/version.rb
127
142
  - scm_workspace.gemspec
143
+ - spec/scm_workspace/core_ext/fileutils_spec.rb
128
144
  - spec/scm_workspace_spec.rb
129
145
  - spec/spec_helper.rb
130
146
  homepage: ''
@@ -152,6 +168,7 @@ signing_key:
152
168
  specification_version: 4
153
169
  summary: support loading scm repogitory into local workspace
154
170
  test_files:
171
+ - spec/scm_workspace/core_ext/fileutils_spec.rb
155
172
  - spec/scm_workspace_spec.rb
156
173
  - spec/spec_helper.rb
157
174
  has_rdoc: