capistrano-git-copy 0.7.0 → 0.8.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: b2af2b9b1eb48bc206244ecbda119ffa9769e978
4
- data.tar.gz: 3dd5ff5a4a71cdb64fef39f0875bb5f92f1a9177
3
+ metadata.gz: da14278f5b4f4b247cf32afd34a66748b2443cc2
4
+ data.tar.gz: 757ddb4c2fa4135242423b66ce9746bfcc0b84f7
5
5
  SHA512:
6
- metadata.gz: 5d4a0f91a0780fadb3c11d0fbd914a47011d24af088aec896d34fa440f18b721769b5d755b1733d7646aded5ad4ff39aca682f77cb915a9a814620394f1824ff
7
- data.tar.gz: a2e88cc490728d6943257563975d87e08ee5cc8cd2f4fdfe18f9714ce543e069a40b81eaae208011346d4c5237713892dcc1639f22522c3c0aeaccb080ca4d45
6
+ metadata.gz: 5b8eaeae3a93a485d221921ec82dcf8095efff3bf076f9746747668c76429ac8fe63178c62cea5a7b37cf0e00a5c72ebd0dc57c91acb7b5176a004bf34145bc8
7
+ data.tar.gz: e8bddba412086a66be0152e68fa2839ac62a6ad780335e56fa4df869b0d54e0ce3e19d8cb427ddbd2baf6166ceec611bea40d6e7a43f1192d8ff6c42e7c836bc
@@ -0,0 +1,6 @@
1
+ # Change Log
2
+
3
+ ## 0.8.0 (2015-04-07)
4
+ ### Changes
5
+ - changed namespace from Capistrano::Git::Copy to Capistrano::GitCopy to avoid problems when using it in conjunction with build-in git support from capistrano
6
+ - strip whitespaces from branch for checking revision
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
  [![Dependencies](https://img.shields.io/gemnasium/ydkn/capistrano-git-copy.svg)](https://gemnasium.com/ydkn/capistrano-git-copy)
3
3
  [![Code Climate](https://img.shields.io/codeclimate/github/ydkn/capistrano-git-copy.svg)](https://codeclimate.com/github/ydkn/capistrano-git-copy)
4
4
 
5
- # Capistrano::GIT::Copy
5
+ # Capistrano::GitCopy
6
6
 
7
7
  Creates a tar archive locally from the git repository and uploads it to the remote server.
8
8
 
@@ -1,11 +1,11 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'capistrano/git/copy/version'
4
+ require 'capistrano/git_copy/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'capistrano-git-copy'
8
- spec.version = Capistrano::Git::Copy::VERSION
8
+ spec.version = Capistrano::GitCopy::VERSION
9
9
  spec.authors = ['Florian Schwab']
10
10
  spec.email = ['me@ydkn.de']
11
11
  spec.description = 'Copy local git repository deploy strategy for capistrano'
@@ -1,3 +1 @@
1
- require 'capistrano/git/copy/utility'
2
-
3
- load File.expand_path('../copy/tasks/deploy.cap', __FILE__)
1
+ require 'capistrano/git_copy'
@@ -1,6 +1,6 @@
1
1
  namespace :git_copy do
2
2
  def git_copy_utility
3
- @git_copy_utility ||= Capistrano::Git::Copy::Utility.new(self)
3
+ @git_copy_utility ||= Capistrano::GitCopy::Utility.new(self)
4
4
  end
5
5
 
6
6
  task :wrapper do; end
@@ -1 +1,3 @@
1
- require 'capistrano/git/copy'
1
+ require 'capistrano/git_copy/utility'
2
+
3
+ load File.expand_path('../git_copy/tasks/deploy.cap', __FILE__)
@@ -0,0 +1,61 @@
1
+ namespace :git_copy do
2
+ def git_copy_utility
3
+ @git_copy_utility ||= Capistrano::GitCopy::Utility.new(self)
4
+ end
5
+
6
+ task :wrapper do; end
7
+
8
+ desc 'Check that the repository is reachable'
9
+ task check: :'git_copy:wrapper' do
10
+ run_locally do
11
+ git_copy_utility.check
12
+ end
13
+ end
14
+
15
+ desc 'Clone the repo to the cache'
16
+ task clone: :'git_copy:wrapper' do
17
+ run_locally do
18
+ if git_copy_utility.test
19
+ info t(:mirror_exists, at: git_copy_utility.repo_path)
20
+ else
21
+ git_copy_utility.clone
22
+ end
23
+ end
24
+ end
25
+
26
+ desc 'Update the repo mirror to reflect the origin state'
27
+ task update: :'git_copy:clone' do
28
+ run_locally do
29
+ within git_copy_utility.repo_path do
30
+ git_copy_utility.update
31
+ end
32
+ end
33
+ end
34
+
35
+ desc 'Copy repo to releases'
36
+ task create_release: :'git_copy:update' do
37
+ run_locally do
38
+ within git_copy_utility.repo_path do
39
+ git_copy_utility.prepare_release
40
+ end
41
+ end
42
+
43
+ on release_roles :all do
44
+ git_copy_utility.release
45
+ end
46
+ end
47
+
48
+ desc 'Determine the revision that will be deployed'
49
+ task :set_current_revision do
50
+ run_locally do
51
+ set :current_revision, git_copy_utility.fetch_revision
52
+ end
53
+ end
54
+
55
+ desc 'Clean repo cache'
56
+ task :cleanup do
57
+ run_locally do
58
+ git_copy_utility.cleanup
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,165 @@
1
+ require 'tmpdir'
2
+ require 'digest/md5'
3
+
4
+ module Capistrano
5
+ module GitCopy
6
+ # Utility stuff to avoid cluttering of deploy.cap
7
+ class Utility
8
+ def initialize(context)
9
+ @context = context
10
+ end
11
+
12
+ # Check if repo cache exists
13
+ #
14
+ # @return [Boolean] indicates if repo cache exists
15
+ def test
16
+ test! " [ -d #{repo_path} ] "
17
+ end
18
+
19
+ # Check if repo is accessible
20
+ #
21
+ # @return void
22
+ def check
23
+ git :'ls-remote --heads', repo_url
24
+ end
25
+
26
+ # Clone repo to cache
27
+ #
28
+ # @return void
29
+ def clone
30
+ execute :mkdir, '-p', tmp_path
31
+
32
+ git :clone, fetch(:repo_url), repo_path
33
+ end
34
+
35
+ # Update repo and submodules to branch
36
+ #
37
+ # @return void
38
+ def update
39
+ git :remote, :update
40
+ git :reset, '--hard', commit_hash
41
+
42
+ # submodules
43
+ git :submodule, :init
44
+ git :submodule, :update
45
+ git :submodule, :foreach, '--recursive', :git, :submodule, :update, '--init'
46
+
47
+ # cleanup
48
+ git :clean, '-d', '-f'
49
+ git :submodule, :foreach, '--recursive', :git, :clean, '-d', '-f'
50
+ end
51
+
52
+ # Create tar archive
53
+ #
54
+ # @return void
55
+ def prepare_release
56
+ execute git_archive_all_bin, "--prefix=''", archive_path
57
+ end
58
+
59
+ # Upload and extract release
60
+ #
61
+ # @return void
62
+ def release
63
+ remote_archive_path = File.join(fetch(:deploy_to), File.basename(archive_path))
64
+
65
+ upload! archive_path, remote_archive_path
66
+
67
+ execute :mkdir, '-p', release_path
68
+ execute :tar, '-f', remote_archive_path, '-x', '-C', release_path
69
+ execute :rm, '-f', remote_archive_path
70
+ end
71
+
72
+ # Set deployed revision
73
+ #
74
+ # @return void
75
+ def fetch_revision
76
+ capture(:git, 'rev-list', '--max-count=1', '--abbrev-commit', fetch(:branch)).strip
77
+ end
78
+
79
+ # Cleanup repo cache
80
+ #
81
+ # @return void
82
+ def cleanup
83
+ execute :rm, '-rf', tmp_path
84
+
85
+ info 'Local repo cache was removed'
86
+ end
87
+
88
+ # Temporary path for all git-copy operations
89
+ #
90
+ # @return [String]
91
+ def tmp_path
92
+ @_tmp_path ||= File.join(Dir.tmpdir, deploy_id)
93
+ end
94
+
95
+ # Path to repo cache
96
+ #
97
+ # @return [String]
98
+ def repo_path
99
+ @_repo_path ||= File.join(tmp_path, 'repo')
100
+ end
101
+
102
+ # Path to archive
103
+ #
104
+ # @return [String]
105
+ def archive_path
106
+ @_archive_path ||= File.join(tmp_path, 'archive.tar.gz')
107
+ end
108
+
109
+ private
110
+
111
+ def fetch(*args)
112
+ @context.fetch(*args)
113
+ end
114
+
115
+ def test!(*args)
116
+ @context.test(*args)
117
+ end
118
+
119
+ def execute(*args)
120
+ @context.execute(*args)
121
+ end
122
+
123
+ def capture(*args)
124
+ @context.capture(*args)
125
+ end
126
+
127
+ def upload!(*args)
128
+ @context.upload!(*args)
129
+ end
130
+
131
+ def info(*args)
132
+ @context.info(*args)
133
+ end
134
+
135
+ def git(*args)
136
+ args.unshift(:git)
137
+ execute(*args)
138
+ end
139
+
140
+ def git_archive_all_bin
141
+ File.expand_path('../../../../vendor/git-archive-all/git-archive-all', __FILE__)
142
+ end
143
+
144
+ def deploy_id
145
+ [
146
+ fetch(:application),
147
+ fetch(:stage),
148
+ Digest::MD5.hexdigest(fetch(:repo_url))[0..7]
149
+ ].compact.join('_')
150
+ end
151
+
152
+ def commit_hash
153
+ return @_commit_hash if @_commit_hash
154
+
155
+ branch = fetch(:branch, 'master').strip
156
+
157
+ if test! :git, 'rev-parse', "origin/#{branch}", '>/dev/null 2>/dev/null'
158
+ @_commit_hash = capture(:git, 'rev-parse', "origin/#{branch}").strip
159
+ else
160
+ @_commit_hash = capture(:git, 'rev-parse', branch).strip
161
+ end
162
+ end
163
+ end
164
+ end
165
+ end
@@ -0,0 +1,8 @@
1
+ # Capistrano
2
+ module Capistrano
3
+ # GitCopy
4
+ module GitCopy
5
+ # gem version
6
+ VERSION = '0.8.0'
7
+ end
8
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-git-copy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Schwab
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-29 00:00:00.000000000 Z
11
+ date: 2015-04-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano
@@ -81,6 +81,7 @@ extra_rdoc_files: []
81
81
  files:
82
82
  - ".gitignore"
83
83
  - ".gitmodules"
84
+ - CHANGELOG.md
84
85
  - Gemfile
85
86
  - LICENSE.txt
86
87
  - README.md
@@ -88,9 +89,10 @@ files:
88
89
  - capistrano-git-copy.gemspec
89
90
  - lib/capistrano/git/copy.rb
90
91
  - lib/capistrano/git/copy/tasks/deploy.cap
91
- - lib/capistrano/git/copy/utility.rb
92
- - lib/capistrano/git/copy/version.rb
93
92
  - lib/capistrano/git_copy.rb
93
+ - lib/capistrano/git_copy/tasks/deploy.cap
94
+ - lib/capistrano/git_copy/utility.rb
95
+ - lib/capistrano/git_copy/version.rb
94
96
  - vendor/git-archive-all/git-archive-all
95
97
  homepage: https://github.com/ydkn/capistrano-git-copy
96
98
  licenses:
@@ -1,167 +0,0 @@
1
- require 'tmpdir'
2
- require 'digest/md5'
3
-
4
- module Capistrano
5
- module Git
6
- module Copy
7
- # Utility stuff to avoid cluttering of deploy.cap
8
- class Utility
9
- def initialize(context)
10
- @context = context
11
- end
12
-
13
- # Check if repo cache exists
14
- #
15
- # @return [Boolean] indicates if repo cache exists
16
- def test
17
- test! " [ -d #{repo_path} ] "
18
- end
19
-
20
- # Check if repo is accessible
21
- #
22
- # @return void
23
- def check
24
- git :'ls-remote --heads', repo_url
25
- end
26
-
27
- # Clone repo to cache
28
- #
29
- # @return void
30
- def clone
31
- execute :mkdir, '-p', tmp_path
32
-
33
- git :clone, fetch(:repo_url), repo_path
34
- end
35
-
36
- # Update repo and submodules to branch
37
- #
38
- # @return void
39
- def update
40
- git :remote, :update
41
- git :reset, '--hard', commit_hash
42
-
43
- # submodules
44
- git :submodule, :init
45
- git :submodule, :update
46
- git :submodule, :foreach, '--recursive', :git, :submodule, :update, '--init'
47
-
48
- # cleanup
49
- git :clean, '-d', '-f'
50
- git :submodule, :foreach, '--recursive', :git, :clean, '-d', '-f'
51
- end
52
-
53
- # Create tar archive
54
- #
55
- # @return void
56
- def prepare_release
57
- execute git_archive_all_bin, "--prefix=''", archive_path
58
- end
59
-
60
- # Upload and extract release
61
- #
62
- # @return void
63
- def release
64
- remote_archive_path = File.join(fetch(:deploy_to), File.basename(archive_path))
65
-
66
- upload! archive_path, remote_archive_path
67
-
68
- execute :mkdir, '-p', release_path
69
- execute :tar, '-f', remote_archive_path, '-x', '-C', release_path
70
- execute :rm, '-f', remote_archive_path
71
- end
72
-
73
- # Set deployed revision
74
- #
75
- # @return void
76
- def fetch_revision
77
- capture(:git, 'rev-list', '--max-count=1', '--abbrev-commit', fetch(:branch)).strip
78
- end
79
-
80
- # Cleanup repo cache
81
- #
82
- # @return void
83
- def cleanup
84
- execute :rm, '-rf', tmp_path
85
-
86
- info 'Local repo cache was removed'
87
- end
88
-
89
- # Temporary path for all git-copy operations
90
- #
91
- # @return [String]
92
- def tmp_path
93
- @_tmp_path ||= File.join(Dir.tmpdir, deploy_id)
94
- end
95
-
96
- # Path to repo cache
97
- #
98
- # @return [String]
99
- def repo_path
100
- @_repo_path ||= File.join(tmp_path, 'repo')
101
- end
102
-
103
- # Path to archive
104
- #
105
- # @return [String]
106
- def archive_path
107
- @_archive_path ||= File.join(tmp_path, 'archive.tar.gz')
108
- end
109
-
110
- private
111
-
112
- def fetch(*args)
113
- @context.fetch(*args)
114
- end
115
-
116
- def test!(*args)
117
- @context.test(*args)
118
- end
119
-
120
- def execute(*args)
121
- @context.execute(*args)
122
- end
123
-
124
- def capture(*args)
125
- @context.capture(*args)
126
- end
127
-
128
- def upload!(*args)
129
- @context.upload!(*args)
130
- end
131
-
132
- def info(*args)
133
- @context.info(*args)
134
- end
135
-
136
- def git(*args)
137
- args.unshift(:git)
138
- execute(*args)
139
- end
140
-
141
- def git_archive_all_bin
142
- File.expand_path('../../../../../vendor/git-archive-all/git-archive-all', __FILE__)
143
- end
144
-
145
- def deploy_id
146
- [
147
- fetch(:application),
148
- fetch(:stage),
149
- Digest::MD5.hexdigest(fetch(:repo_url))[0..7]
150
- ].compact.join('_')
151
- end
152
-
153
- def commit_hash
154
- return @_commit_hash if @_commit_hash
155
-
156
- branch = fetch(:branch, 'master')
157
-
158
- if test! :git, 'rev-parse', "origin/#{branch}", '>/dev/null 2>/dev/null'
159
- @_commit_hash = capture(:git, 'rev-parse', "origin/#{branch}").strip
160
- else
161
- @_commit_hash = capture(:git, 'rev-parse', branch).strip
162
- end
163
- end
164
- end
165
- end
166
- end
167
- end
@@ -1,11 +0,0 @@
1
- # Capistrano
2
- module Capistrano
3
- # Git
4
- module Git
5
- # Copy
6
- module Copy
7
- # gem version
8
- VERSION = '0.7.0'
9
- end
10
- end
11
- end