gitnesse 0.12.6 → 1.0.0.beta2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.travis.yml +6 -0
- data/Rakefile +6 -11
- data/bin/.keep +0 -0
- data/bin/gitnesse +2 -32
- data/config/gitnesse.rb.example +2 -4
- data/gitnesse.gemspec +22 -21
- data/lib/gitnesse/cli/helpers/config_helpers.rb +13 -0
- data/lib/gitnesse/cli/helpers/feature_helpers.rb +26 -0
- data/lib/gitnesse/cli/helpers/wiki_helpers.rb +53 -0
- data/lib/gitnesse/cli/task/help.rb +42 -0
- data/lib/gitnesse/cli/task/info.rb +29 -0
- data/lib/gitnesse/cli/task/pull.rb +26 -0
- data/lib/gitnesse/cli/task/push.rb +101 -0
- data/lib/gitnesse/cli/task/run.rb +85 -0
- data/lib/gitnesse/cli/task.rb +67 -0
- data/lib/gitnesse/cli.rb +55 -0
- data/lib/gitnesse/config.rb +68 -0
- data/lib/gitnesse/config_loader.rb +36 -0
- data/lib/gitnesse/dependency_checker.rb +86 -0
- data/lib/gitnesse/dir_manager.rb +37 -0
- data/lib/gitnesse/feature.rb +63 -0
- data/lib/gitnesse/feature_extractor.rb +29 -0
- data/lib/gitnesse/feature_transform.rb +30 -0
- data/lib/gitnesse/hooks/gitnesse.rb +5 -0
- data/lib/gitnesse/hooks.rb +30 -33
- data/lib/gitnesse/railtie.rb +3 -1
- data/lib/gitnesse/rake/tasks.rake +11 -0
- data/lib/gitnesse/tasks.rb +7 -4
- data/lib/gitnesse/version.rb +1 -1
- data/lib/gitnesse/wiki/page.rb +103 -0
- data/lib/gitnesse/wiki.rb +80 -143
- data/lib/gitnesse.rb +10 -102
- data/spec/lib/cli/task/help_spec.rb +34 -0
- data/spec/lib/cli/task/info_spec.rb +22 -0
- data/spec/lib/cli/task/pull_spec.rb +24 -0
- data/spec/lib/cli/task/push_spec.rb +24 -0
- data/spec/lib/cli_spec.rb +13 -0
- data/spec/lib/config_loader_spec.rb +46 -0
- data/spec/lib/config_spec.rb +61 -0
- data/spec/lib/dependency_checker_spec.rb +193 -0
- data/spec/lib/dir_manager_spec.rb +46 -0
- data/spec/lib/feature_extractor_spec.rb +30 -0
- data/spec/lib/feature_spec.rb +53 -0
- data/spec/lib/feature_transform_spec.rb +25 -0
- data/spec/lib/hooks_spec.rb +40 -0
- data/spec/lib/version_spec.rb +9 -0
- data/spec/lib/wiki/page_spec.rb +68 -0
- data/spec/lib/wiki_spec.rb +34 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/support/cli.rb +20 -0
- data/spec/support/example_config/gitnesse.rb +4 -0
- data/{test/test_helper.rb → spec/support/example_features/addition.feature} +0 -16
- data/spec/support/example_features/division.feature +10 -0
- data/spec/support/example_wiki_pages/developer_can_sync_features_to_code.md +29 -0
- data/spec/support_helper.rb +79 -0
- metadata +103 -109
- data/README.md +0 -85
- data/features/step_definitions/gitnesse_steps.rb +0 -54
- data/features/support/env.rb +0 -65
- data/features/sync_wiki_features_to_code.feature +0 -29
- data/lib/gitnesse/configuration.rb +0 -54
- data/lib/gitnesse/dependencies.rb +0 -39
- data/lib/gitnesse/features.rb +0 -38
- data/lib/gitnesse/git_config.rb +0 -39
- data/lib/gitnesse/support/hook.rb +0 -11
- data/lib/gitnesse/tasks.rake +0 -34
- data/test/lib/gitnesse/build_page_content_test.rb +0 -89
- data/test/lib/gitnesse/commit_info_test.rb +0 -16
- data/test/lib/gitnesse/configuration_defaults_test.rb +0 -11
- data/test/lib/gitnesse/configuration_to_hash_test.rb +0 -25
- data/test/lib/gitnesse/custom_branch_test.rb +0 -24
- data/test/lib/gitnesse/dependencies_check_test.rb +0 -73
- data/test/lib/gitnesse/extract_features_test.rb +0 -44
- data/test/lib/gitnesse/gather_test.rb +0 -30
- data/test/lib/gitnesse/load_feature_files_into_wiki_test.rb +0 -34
- data/test/lib/gitnesse/read_git_config_test.rb +0 -33
- data/test/lib/gitnesse/strip_results_test.rb +0 -52
- data/test/lib/gitnesse/version_test.rb +0 -7
- data/test/lib/gitnesse/wiki_append_results_test.rb +0 -50
- data/test/lib/gitnesse/write_file_test.rb +0 -18
- data/test/wiki_test_helper.rb +0 -11
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 319d9cc7127178d8e7fe987e28efec8c6229cfbe
|
4
|
+
data.tar.gz: 5568348a2109c7078ccfbd832b8957a7e96fdf0e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c6f71b9db9c3e09715e2a02f69a4a5b16fbdac250a620de68baf57251606363d0ef95e354e29c83200f2c064aecbd6a1a274185ea5b6b465100617551fb2c1c3
|
7
|
+
data.tar.gz: 080d0b3968b3ba38af8d3535d246c09f31d1ba5755584b792c6fb190f191e9b8e5c02d80ebae2321b10b89731332d34909da029c3e2b37aa45af4c7c7df745b1
|
data/.travis.yml
ADDED
data/Rakefile
CHANGED
@@ -1,13 +1,8 @@
|
|
1
|
-
|
2
|
-
require
|
3
|
-
require 'rake/testtask'
|
4
|
-
require_relative 'lib/gitnesse'
|
5
|
-
require_relative 'lib/gitnesse/tasks'
|
1
|
+
require 'bundler'
|
2
|
+
require 'rspec/core/rake_task'
|
6
3
|
|
7
|
-
|
8
|
-
t.libs << 'lib/gitnesse'
|
9
|
-
t.test_files = FileList['test/lib/gitnesse/*_test.rb']
|
10
|
-
t.verbose = true
|
11
|
-
end
|
12
|
-
task :default => :test
|
4
|
+
Bundler::GemHelper.install_tasks
|
13
5
|
|
6
|
+
task default: :spec
|
7
|
+
|
8
|
+
RSpec::Core::RakeTask.new :spec
|
data/bin/.keep
ADDED
File without changes
|
data/bin/gitnesse
CHANGED
@@ -1,35 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'gitnesse'
|
3
|
+
require 'gitnesse/cli'
|
5
4
|
|
6
|
-
Gitnesse::
|
7
|
-
|
8
|
-
if ARGV[0].nil?
|
9
|
-
Gitnesse.run
|
10
|
-
end
|
11
|
-
|
12
|
-
def print_help
|
13
|
-
puts "Gitnesse commands:"
|
14
|
-
puts " run: pull remote features from git-based wiki to local, and run Cucumber"
|
15
|
-
puts " push: push local features to git-based wiki"
|
16
|
-
puts " pull: pull remote features from git-based wiki to local"
|
17
|
-
puts " info: print current Gitnesse configuration"
|
18
|
-
end
|
19
|
-
|
20
|
-
case ARGV[0]
|
21
|
-
when "push"
|
22
|
-
Gitnesse.push
|
23
|
-
when "pull"
|
24
|
-
Gitnesse.pull
|
25
|
-
when "run"
|
26
|
-
Gitnesse.run
|
27
|
-
when "info"
|
28
|
-
puts Gitnesse.configuration.to_yaml
|
29
|
-
when "push_results"
|
30
|
-
Gitnesse.push_results
|
31
|
-
when "help"
|
32
|
-
print_help
|
33
|
-
else
|
34
|
-
print_help
|
35
|
-
end
|
5
|
+
Gitnesse::Cli.new.parse
|
data/config/gitnesse.rb.example
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
Gitnesse.
|
2
|
-
|
3
|
-
config.annotate_results = true
|
4
|
-
config.info = "Bob Martin's development laptop"
|
1
|
+
Gitnesse::Config.config do |c|
|
2
|
+
c.repository_url = "https://github.com/hybridgroup/gitnesse.wiki.git"
|
5
3
|
end
|
data/gitnesse.gemspec
CHANGED
@@ -1,25 +1,26 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'gitnesse/version'
|
2
|
+
require File.expand_path '../lib/gitnesse/version', __FILE__
|
5
3
|
|
6
|
-
Gem::Specification.new do |
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
4
|
+
Gem::Specification.new do |spec|
|
5
|
+
spec.name = "gitnesse"
|
6
|
+
spec.version = Gitnesse::VERSION
|
7
|
+
spec.authors = ["www.hybridgroup.com"]
|
8
|
+
spec.email = ["info@hybridgroup.com"]
|
9
|
+
spec.description = %q{Gitnesse lets you sync Cucumber feature stories
|
10
|
+
through a Git-based wiki, and display current
|
11
|
+
scenario results on wiki pages}
|
12
|
+
spec.summary = %q{Sync your feature stories using a Git-based wiki!}
|
13
|
+
spec.homepage = "https://github.com/hybridgroup/gitnesse"
|
14
|
+
spec.license = "MIT"
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_dependency "git", "~> 1.2.6"
|
23
|
+
spec.add_development_dependency "rake"
|
24
|
+
spec.add_development_dependency "rspec", "~> 2.14.1"
|
25
|
+
spec.add_development_dependency "cucumber", "~> 1.3.4"
|
25
26
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Gitnesse
|
2
|
+
class Cli
|
3
|
+
module ConfigHelpers
|
4
|
+
# Loads and checks Gitnesse configuration/dependencies
|
5
|
+
#
|
6
|
+
# Returns an instance of Gitnesse::Config
|
7
|
+
def load_and_check_config
|
8
|
+
Gitnesse::ConfigLoader.find_and_load
|
9
|
+
Gitnesse::DependencyChecker.new.check
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Gitnesse
|
2
|
+
class Cli
|
3
|
+
module FeatureHelpers
|
4
|
+
# Public: Creates or updates local cucumber features
|
5
|
+
#
|
6
|
+
# Returns nothing.
|
7
|
+
def create_or_update_local_features
|
8
|
+
puts " Creating and updating local features."
|
9
|
+
|
10
|
+
@feature_pages.each do |page|
|
11
|
+
if File.exists?(page.path)
|
12
|
+
puts " - Updating #{page.path}"
|
13
|
+
else
|
14
|
+
puts " - Creating #{page.path}"
|
15
|
+
FileUtils.mkdir_p page.relative_path
|
16
|
+
end
|
17
|
+
|
18
|
+
feature = Gitnesse::Feature.new(page.path)
|
19
|
+
features = Gitnesse::FeatureExtractor.extract!(page.read)
|
20
|
+
|
21
|
+
feature.write(features.join("\n\n"))
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Gitnesse
|
2
|
+
class Cli
|
3
|
+
module WikiHelpers
|
4
|
+
# Public: Clones or updates local copy of remote git-based wiki. Also prints
|
5
|
+
# message indicating which operation is taking place
|
6
|
+
#
|
7
|
+
# Returns instance of Gitnesse::Wiki referring to new/updated local wiki
|
8
|
+
def clone_wiki
|
9
|
+
opts = {}
|
10
|
+
@dir = Gitnesse::DirManager.project_dir
|
11
|
+
|
12
|
+
unless Gitnesse::DirManager.project_dir_present?
|
13
|
+
Gitnesse::DirManager.make_project_dir
|
14
|
+
end
|
15
|
+
|
16
|
+
@wiki = Gitnesse::Wiki.new @config.repository_url, @dir
|
17
|
+
end
|
18
|
+
|
19
|
+
# Public: Removes existing features from local copy of remote wiki.
|
20
|
+
#
|
21
|
+
# Returns nothing.
|
22
|
+
def remove_existing_features
|
23
|
+
@wiki.remove_features
|
24
|
+
end
|
25
|
+
|
26
|
+
# Public: Commits wiki changes, and pushes changes to remote wiki.
|
27
|
+
#
|
28
|
+
# Returns nothing.
|
29
|
+
def commit_and_push_changes
|
30
|
+
puts " Commiting changes."
|
31
|
+
@wiki.commit
|
32
|
+
|
33
|
+
puts " Pushing changes to remote wiki."
|
34
|
+
@wiki.push
|
35
|
+
end
|
36
|
+
|
37
|
+
# Public: Extracts wiki pages that contain cucumber features.
|
38
|
+
#
|
39
|
+
# Returns an array of wiki pages containing features
|
40
|
+
def extract_features_from_wiki
|
41
|
+
unless @wiki.pages.any?
|
42
|
+
abort " Wiki contains no features."
|
43
|
+
end
|
44
|
+
|
45
|
+
puts " Extracting wiki pages containing features."
|
46
|
+
|
47
|
+
@feature_pages = @wiki.pages.select do |page|
|
48
|
+
Gitnesse::FeatureExtractor.contains_features? page.read
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
Gitnesse::Cli.task :help, nil do
|
2
|
+
def perform(name = nil)
|
3
|
+
return overview unless name
|
4
|
+
|
5
|
+
task = tasks_by_name[name]
|
6
|
+
abort "No help for task '#{name}'" unless task && task.help
|
7
|
+
|
8
|
+
puts task.help
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
def overview
|
13
|
+
puts <<-EOS
|
14
|
+
USAGE: gitnesse <task> [<args>]
|
15
|
+
|
16
|
+
The gitnesse tasks are:
|
17
|
+
EOS
|
18
|
+
|
19
|
+
tasks_to_show do |name, desc|
|
20
|
+
puts " #{name} #{desc}"
|
21
|
+
end
|
22
|
+
|
23
|
+
puts ''
|
24
|
+
puts "See 'gitnesse help <task>' for more information on a specific task."
|
25
|
+
end
|
26
|
+
|
27
|
+
def tasks_by_name
|
28
|
+
Gitnesse::Cli.tasks
|
29
|
+
end
|
30
|
+
|
31
|
+
def tasks
|
32
|
+
tasks_by_name.values.uniq
|
33
|
+
end
|
34
|
+
|
35
|
+
def tasks_to_show
|
36
|
+
size = tasks.map { |t| t.name.length }.max
|
37
|
+
tasks.sort_by(&:name).each do |task|
|
38
|
+
next unless task.desc
|
39
|
+
yield task.name.ljust(size), task.desc
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
Gitnesse::Cli.task :info do
|
2
|
+
desc "Prints current Gitnesse configuration"
|
3
|
+
|
4
|
+
def perform
|
5
|
+
Gitnesse::ConfigLoader.find_and_load
|
6
|
+
config = Gitnesse::Config.instance.to_h
|
7
|
+
size = config.keys.map(&:length).max
|
8
|
+
|
9
|
+
puts "Current Gitnesse Configuration:"
|
10
|
+
|
11
|
+
config.each do |key, value|
|
12
|
+
puts " #{key.to_s.rjust(size)} - #{value || "[not set]"}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
help do
|
17
|
+
<<-EOS
|
18
|
+
USAGE: gitnesse info
|
19
|
+
|
20
|
+
#{desc}
|
21
|
+
|
22
|
+
Prints the current Gitnesse configuration settings, including settings loaded
|
23
|
+
from gitnesse.rb configuration files.
|
24
|
+
|
25
|
+
Examples:
|
26
|
+
gitnesse list # will print current configuration
|
27
|
+
EOS
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
Gitnesse::Cli.task :pull do
|
2
|
+
desc "Pulls features from remote git-based wiki"
|
3
|
+
|
4
|
+
help do
|
5
|
+
<<-EOS
|
6
|
+
USAGE: gitnesse pull
|
7
|
+
|
8
|
+
#{desc}
|
9
|
+
|
10
|
+
Pulls the remote wiki, finds the feature files it contains, and updates the
|
11
|
+
relevant local features, creating new ones if necessary.
|
12
|
+
|
13
|
+
Examples:
|
14
|
+
gitnesse pull # will pull features from remote wiki
|
15
|
+
EOS
|
16
|
+
end
|
17
|
+
|
18
|
+
def perform
|
19
|
+
load_and_check_config
|
20
|
+
clone_wiki
|
21
|
+
extract_features_from_wiki
|
22
|
+
create_or_update_local_features
|
23
|
+
|
24
|
+
puts " Done."
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
Gitnesse::Cli.task :push do
|
2
|
+
desc "Pushes local features to remote git-based wiki"
|
3
|
+
|
4
|
+
help do
|
5
|
+
<<-EOS
|
6
|
+
USAGE: gitnesse push
|
7
|
+
|
8
|
+
#{desc}
|
9
|
+
|
10
|
+
Pushes the local features files to the remote git-based wiki, creating/updating
|
11
|
+
wiki pages as necessary.
|
12
|
+
|
13
|
+
Examples:
|
14
|
+
gitnesse push # will push local features to remote wiki
|
15
|
+
EOS
|
16
|
+
end
|
17
|
+
|
18
|
+
def perform
|
19
|
+
load_and_check_config
|
20
|
+
clone_wiki
|
21
|
+
remove_existing_features
|
22
|
+
collect_features
|
23
|
+
add_index_page
|
24
|
+
add_feature_index_pages_to_wiki
|
25
|
+
add_features_to_wiki
|
26
|
+
commit_and_push_changes
|
27
|
+
|
28
|
+
puts " Done."
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
def collect_features
|
33
|
+
puts " Collecting local features."
|
34
|
+
Dir.chdir @config.features_dir do
|
35
|
+
@features = Dir.glob("**/*.feature").each_with_object([]) do |f, a|
|
36
|
+
a << Gitnesse::Feature.new(f)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
unless @features.any?
|
41
|
+
abort " No local features found."
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def add_feature_index_pages_to_wiki
|
46
|
+
nested = @features.group_by(&:index_page)
|
47
|
+
nested.reject! { |k,v| k == 'features.md' }
|
48
|
+
|
49
|
+
if nested.any?
|
50
|
+
puts " Creating index pages:"
|
51
|
+
end
|
52
|
+
|
53
|
+
nested.each do |filename, features|
|
54
|
+
content = features.each_with_object("") do |f, s|
|
55
|
+
s << "- #{f.relative_link}\n"
|
56
|
+
end
|
57
|
+
|
58
|
+
puts " - #{filename}"
|
59
|
+
|
60
|
+
@wiki.add_page(filename, content)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def add_features_to_wiki
|
65
|
+
puts " Creating/updating wiki features:"
|
66
|
+
@features.each do |feature|
|
67
|
+
puts " - #{feature.wiki_filename}"
|
68
|
+
|
69
|
+
filename = feature.wiki_filename
|
70
|
+
content = Gitnesse::FeatureTransform.convert(feature.read)
|
71
|
+
@wiki.add_page(filename, content)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def add_index_page
|
76
|
+
filename = "features.md"
|
77
|
+
content = "# Features\n\n"
|
78
|
+
|
79
|
+
puts " Creating index page: #{filename}"
|
80
|
+
|
81
|
+
nested = @features.group_by(&:index_page)
|
82
|
+
|
83
|
+
if nested.key?("features.md") && nested["features.md"].any?
|
84
|
+
features = nested.delete("features.md")
|
85
|
+
|
86
|
+
features.each do |f|
|
87
|
+
content << "- #{f.relative_link}\n"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
nested.each do |folder, features|
|
92
|
+
content << "- **[[#{folder.gsub('.md', '')}|#{folder}]]**\n"
|
93
|
+
|
94
|
+
features.each do |f|
|
95
|
+
content << " - #{f.relative_link}\n"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
@wiki.add_page(filename, content)
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
Gitnesse::Cli.task :run do
|
2
|
+
desc "Pulls changes from remote git-based wiki, and runs Cucumber."
|
3
|
+
|
4
|
+
help do
|
5
|
+
<<-EOS
|
6
|
+
USAGE: gitnesse run
|
7
|
+
|
8
|
+
#{desc}
|
9
|
+
|
10
|
+
Pulls changed features from remote git-based wiki, runs Cucumber, and pushes
|
11
|
+
annotated results to the remote git-based wiki if the "annotate_results" setting
|
12
|
+
is enabled.
|
13
|
+
|
14
|
+
Examples:
|
15
|
+
gitnesse run # will pull changes, run cucumber, and annotate results
|
16
|
+
EOS
|
17
|
+
end
|
18
|
+
|
19
|
+
def perform
|
20
|
+
load_and_check_config
|
21
|
+
clone_wiki
|
22
|
+
extract_features_from_wiki
|
23
|
+
create_or_update_local_features
|
24
|
+
|
25
|
+
puts " Local features updated."
|
26
|
+
|
27
|
+
remove_existing_results_from_wiki
|
28
|
+
|
29
|
+
create_hooks
|
30
|
+
run_features
|
31
|
+
remove_hooks
|
32
|
+
|
33
|
+
push_annotated_results_to_wiki
|
34
|
+
|
35
|
+
puts " Done."
|
36
|
+
end
|
37
|
+
|
38
|
+
# Public: Removes existing Gitnesse results from all wiki pages
|
39
|
+
#
|
40
|
+
# Returns nothing
|
41
|
+
def remove_existing_results_from_wiki
|
42
|
+
@wiki.pages.each(&:remove_results) if @config.annotate_results
|
43
|
+
end
|
44
|
+
|
45
|
+
# Public: Installs Gitnesse hooks for Cucumber
|
46
|
+
#
|
47
|
+
# Returns nothing
|
48
|
+
def create_hooks
|
49
|
+
if @config.annotate_results
|
50
|
+
puts " Installing Gitnesse Cucumber hooks."
|
51
|
+
Gitnesse::Hooks.create!
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# Public: Removes installed Gitnesse Cucumber hooks
|
56
|
+
#
|
57
|
+
# Returns nothing
|
58
|
+
def remove_hooks
|
59
|
+
if @config.annotate_results
|
60
|
+
puts " Removing Gitnesse Cucumber hooks."
|
61
|
+
Gitnesse::Hooks.destroy!
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Public: Runs Cucumber features
|
66
|
+
#
|
67
|
+
# Returns nothing
|
68
|
+
def run_features
|
69
|
+
puts " Running cucumber."
|
70
|
+
puts ' -------------------', ''
|
71
|
+
system "cucumber #{@config.features_dir}"
|
72
|
+
puts ' -------------------', ''
|
73
|
+
end
|
74
|
+
|
75
|
+
# Public: Pushes features with annotations to remote wiki
|
76
|
+
#
|
77
|
+
# Returns nothing
|
78
|
+
def push_annotated_results_to_wiki
|
79
|
+
if @config.annotate_results
|
80
|
+
puts " Pushing annotated results to remote wiki."
|
81
|
+
@wiki.commit
|
82
|
+
@wiki.push
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
Dir["#{File.dirname(__FILE__)}/helpers/*.rb"].each { |f| require f }
|
2
|
+
|
3
|
+
module Gitnesse
|
4
|
+
class Cli
|
5
|
+
class Task
|
6
|
+
include Gitnesse::Cli::ConfigHelpers
|
7
|
+
include Gitnesse::Cli::FeatureHelpers
|
8
|
+
include Gitnesse::Cli::WikiHelpers
|
9
|
+
|
10
|
+
attr_accessor :out
|
11
|
+
|
12
|
+
class << self
|
13
|
+
attr_accessor :name
|
14
|
+
|
15
|
+
def desc(string = nil)
|
16
|
+
string ? @desc = string : @desc
|
17
|
+
end
|
18
|
+
|
19
|
+
def help
|
20
|
+
block_given? ? @help = yield : @help
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def initialize(out)
|
25
|
+
@out = out
|
26
|
+
@config = Gitnesse::Config.instance
|
27
|
+
end
|
28
|
+
|
29
|
+
def perform(*); end
|
30
|
+
def description; end
|
31
|
+
def help; end
|
32
|
+
|
33
|
+
private
|
34
|
+
def puts(*args)
|
35
|
+
out.puts *args
|
36
|
+
end
|
37
|
+
|
38
|
+
def print(*args)
|
39
|
+
out.print *args
|
40
|
+
end
|
41
|
+
|
42
|
+
def abort(*args)
|
43
|
+
out.puts *args
|
44
|
+
exit 1
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def tasks
|
49
|
+
@tasks ||= Hash[self.class.tasks.map { |name, t| [name, t.new(out)] }]
|
50
|
+
end
|
51
|
+
|
52
|
+
class << self
|
53
|
+
def task(*names, &block)
|
54
|
+
task = Class.new(Task, &block)
|
55
|
+
names.map!(&:to_s)
|
56
|
+
task.name = names.first
|
57
|
+
names.each { |name| tasks[name] = task }
|
58
|
+
end
|
59
|
+
|
60
|
+
def tasks
|
61
|
+
@tasks ||= {}
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
Dir[File.dirname(__FILE__) + "/task/*.rb"].each { |f| require(f) }
|
data/lib/gitnesse/cli.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'gitnesse'
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
require 'optparse/version'
|
5
|
+
|
6
|
+
require 'gitnesse/cli/task'
|
7
|
+
|
8
|
+
module Gitnesse
|
9
|
+
class Cli
|
10
|
+
attr_accessor :out, :parser
|
11
|
+
|
12
|
+
def initialize(out = STDOUT)
|
13
|
+
@out = out
|
14
|
+
setup_parser
|
15
|
+
end
|
16
|
+
|
17
|
+
def parse(args = ARGV)
|
18
|
+
parser.parse! args
|
19
|
+
|
20
|
+
arg = args.shift.to_s
|
21
|
+
|
22
|
+
if task = tasks[arg]
|
23
|
+
task.perform(*args)
|
24
|
+
else
|
25
|
+
abort "No such task."
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
def setup_parser
|
31
|
+
@parser = OptionParser.new do |o|
|
32
|
+
o.on_tail '-v', '--version' do
|
33
|
+
puts parser.ver
|
34
|
+
exit
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
parser.program_name = 'gitnesse'
|
39
|
+
parser.version = Gitnesse::VERSION
|
40
|
+
end
|
41
|
+
|
42
|
+
def print(*args)
|
43
|
+
out.print *args
|
44
|
+
end
|
45
|
+
|
46
|
+
def puts(*args)
|
47
|
+
out.puts *args
|
48
|
+
end
|
49
|
+
|
50
|
+
def abort(*args)
|
51
|
+
puts *args
|
52
|
+
exit 1
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|