falkorlib 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.falkorlib.noespec +321 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +47 -0
- data/LICENCE.md +22 -0
- data/README.md +118 -0
- data/Rakefile +45 -0
- data/falkorlib.gemspec +207 -0
- data/lib/falkorlib.rb +10 -0
- data/lib/falkorlib/common.rb +130 -0
- data/lib/falkorlib/gitflow.rb +71 -0
- data/lib/falkorlib/loader.rb +3 -0
- data/lib/falkorlib/version.rb +65 -0
- data/spec/falkorlib/common_spec.rb +137 -0
- data/spec/falkorlib/gitflow_spec.rb +64 -0
- data/spec/falkorlib_spec.rb +8 -0
- data/spec/spec_helper.rb +16 -0
- data/tasks/debug_mail.rake +75 -0
- data/tasks/debug_mail.txt +13 -0
- data/tasks/gem.rake +73 -0
- data/tasks/spec_test.rake +73 -0
- data/tasks/unit_test.rake +77 -0
- data/tasks/yard.rake +51 -0
- data/test/test_gitflow.rb +16 -0
- metadata +227 -0
data/Rakefile
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
##############################################################################
|
2
|
+
# Rakefile - Configuration file for rake (http://rake.rubyforge.org/)
|
3
|
+
# Time-stamp: <Lun 2014-06-02 14:58 svarrette>
|
4
|
+
#
|
5
|
+
# Copyright (c) 2012 Sebastien Varrette <Sebastien.Varrette@uni.lu>
|
6
|
+
# . http://varrette.gforge.uni.lu
|
7
|
+
# ____ _ __ _ _
|
8
|
+
# | _ \ __ _| | _____ / _(_) | ___
|
9
|
+
# | |_) / _` | |/ / _ \ |_| | |/ _ \
|
10
|
+
# | _ < (_| | < __/ _| | | __/
|
11
|
+
# |_| \_\__,_|_|\_\___|_| |_|_|\___|
|
12
|
+
#
|
13
|
+
# Use 'rake -T' to list the available actions
|
14
|
+
#
|
15
|
+
# Resources:
|
16
|
+
# * http://www.stuartellis.eu/articles/rake/
|
17
|
+
##############################################################################
|
18
|
+
require "bundler/gem_tasks"
|
19
|
+
|
20
|
+
|
21
|
+
# We run tests by default
|
22
|
+
task :default => :test
|
23
|
+
|
24
|
+
#
|
25
|
+
# Install all tasks found in tasks folder
|
26
|
+
#
|
27
|
+
# See .rake files there for complete documentation.
|
28
|
+
#
|
29
|
+
RAKE_TASKS_TO_LOAD = [
|
30
|
+
#'debug_mail.rake',
|
31
|
+
'gem.rake',
|
32
|
+
'spec_test.rake',
|
33
|
+
#'unit_test.rake',
|
34
|
+
'yard.rake'
|
35
|
+
]
|
36
|
+
|
37
|
+
Dir["tasks/*.rake"].each do |taskfile|
|
38
|
+
next unless RAKE_TASKS_TO_LOAD.include?(taskfile.gsub(/.*tasks\//, ''))
|
39
|
+
load taskfile
|
40
|
+
end
|
41
|
+
|
42
|
+
desc "clean the directory"
|
43
|
+
task :clean => :clobber_package do
|
44
|
+
sh "rm -rf doc" if File.directory?("doc")
|
45
|
+
end
|
data/falkorlib.gemspec
ADDED
@@ -0,0 +1,207 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# We require your library, mainly to have access to the VERSION number.
|
3
|
+
# Feel free to set $version manually.
|
4
|
+
$LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
|
5
|
+
require "falkorlib/version"
|
6
|
+
$version = FalkorLib::Version.to_s
|
7
|
+
|
8
|
+
#
|
9
|
+
# This is your Gem specification. Default values are provided so that your library
|
10
|
+
# should be correctly packaged given what you have described in the .noespec file.
|
11
|
+
#
|
12
|
+
Gem::Specification.new do |s|
|
13
|
+
|
14
|
+
################################################################### ABOUT YOUR GEM
|
15
|
+
|
16
|
+
# Gem name (required)
|
17
|
+
s.name = "falkorlib"
|
18
|
+
|
19
|
+
# Gem version (required)
|
20
|
+
s.version = $version
|
21
|
+
|
22
|
+
# A short summary of this gem
|
23
|
+
#
|
24
|
+
# This is displayed in `gem list -d`.
|
25
|
+
s.summary = "Sebastien Varrette aka Falkor's Common library to share Ruby code and {rake,cap} tasks"
|
26
|
+
|
27
|
+
# A long description of this gem (required)
|
28
|
+
#
|
29
|
+
# The description should be more detailed than the summary. For example,
|
30
|
+
# you might wish to copy the entire README into the description.
|
31
|
+
s.description = "This is my personal library I use to share the Ruby tidbits, Rake and Capistrano tasks I made for my various projects. \nThis is also my first gem so any comments on the code/organization are welcome, I'm a newbie in this domain. \nNote that I used [Noe](https://github.com/blambeau/noe) to bootstrap this project and get a fully documented environment."
|
32
|
+
|
33
|
+
# The URL of this gem home page (optional)
|
34
|
+
s.homepage = "https://github.com/Falkor/falkorlib"
|
35
|
+
|
36
|
+
# Gem publication date (required but auto)
|
37
|
+
#
|
38
|
+
# Today is automatically used by default, uncomment only if
|
39
|
+
# you know what you do!
|
40
|
+
#
|
41
|
+
# s.date = Time.now.strftime('%Y-%m-%d')
|
42
|
+
|
43
|
+
# The license(s) for the library. Each license must be a short name, no
|
44
|
+
# more than 64 characters.
|
45
|
+
#
|
46
|
+
s.licenses = ['MIT']
|
47
|
+
|
48
|
+
# The rubyforge project this gem lives under (optional)
|
49
|
+
#
|
50
|
+
# s.rubyforge_project = nil
|
51
|
+
|
52
|
+
################################################################### ABOUT THE AUTHORS
|
53
|
+
|
54
|
+
# The list of author names who wrote this gem.
|
55
|
+
#
|
56
|
+
# If you are providing multiple authors and multiple emails they should be
|
57
|
+
# in the same order.
|
58
|
+
#
|
59
|
+
s.authors = ["Sebastien Varrette"]
|
60
|
+
|
61
|
+
# Contact emails for this gem
|
62
|
+
#
|
63
|
+
# If you are providing multiple authors and multiple emails they should be
|
64
|
+
# in the same order.
|
65
|
+
#
|
66
|
+
# NOTE: Somewhat strangly this attribute is always singular!
|
67
|
+
# Don't replace by s.emails = ...
|
68
|
+
s.email = ["Sebastien.Varrette@uni.lu"]
|
69
|
+
|
70
|
+
################################################################### PATHS, FILES, BINARIES
|
71
|
+
|
72
|
+
# Paths in the gem to add to $LOAD_PATH when this gem is
|
73
|
+
# activated (required).
|
74
|
+
#
|
75
|
+
# The default 'lib' is typically sufficient.
|
76
|
+
s.require_paths = ["lib"]
|
77
|
+
|
78
|
+
# Files included in this gem.
|
79
|
+
#
|
80
|
+
# By default, we take all files included in the .Manifest.txt file on root
|
81
|
+
# of the project. Entries of the manifest are interpreted as Dir[...]
|
82
|
+
# patterns so that lazy people may use wilcards like lib/**/*
|
83
|
+
#
|
84
|
+
here = File.expand_path(File.dirname(__FILE__))
|
85
|
+
s.files = File.readlines(File.join(here, '.Manifest.txt')).
|
86
|
+
inject([]){|files, pattern| files + Dir[File.join(here, pattern.strip)]}.
|
87
|
+
collect{|x| x[(1+here.size)..-1]}
|
88
|
+
|
89
|
+
# Test files included in this gem.
|
90
|
+
#
|
91
|
+
s.test_files = Dir["test/**/*"] + Dir["spec/**/*"]
|
92
|
+
|
93
|
+
# Alternative:
|
94
|
+
#s.files = `git ls-files`.split("\n")
|
95
|
+
#s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
96
|
+
#s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
# The path in the gem for executable scripts (optional)
|
102
|
+
#
|
103
|
+
#s.bindir = "bin"
|
104
|
+
|
105
|
+
# Executables included in the gem.
|
106
|
+
#
|
107
|
+
#s.executables = (Dir["bin/*"]).collect{|f| File.basename(f)}
|
108
|
+
|
109
|
+
################################################################### REQUIREMENTS & INSTALL
|
110
|
+
# Remember the gem version requirements operators and schemes:
|
111
|
+
# = Equals version
|
112
|
+
# != Not equal to version
|
113
|
+
# > Greater than version
|
114
|
+
# < Less than version
|
115
|
+
# >= Greater than or equal to
|
116
|
+
# <= Less than or equal to
|
117
|
+
# ~> Approximately greater than
|
118
|
+
#
|
119
|
+
# Don't forget to have a look at http://lmgtfy.com/?q=Ruby+Versioning+Policies
|
120
|
+
# for setting your gem version.
|
121
|
+
#
|
122
|
+
# For your requirements to other gems, remember that
|
123
|
+
# ">= 2.2.0" (optimistic: specify minimal version)
|
124
|
+
# ">= 2.2.0", "< 3.0" (pessimistic: not greater than the next major)
|
125
|
+
# "~> 2.2" (shortcut for ">= 2.2.0", "< 3.0")
|
126
|
+
# "~> 2.2.0" (shortcut for ">= 2.2.0", "< 2.3.0")
|
127
|
+
#
|
128
|
+
#s.add_dependency("rake", ">= 10.1.0")
|
129
|
+
s.add_runtime_dependency 'rake', '~> 10.1', '>= 10.1.0'
|
130
|
+
s.add_runtime_dependency 'git_remote_branch', '~> 0'
|
131
|
+
#s.add_dependency("git_remote_branch")
|
132
|
+
s.add_runtime_dependency 'git', '~> 1.2', '>= 1.2.5'
|
133
|
+
s.add_dependency("term-ansicolor", "~> 1.3")
|
134
|
+
|
135
|
+
#
|
136
|
+
# One call to add_dependency('gem_name', 'gem version requirement') for each
|
137
|
+
# runtime dependency. These gems will be installed with your gem.
|
138
|
+
# One call to add_development_dependency('gem_name', 'gem version requirement')
|
139
|
+
# for each development dependency. These gems are required for developers
|
140
|
+
#
|
141
|
+
#s.add_development_dependency("rake", ">= 10.1.0") #"~> 0.9.2")
|
142
|
+
s.add_development_dependency("bundler", "~> 1.0")
|
143
|
+
s.add_development_dependency 'rspec', '~> 2.7', '>= 2.7.0'
|
144
|
+
s.add_development_dependency("pry", "~> 0.9")
|
145
|
+
s.add_development_dependency("yard", "~> 0.8")
|
146
|
+
s.add_development_dependency("awesome_print", "~> 1.2")
|
147
|
+
#s.add_development_dependency("bluecloth", "~> 2.2.0")
|
148
|
+
#s.add_development_dependency("wlang", "~> 0.10.2")
|
149
|
+
|
150
|
+
|
151
|
+
# The version of ruby required by this gem
|
152
|
+
#
|
153
|
+
# Uncomment and set this if your gem requires specific ruby versions.
|
154
|
+
#
|
155
|
+
# s.required_ruby_version = ">= 0"
|
156
|
+
|
157
|
+
# The RubyGems version required by this gem
|
158
|
+
#
|
159
|
+
# s.required_rubygems_version = ">= 0"
|
160
|
+
|
161
|
+
# The platform this gem runs on. See Gem::Platform for details.
|
162
|
+
#
|
163
|
+
# s.platform = nil
|
164
|
+
|
165
|
+
# Extensions to build when installing the gem.
|
166
|
+
#
|
167
|
+
# Valid types of extensions are extconf.rb files, configure scripts
|
168
|
+
# and rakefiles or mkrf_conf files.
|
169
|
+
#
|
170
|
+
s.extensions = []
|
171
|
+
|
172
|
+
# External (to RubyGems) requirements that must be met for this gem to work.
|
173
|
+
# It’s simply information for the user.
|
174
|
+
#
|
175
|
+
s.requirements = nil
|
176
|
+
|
177
|
+
# A message that gets displayed after the gem is installed
|
178
|
+
#
|
179
|
+
# Uncomment and set this if you want to say something to the user
|
180
|
+
# after gem installation
|
181
|
+
#
|
182
|
+
s.post_install_message = "Thanks for installing FalkorLib.\n"
|
183
|
+
|
184
|
+
################################################################### SECURITY
|
185
|
+
|
186
|
+
# The key used to sign this gem. See Gem::Security for details.
|
187
|
+
#
|
188
|
+
#s.signing_key = "0xDD01D5C0"
|
189
|
+
|
190
|
+
# The certificate chain used to sign this gem. See Gem::Security for
|
191
|
+
# details.
|
192
|
+
#
|
193
|
+
# s.cert_chain = []
|
194
|
+
|
195
|
+
################################################################### RDOC
|
196
|
+
|
197
|
+
# An ARGV style array of options to RDoc
|
198
|
+
#
|
199
|
+
# See 'rdoc --help' about this
|
200
|
+
#
|
201
|
+
s.rdoc_options = []
|
202
|
+
|
203
|
+
# Extra files to add to RDoc such as README
|
204
|
+
#
|
205
|
+
s.extra_rdoc_files = Dir["README.md"] + Dir["CHANGELOG.md"] + Dir["LICENCE.md"]
|
206
|
+
|
207
|
+
end
|
data/lib/falkorlib.rb
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
### Configure colors ###
|
4
|
+
begin
|
5
|
+
require 'term/ansicolor'
|
6
|
+
COLOR = true
|
7
|
+
rescue Exception => e
|
8
|
+
puts "/!\\ cannot find the 'term/ansicolor' library"
|
9
|
+
puts " Consider installing it by 'gem install term-ansicolor'"
|
10
|
+
COLOR = false
|
11
|
+
end
|
12
|
+
|
13
|
+
require 'yaml'
|
14
|
+
|
15
|
+
module FalkorLib
|
16
|
+
module Common
|
17
|
+
module_function
|
18
|
+
##################################
|
19
|
+
### Default printing functions ###
|
20
|
+
##################################
|
21
|
+
|
22
|
+
# Print a text in green
|
23
|
+
def green(str)
|
24
|
+
COLOR == true ? Term::ANSIColor.green(str) : str
|
25
|
+
end
|
26
|
+
|
27
|
+
# Print a text in red
|
28
|
+
def red(str)
|
29
|
+
COLOR == true ? Term::ANSIColor.red(str) : str
|
30
|
+
end
|
31
|
+
|
32
|
+
# Print a text in cyan
|
33
|
+
def cyan(str)
|
34
|
+
COLOR == true ? Term::ANSIColor.cyan(str) : str
|
35
|
+
end
|
36
|
+
|
37
|
+
# Print an info message
|
38
|
+
def info(str)
|
39
|
+
puts green("[INFO] " + str)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Print an warning message
|
43
|
+
def warning(str)
|
44
|
+
puts cyan("/!\\ WARNING: " + str)
|
45
|
+
end
|
46
|
+
def warn(str)
|
47
|
+
warning(str)
|
48
|
+
end
|
49
|
+
## Print an error message and abort
|
50
|
+
def error(str)
|
51
|
+
#abort red("*** ERROR *** " + str)
|
52
|
+
$stderr.puts red("*** ERROR *** " + str)
|
53
|
+
exit 1
|
54
|
+
end
|
55
|
+
def not_implemented()
|
56
|
+
error("NOT YET IMPLEMENTED")
|
57
|
+
end
|
58
|
+
|
59
|
+
##############################
|
60
|
+
### Interaction functions ###
|
61
|
+
##############################
|
62
|
+
|
63
|
+
## Ask a question
|
64
|
+
def ask(question, default_answer='')
|
65
|
+
print "#{question} "
|
66
|
+
print "[Default: #{default_answer}]" unless default_answer == ''
|
67
|
+
print ": "
|
68
|
+
STDOUT.flush
|
69
|
+
answer = STDIN.gets.chomp
|
70
|
+
return answer.empty?() ? default_answer : answer
|
71
|
+
end
|
72
|
+
|
73
|
+
## Ask whether or not to really continue
|
74
|
+
def really_continue?(default_answer = 'Yes')
|
75
|
+
pattern = (default_answer =~ /yes/i) ? '(Y|n)' : '(y|N)'
|
76
|
+
answer = ask( cyan("=> Do you really want to continue #{pattern}?"), default_answer)
|
77
|
+
exit 0 if answer =~ /n.*/i
|
78
|
+
end
|
79
|
+
|
80
|
+
############################
|
81
|
+
### Execution functions ###
|
82
|
+
############################
|
83
|
+
|
84
|
+
## Check for the presence of a given command
|
85
|
+
def command?(name)
|
86
|
+
`which #{name}`
|
87
|
+
$?.success?
|
88
|
+
end
|
89
|
+
|
90
|
+
## Execute a given command - exit if status != 0
|
91
|
+
def execute(cmd)
|
92
|
+
sh %{#{cmd}} do |ok, res|
|
93
|
+
if ! ok
|
94
|
+
error("The command '#{cmd}' failed with exit status #{res.exitstatus}")
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
## "Nice" way to present run commands
|
100
|
+
## Ex: run %{ hostname -f }
|
101
|
+
def run(cmds)
|
102
|
+
puts bold("[Running]\n#{cmds.gsub(/^\s*/, ' ')}")
|
103
|
+
#puts cmds.split(/\n */).inspect
|
104
|
+
cmds.split(/\n */).each do |cmd|
|
105
|
+
next if cmd.empty?
|
106
|
+
system("#{cmd}") unless DEBUG
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
###############################
|
111
|
+
### YAML File loading/store ###
|
112
|
+
###############################
|
113
|
+
|
114
|
+
# Return the yaml content as a Hash object
|
115
|
+
def load_config(filepath)
|
116
|
+
YAML::load_file(filepath)
|
117
|
+
end
|
118
|
+
|
119
|
+
# Store the Hash object as a Yaml file
|
120
|
+
def store_config(filepath, hash)
|
121
|
+
File.open( filepath, 'w') do |f|
|
122
|
+
f.print "# ", File.basename(filepath), "\n"
|
123
|
+
f.puts "# /!\\ DO NOT EDIT THIS FILE: it has been automatically generated"
|
124
|
+
f.puts hash.to_yaml
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
|
129
|
+
end
|
130
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require 'falkorlib/common'
|
4
|
+
require 'git'
|
5
|
+
|
6
|
+
module FalkorLib
|
7
|
+
|
8
|
+
class GitFlow < Git::Base
|
9
|
+
|
10
|
+
@@config = {
|
11
|
+
:master => 'production',
|
12
|
+
:develop => 'master',
|
13
|
+
:feature => 'feature/',
|
14
|
+
:release => 'release/',
|
15
|
+
:hotfix => 'hotfix/',
|
16
|
+
:support => 'support/',
|
17
|
+
:versiontag => "v",
|
18
|
+
}
|
19
|
+
|
20
|
+
|
21
|
+
def initialize(base = nil, options = {})
|
22
|
+
# @logger = options[:logger] || Logger.new(STDOUT)
|
23
|
+
options.each do |k,v|
|
24
|
+
self.config_set(k, v) if @@config.has_key?(k.to_sym)
|
25
|
+
end
|
26
|
+
#puts @@config.inspect
|
27
|
+
end
|
28
|
+
|
29
|
+
# def self.method_missing(sym, *args, &block)
|
30
|
+
# @@config[sym.to_s]
|
31
|
+
# end
|
32
|
+
|
33
|
+
def self.global_config(opt)
|
34
|
+
@@config[opt.to_sym]
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.config_set(opt, value)
|
38
|
+
@@config[opt.to_sym] = value
|
39
|
+
end
|
40
|
+
|
41
|
+
# initializes a git flow repository
|
42
|
+
# options:
|
43
|
+
# :repository
|
44
|
+
# :index_file
|
45
|
+
#
|
46
|
+
def self.init(working_dir, opts = {})
|
47
|
+
super
|
48
|
+
g = Git.open(working_dir)
|
49
|
+
|
50
|
+
config = @@config
|
51
|
+
@@config.keys.each do |k|
|
52
|
+
config[k.to_sym] = opts[k.to_sym] if opts.has_key?(k.to_sym)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Now update the local config for gitflow
|
56
|
+
g.config('gitflow.branch.master', config[:master])
|
57
|
+
g.config('gitflow.branch.develop', config[:develop])
|
58
|
+
g.config('gitflow.prefix.feature', config[:feature])
|
59
|
+
g.config('gitflow.prefix.release', config[:release])
|
60
|
+
g.config('gitflow.prefix.hotfix', config[:hotfix])
|
61
|
+
g.config('gitflow.prefix.support', config[:support])
|
62
|
+
g.config('gitflow.prefix.versiontag', config[:versiontag])
|
63
|
+
|
64
|
+
g.lib.send('command', 'flow init -d')
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
|
70
|
+
end # End Falkorlib::GitFlow
|
71
|
+
end
|