capistrano-uptodate 0.0.1
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/.gitignore +4 -0
- data/README.md +39 -0
- data/Rakefile +1 -0
- data/capistrano-uptodate.gemspec +20 -0
- data/lib/capistrano/uptodate.rb +49 -0
- metadata +85 -0
data/.gitignore
ADDED
data/README.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# capistrano-uptodate
|
|
2
|
+
|
|
3
|
+
capistrano-uptodate is [capistrano](https://github.com/capistrano/capistrano) extension that automatically check your local repository with remote repository and if repository is not up-to-date:
|
|
4
|
+
|
|
5
|
+
* display corresponding message.
|
|
6
|
+
* ask to confirm recipe execution or abort recipe execution.
|
|
7
|
+
|
|
8
|
+
If you want to be sure that every developer in your team use recent version of deployment recipes before it starts deploy this extension might be handy.
|
|
9
|
+
|
|
10
|
+
## Installation
|
|
11
|
+
|
|
12
|
+
gem install capistrano-uptodate
|
|
13
|
+
|
|
14
|
+
Add to `Capfile` or `config/deploy.rb`:
|
|
15
|
+
|
|
16
|
+
require 'capistrano/uptodate'
|
|
17
|
+
|
|
18
|
+
## Configuration
|
|
19
|
+
|
|
20
|
+
You can tune *uptodate* recipe using next options:
|
|
21
|
+
|
|
22
|
+
* *:uptodate_scm* (:git) - SCM you use
|
|
23
|
+
* *:uptodate_scm_bynary* ('git') - path to SCM binary
|
|
24
|
+
* *:uptodate_remote_repository* ('origin') - remote repository
|
|
25
|
+
* *:uptodate_branch* ('master') - branch of repository to check
|
|
26
|
+
* *:uptodate_time* (60) - time in seconds for checking remote repository
|
|
27
|
+
* *:uptodate_behaviour* - (:confirm)
|
|
28
|
+
* *:confirm* - show outdated message and ask to confirm the further execution
|
|
29
|
+
* *:abort* - show outdated message and abort further execution
|
|
30
|
+
|
|
31
|
+
## Example
|
|
32
|
+
|
|
33
|
+
$ cap production deploy
|
|
34
|
+
triggering load callbacks
|
|
35
|
+
* == Currently executing `uptodate'
|
|
36
|
+
* == Currently executing `uptodate:git'
|
|
37
|
+
Local 'master' branch is not synchronized with 'origin' repository.
|
|
38
|
+
Continue anyway? (y/N)
|
|
39
|
+
|
data/Rakefile
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require "bundler/gem_tasks"
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
|
3
|
+
|
|
4
|
+
Gem::Specification.new do |s|
|
|
5
|
+
s.name = "capistrano-uptodate"
|
|
6
|
+
s.version = "0.0.1"
|
|
7
|
+
s.authors = ["Andriy Yanko"]
|
|
8
|
+
s.email = ["andriy.yanko@gmail.com"]
|
|
9
|
+
s.homepage = "https://github.com/railsware/capistrano-uptodate"
|
|
10
|
+
s.summary = %q{Capistrano extension that automatically check local repository with remote repository}
|
|
11
|
+
|
|
12
|
+
s.rubyforge_project = "capistrano-uptodate"
|
|
13
|
+
|
|
14
|
+
s.files = `git ls-files`.split("\n")
|
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
17
|
+
s.require_paths = ["lib"]
|
|
18
|
+
|
|
19
|
+
s.add_runtime_dependency "capistrano", ">=2.5.5"
|
|
20
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
Capistrano::Configuration.instance.load do
|
|
2
|
+
|
|
3
|
+
scm = fetch(:uptodate_scm, :git)
|
|
4
|
+
scm_binary = fetch(:uptodate_scm_bynary, 'git')
|
|
5
|
+
remote_repository = fetch(:uptodate_remote_repository, 'origin')
|
|
6
|
+
branch = fetch(:uptodate_branch, 'master')
|
|
7
|
+
time = fetch(:uptodate_time, 300)
|
|
8
|
+
behavior = fetch(:uptodate_behaviour, :confirm)
|
|
9
|
+
|
|
10
|
+
namespace :uptodate do
|
|
11
|
+
desc "Automatically synchronize current repository"
|
|
12
|
+
task :default do
|
|
13
|
+
case scm
|
|
14
|
+
when :git
|
|
15
|
+
top.uptodate.git
|
|
16
|
+
else
|
|
17
|
+
abort("SCM #{scm} is not supported by capistrano/uptodate")
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
task :git do
|
|
22
|
+
git_dir = fetch(:uptodate_local_reposytory, `#{scm_binary} rev-parse --git-dir`.strip)
|
|
23
|
+
abort "Can't detect git repository" if git_dir.empty?
|
|
24
|
+
|
|
25
|
+
fetch_file = File.join(git_dir, "FETCH_HEAD")
|
|
26
|
+
|
|
27
|
+
unless File.exist?(fetch_file) && Time.now - File.mtime(fetch_file) < time
|
|
28
|
+
Capistrano::CLI.ui.say "Fetching references from #{repository} repository ..."
|
|
29
|
+
system("#{scm_binary} fetch #{remote_repository}")
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
local_commit = `#{scm_binary} rev-parse #{branch}`.strip
|
|
33
|
+
remote_commit = `#{scm_binary} rev-parse #{remote_repository}/#{branch}`.strip
|
|
34
|
+
|
|
35
|
+
if local_commit != remote_commit
|
|
36
|
+
Capistrano::CLI.ui.say "Local '#{branch}' branch is not synchronized with '#{remote_repository}' repository."
|
|
37
|
+
|
|
38
|
+
case behavior
|
|
39
|
+
when :confirm
|
|
40
|
+
Capistrano::CLI.ui.ask("Continue anyway? (y/N)") == 'y' or abort
|
|
41
|
+
else
|
|
42
|
+
abort
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
on :load, 'uptodate'
|
|
49
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: capistrano-uptodate
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
hash: 29
|
|
5
|
+
prerelease:
|
|
6
|
+
segments:
|
|
7
|
+
- 0
|
|
8
|
+
- 0
|
|
9
|
+
- 1
|
|
10
|
+
version: 0.0.1
|
|
11
|
+
platform: ruby
|
|
12
|
+
authors:
|
|
13
|
+
- Andriy Yanko
|
|
14
|
+
autorequire:
|
|
15
|
+
bindir: bin
|
|
16
|
+
cert_chain: []
|
|
17
|
+
|
|
18
|
+
date: 2011-11-02 00:00:00 Z
|
|
19
|
+
dependencies:
|
|
20
|
+
- !ruby/object:Gem::Dependency
|
|
21
|
+
name: capistrano
|
|
22
|
+
prerelease: false
|
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
|
24
|
+
none: false
|
|
25
|
+
requirements:
|
|
26
|
+
- - ">="
|
|
27
|
+
- !ruby/object:Gem::Version
|
|
28
|
+
hash: 17
|
|
29
|
+
segments:
|
|
30
|
+
- 2
|
|
31
|
+
- 5
|
|
32
|
+
- 5
|
|
33
|
+
version: 2.5.5
|
|
34
|
+
type: :runtime
|
|
35
|
+
version_requirements: *id001
|
|
36
|
+
description:
|
|
37
|
+
email:
|
|
38
|
+
- andriy.yanko@gmail.com
|
|
39
|
+
executables: []
|
|
40
|
+
|
|
41
|
+
extensions: []
|
|
42
|
+
|
|
43
|
+
extra_rdoc_files: []
|
|
44
|
+
|
|
45
|
+
files:
|
|
46
|
+
- .gitignore
|
|
47
|
+
- README.md
|
|
48
|
+
- Rakefile
|
|
49
|
+
- capistrano-uptodate.gemspec
|
|
50
|
+
- lib/capistrano/uptodate.rb
|
|
51
|
+
homepage: https://github.com/railsware/capistrano-uptodate
|
|
52
|
+
licenses: []
|
|
53
|
+
|
|
54
|
+
post_install_message:
|
|
55
|
+
rdoc_options: []
|
|
56
|
+
|
|
57
|
+
require_paths:
|
|
58
|
+
- lib
|
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
60
|
+
none: false
|
|
61
|
+
requirements:
|
|
62
|
+
- - ">="
|
|
63
|
+
- !ruby/object:Gem::Version
|
|
64
|
+
hash: 3
|
|
65
|
+
segments:
|
|
66
|
+
- 0
|
|
67
|
+
version: "0"
|
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
69
|
+
none: false
|
|
70
|
+
requirements:
|
|
71
|
+
- - ">="
|
|
72
|
+
- !ruby/object:Gem::Version
|
|
73
|
+
hash: 3
|
|
74
|
+
segments:
|
|
75
|
+
- 0
|
|
76
|
+
version: "0"
|
|
77
|
+
requirements: []
|
|
78
|
+
|
|
79
|
+
rubyforge_project: capistrano-uptodate
|
|
80
|
+
rubygems_version: 1.8.6
|
|
81
|
+
signing_key:
|
|
82
|
+
specification_version: 3
|
|
83
|
+
summary: Capistrano extension that automatically check local repository with remote repository
|
|
84
|
+
test_files: []
|
|
85
|
+
|