git-deploy 0.5.2 → 0.5.3

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.
@@ -28,6 +28,7 @@ class GitDeploy < Thor
28
28
  unless run_test("test -x #{deploy_to}")
29
29
  run ["#{sudo}mkdir -p #{deploy_to}"] do |cmd|
30
30
  cmd << "#{sudo}chown $USER #{deploy_to}" if options.sudo?
31
+ cmd
31
32
  end
32
33
  end
33
34
 
@@ -63,9 +64,12 @@ class GitDeploy < Thor
63
64
  invoke :restart
64
65
  end
65
66
 
66
- desc "log [n=20]", "Shows the last part of the deploy log on the server"
67
- def log(n = 20)
68
- run "tail -n#{n} #{deploy_to}/log/deploy.log"
67
+ desc "log", "Shows the last part of the deploy log on the server"
68
+ method_option :tail, :aliases => '-t', :type => :boolean, :default => false
69
+ method_option :lines, :aliases => '-l', :type => :numeric, :default => 20
70
+ def log(n = nil)
71
+ tail_args = options.tail? ? '-f' : "-n#{n || options.lines}"
72
+ run "tail #{tail_args} #{deploy_to}/log/deploy.log"
69
73
  end
70
74
 
71
75
  desc "upload <files>", "Copy local files to the remote app"
@@ -1,30 +1,23 @@
1
+ require 'uri'
2
+ require 'cgi'
3
+ require 'forwardable'
4
+
1
5
  class GitDeploy
2
6
  module Configuration
3
7
  private
4
8
 
5
- def host
6
- extract_host_and_user unless defined? @host
7
- @host
8
- end
9
+ extend Forwardable
10
+ def_delegator :remote_url, :host
11
+ def_delegator :remote_url, :port, :remote_port
12
+ def_delegator :remote_url, :path, :deploy_to
9
13
 
10
14
  def remote_user
11
- extract_host_and_user unless defined? @user
12
- @user
13
- end
14
-
15
- def extract_host_and_user
16
- info = remote_url.split(':').first.split('@')
17
- if info.size < 2
18
- @user, @host = `whoami`.chomp, info.first
19
- else
20
- @user, @host = *info
15
+ @user ||= begin
16
+ user = remote_url.user
17
+ user ? CGI.unescape(user) : `whoami`.chomp
21
18
  end
22
19
  end
23
20
 
24
- def deploy_to
25
- @deploy_to ||= remote_url.split(':').last
26
- end
27
-
28
21
  def branch
29
22
  'master'
30
23
  end
@@ -50,8 +43,15 @@ class GitDeploy
50
43
  url = remote_urls(remote).first
51
44
  if url.nil?
52
45
  abort "Error: Remote url not found for remote #{remote.inspect}"
53
- elsif url =~ /\bgithub\.com\b/
46
+ elsif url =~ /(^|@)github\.com\b/
54
47
  abort "Error: Remote url for #{remote.inspect} points to GitHub. Can't deploy there!"
