dandelion 0.1.3 → 0.1.4

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.
data/lib/dandelion.rb CHANGED
@@ -33,24 +33,29 @@ module Dandelion
33
33
  puts "Connecting to: #{service.uri}"
34
34
 
35
35
  begin
36
- # Deploy changes since remote revision
37
- deployment = Deployment::DiffDeployment.new('.', service, config['exclude'])
38
-
39
- puts "Remote revision: #{deployment.remote_revision}"
40
- puts "Local revision: #{deployment.local_revision}"
41
-
42
- deployment.deploy
43
- rescue Deployment::RemoteRevisionError
44
- # No remote revision, deploy everything
45
- deployment = Deployment::FullDeployment.new('.', service, config['exclude'])
46
-
47
- puts "Remote revision: ---"
48
- puts "Local revision: #{deployment.local_revision}"
49
-
50
- deployment.deploy
36
+ begin
37
+ # Deploy changes since remote revision
38
+ deployment = Deployment::DiffDeployment.new('.', service, config['exclude'])
39
+
40
+ puts "Remote revision: #{deployment.remote_revision}"
41
+ puts "Local revision: #{deployment.local_revision}"
42
+
43
+ deployment.deploy
44
+ rescue Service::RemoteRevisionError
45
+ # No remote revision, deploy everything
46
+ deployment = Deployment::FullDeployment.new('.', service, config['exclude'])
47
+
48
+ puts "Remote revision: ---"
49
+ puts "Local revision: #{deployment.local_revision}"
50
+
51
+ deployment.deploy
52
+ end
53
+
54
+ puts "Deployment complete"
55
+ rescue Git::DiffError
56
+ puts "Failed to deploy"
57
+ puts "Try merging remote changes before deploying again"
51
58
  end
52
-
53
- puts "Deployment complete"
54
59
  end
55
60
  end
56
61
  end
@@ -1,8 +1,6 @@
1
1
  require 'dandelion/git'
2
2
 
3
3
  module Deployment
4
- class RemoteRevisionError < StandardError; end
5
-
6
4
  class Deployment
7
5
  def initialize(dir, service, exclude = nil, revision = 'HEAD')
8
6
  @service = service
@@ -21,6 +19,12 @@ module Deployment
21
19
  def write_revision
22
20
  @service.write('.revision', local_revision)
23
21
  end
22
+
23
+ protected
24
+
25
+ def exclude_file?(file)
26
+ return @exclude.map { |e| file.start_with?(e) }.any?
27
+ end
24
28
  end
25
29
 
26
30
  class DiffDeployment < Deployment
@@ -47,7 +51,7 @@ module Deployment
47
51
 
48
52
  def deploy_changed
49
53
  @diff.changed.each do |file|
50
- if @exclude.include?(file)
54
+ if exclude_file?(file)
51
55
  puts "Skipping file: #{file}"
52
56
  else
53
57
  puts "Uploading file: #{file}"
@@ -58,7 +62,7 @@ module Deployment
58
62
 
59
63
  def deploy_deleted
60
64
  @diff.deleted.each do |file|
61
- if @exclude.include?(file)
65
+ if exclude_file?(file)
62
66
  puts "Skipping file: #{file}"
63
67
  else
64
68
  puts "Deleting file: #{file}"
@@ -78,19 +82,14 @@ module Deployment
78
82
  private
79
83
 
80
84
  def read_revision
81
- begin
82
- @service.read('.revision').chomp
83
- rescue Net::SFTP::StatusException => e
84
- raise unless e.code == 2
85
- raise RemoteRevisionError
86
- end
85
+ @service.read('.revision').chomp
87
86
  end
88
87
  end
89
88
 
90
89
  class FullDeployment < Deployment
91
90
  def deploy
92
91
  @tree.files.each do |file|
93
- unless @exclude.include?(file)
92
+ unless exclude_file?(file)
94
93
  puts "Uploading file: #{file}"
95
94
  @service.write(file, @tree.show(file))
96
95
  end
data/lib/dandelion/git.rb CHANGED
@@ -1,12 +1,15 @@
1
1
  require 'grit'
2
2
 
3
3
  module Git
4
+ class DiffError < StandardError; end
5
+
4
6
  class Diff
5
7
  attr_reader :revision
6
8
 
7
9
  def initialize(dir, revision)
8
10
  @revision = revision
9
11
  @raw = `cd #{dir}; git diff --name-status #{@revision} HEAD`
12
+ check_state!
10
13
  end
11
14
 
12
15
  def changed
@@ -27,6 +30,12 @@ module Git
27
30
  end
28
31
  items
29
32
  end
33
+
34
+ def check_state!
35
+ if $?.exitstatus != 0
36
+ raise DiffError
37
+ end
38
+ end
30
39
  end
31
40
 
32
41
  class Tree
@@ -2,6 +2,8 @@ require 'net/sftp'
2
2
  require 'tempfile'
3
3
 
4
4
  module Service
5
+ class RemoteRevisionError < StandardError; end
6
+
5
7
  class Service
6
8
  def initialize(host, username, path)
7
9
  @host = host
@@ -22,8 +24,13 @@ module Service
22
24
  end
23
25
 
24
26
  def read(file)
25
- @sftp.file.open(File.join(@path, file), 'r') do |f|
26
- f.gets
27
+ begin
28
+ @sftp.file.open(File.join(@path, file), 'r') do |f|
29
+ f.gets
30
+ end
31
+ rescue Net::SFTP::StatusException => e
32
+ raise unless e.code == 2
33
+ raise RemoteRevisionError
27
34
  end
28
35
  end
29
36
 
@@ -44,9 +51,13 @@ module Service
44
51
  end
45
52
 
46
53
  def delete(file)
47
- path = File.join(@path, file)
48
- @sftp.remove!(path)
49
- cleanup(File.dirname(path))
54
+ begin
55
+ path = File.join(@path, file)
56
+ @sftp.remove!(path)
57
+ cleanup(File.dirname(path))
58
+ rescue Net::SFTP::StatusException => e
59
+ raise unless e.code == 2
60
+ end
50
61
  end
51
62
 
52
63
  private
@@ -1,3 +1,3 @@
1
1
  module Dandelion
2
- VERSION = '0.1.3'
2
+ VERSION = '0.1.4'
3
3
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: dandelion
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.3
5
+ version: 0.1.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - Scott Nelson
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-02-09 00:00:00 -05:00
13
+ date: 2011-03-10 00:00:00 -05:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -83,6 +83,6 @@ rubyforge_project:
83
83
  rubygems_version: 1.5.0
84
84
  signing_key:
85
85
  specification_version: 3
86
- summary: dandelion-0.1.3
86
+ summary: dandelion-0.1.4
87
87
  test_files: []
88
88