48
+ else
49
+ url = 'ssh://' + url.sub(%r{:/?}, '/') unless url =~ %r{^[\w-]+://}
50
+ begin
51
+ url = URI.parse url
52
+ rescue
53
+ abort "Error parsing remote url #{url}"
54
+ end
55
55
  end
56
56
  url
57
57
  end
@@ -90,7 +90,7 @@ class GitDeploy
90
90
 
91
91
  def ssh_connection
92
92
  @ssh ||= begin
93
- ssh = Net::SSH.start(host, remote_user)
93
+ ssh = Net::SSH.start(host, remote_user, :port => remote_port)
94
94
  at_exit { ssh.close }
95
95
  ssh
96
96
  end
@@ -1,9 +1,10 @@
1
- #!/usr/bin/env bash
1
+ #!/bin/bash -i
2
+ set -e
3
+
2
4
  if [ "$GIT_DIR" = "." ]; then
3
5
  # The script has been called as a hook; chdir to the working copy
4
6
  cd ..
5
- GIT_DIR=.git
6
- export GIT_DIR
7
+ unset GIT_DIR
7
8
  fi
8
9
 
9
10
  # try to obtain the usual system PATH
@@ -14,16 +15,17 @@ fi
14
15
 
15
16
  # get the current branch
16
17
  head="$(git symbolic-ref HEAD)"
17
- # abort if we're on a detached head
18
- [ "$?" != "0" ] && exit 1
19
18
 
20
19
  # read the STDIN to detect if this push changed the current branch
21
20
  while read oldrev newrev refname
22
21
  do
23
22
  [ "$refname" = "$head" ] && break
24
23
  done
24
+
25
25
  # abort if there's no update, or in case the branch is deleted
26
- [ -z "${newrev//0}" ] && exit
26
+ if [ -z "${newrev//0}" ]; then
27
+ exit
28
+ fi
27
29
 
28
30
  # check out the latest code into the working copy
29
31
  umask 002
@@ -0,0 +1,48 @@
1
+ require 'rspec'
2
+ require 'git_deploy/configuration'
3
+
4
+ describe GitDeploy::Configuration do
5
+
6
+ subject {
7
+ mod = described_class
8
+ obj = Object.new
9
+ opt = options
10
+ (class << obj; self; end).class_eval do
11
+ include mod
12
+ mod.private_instance_methods.each {|m| public m }
13
+ define_method(:options) { opt }
14
+ end
15
+ obj
16
+ }
17
+
18
+ let(:options) { {:remote => 'production'} }
19
+
20
+ def stub_git_config(cmd, value)
21
+ subject.git_config[cmd] = value
22
+ end
23
+
24
+ def stub_remote_url(url, remote = options[:remote])
25
+ stub_git_config("config --get-all remote.#{remote}.url", url)
26
+ end
27
+
28
+ describe "extracting user/host from remote url" do
29
+ context "ssh url" do
30
+ before { stub_remote_url 'ssh://jon%20doe@example.com:88/path/to/app' }
31
+
32
+ its(:host) { should eq('example.com') }
33
+ its(:remote_port) { should eq(88) }
34
+ its(:remote_user) { should eq('jon doe') }
35
+ its(:deploy_to) { should eq('/path/to/app') }
36
+ end
37
+
38
+ context "scp-style" do
39
+ before { stub_remote_url 'git@example.com:/path/to/app' }
40
+
41
+ its(:host) { should eq('example.com') }
42
+ its(:remote_port) { should be_nil }
43
+ its(:remote_user) { should eq('git') }
44
+ its(:deploy_to) { should eq('/path/to/app') }
45
+ end
46
+ end
47
+
48
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-deploy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.5.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-06 00:00:00.000000000 Z
12
+ date: 2012-03-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
16
- requirement: &70345731615680 !ruby/object:Gem::Requirement
16
+ requirement: &70278714313620 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70345731615680
24
+ version_requirements: *70278714313620
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: net-ssh
27
- requirement: &70345731614440 !ruby/object:Gem::Requirement
27
+ requirement: &70278714313100 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70345731614440
35
+ version_requirements: *70278714313100
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: net-scp
38
- requirement: &70345731613060 !ruby/object:Gem::Requirement
38
+ requirement: &70278714312360 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70345731613060
46
+ version_requirements: *70278714312360
47
47
  description: A tool to install useful git hooks on your remote repository to enable
48
48
  push-based, Heroku-like deployment on your host.
49
49
  email: mislav.marohnic@gmail.com
@@ -61,6 +61,7 @@ files:
61
61
  - lib/git_deploy/templates/restart.sh
62
62
  - lib/git_deploy.rb
63
63
  - lib/hooks/post-receive.sh
64
+ - spec/configuration_spec.rb
64
65
  - README.markdown
65
66
  - LICENSE
66
67
  homepage: https://github.com/mislav/git-deploy