atlassian-stash 0.1.6 → 0.1.8
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/Gemfile +3 -1
- data/README.md +1 -1
- data/Rakefile +22 -7
- data/VERSION +1 -1
- data/bin/stash +3 -2
- data/lib/atlassian/stash/pullrequest.rb +46 -16
- data/lib/atlassian/util/text_util.rb +31 -0
- data/lib/stash_cli.rb +1 -0
- data/test/helper.rb +8 -0
- data/test/test_stash-create-pull-request.rb +61 -24
- data/test/test_text-util.rb +103 -0
- metadata +171 -119
data/Gemfile
CHANGED
@@ -6,6 +6,7 @@ source "http://rubygems.org"
|
|
6
6
|
gem "git"
|
7
7
|
gem "json"
|
8
8
|
gem "commander"
|
9
|
+
gem "launchy"
|
9
10
|
|
10
11
|
# Add dependencies to develop your gem here.
|
11
12
|
# Include everything needed to run rake, tests, features, etc.
|
@@ -14,5 +15,6 @@ group :development do
|
|
14
15
|
gem "rdoc", "~> 3.12"
|
15
16
|
gem "bundler", ">= 1.2.0"
|
16
17
|
gem "jeweler", "~> 1.8.4"
|
17
|
-
gem "rcov", ">= 0"
|
18
|
+
gem "rcov", ">= 0", :platforms => :ruby_18
|
19
|
+
gem "simplecov", ">= 0", :platforms => :ruby_19, :require => "false"
|
18
20
|
end
|
data/README.md
CHANGED
@@ -37,6 +37,6 @@ Thanks! Please [fork this project](https://bitbucket.org/atlassian/stash-command
|
|
37
37
|
Building this gem is easy. To get started, run the following commands:
|
38
38
|
|
39
39
|
$> gem install bundler
|
40
|
-
$>
|
40
|
+
$> bundle install
|
41
41
|
|
42
42
|
Now start hacking, and run the stash command by invoking `./bin/stash command`
|
data/Rakefile
CHANGED
@@ -33,15 +33,30 @@ Rake::TestTask.new(:test) do |test|
|
|
33
33
|
test.verbose = true
|
34
34
|
end
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
36
|
+
task :default => :test
|
37
|
+
|
38
|
+
begin
|
39
|
+
require 'rcov/rcovtask'
|
40
|
+
|
41
|
+
Rcov::RcovTask.new do |test|
|
42
|
+
test.libs << 'test'
|
43
|
+
test.pattern = 'test/**/test_*.rb'
|
44
|
+
test.verbose = true
|
45
|
+
test.rcov_opts << '--exclude "gems/*"'
|
46
|
+
end
|
47
|
+
rescue LoadError => e
|
42
48
|
end
|
43
49
|
|
44
|
-
|
50
|
+
begin
|
51
|
+
require "simplecov"
|
52
|
+
|
53
|
+
desc "Execute tests with coverage report"
|
54
|
+
task :simplecov do
|
55
|
+
ENV["COVERAGE"]="true"
|
56
|
+
Rake::Task["test"].execute
|
57
|
+
end
|
58
|
+
rescue LoadError
|
59
|
+
end
|
45
60
|
|
46
61
|
require 'rdoc/task'
|
47
62
|
Rake::RDocTask.new do |rdoc|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.8
|
data/bin/stash
CHANGED
@@ -58,8 +58,9 @@ command 'pull-request' do |c|
|
|
58
58
|
}.compact
|
59
59
|
end
|
60
60
|
|
61
|
-
c.syntax = 'pull-request [sourceBranch] targetBranch [@reviewer1 @reviewer2]'
|
61
|
+
c.syntax = 'pull-request [sourceBranch] targetBranch [@reviewer1 @reviewer2] [options]'
|
62
62
|
c.description = 'Create a pull request in Stash'
|
63
|
+
c.option '-o', '--open', 'Open the created pull request page in a web browser'
|
63
64
|
c.example 'stash pull-request topicBranch master @michael', "Create a pull request from branch 'topicBranch' into 'master' with 'michael' added as a reviewer"
|
64
65
|
c.example 'stash pull-request master', "Create a pull request from the current git branch into 'master'"
|
65
66
|
c.action do |args, options|
|
@@ -80,7 +81,7 @@ command 'pull-request' do |c|
|
|
80
81
|
|
81
82
|
ensure_within_git! do
|
82
83
|
cpr = CreatePullRequest.new(load_config)
|
83
|
-
cpr.create_pull_request source, target, reviewers
|
84
|
+
cpr.create_pull_request source, target, reviewers, options
|
84
85
|
end
|
85
86
|
end
|
86
87
|
end
|
@@ -2,6 +2,9 @@ require 'json'
|
|
2
2
|
require 'net/https'
|
3
3
|
require 'uri'
|
4
4
|
require 'git'
|
5
|
+
require 'launchy'
|
6
|
+
|
7
|
+
include Atlassian::Util::TextUtil
|
5
8
|
|
6
9
|
module Atlassian
|
7
10
|
module Stash
|
@@ -25,11 +28,12 @@ module Atlassian
|
|
25
28
|
}
|
26
29
|
@resource = {
|
27
30
|
'title' => title,
|
31
|
+
'description' => description,
|
28
32
|
'fromRef' => fromRef,
|
29
33
|
'toRef' => toRef
|
30
34
|
}
|
31
35
|
|
32
|
-
@resource["reviewers"] = reviewers.collect { |r|
|
36
|
+
@resource["reviewers"] = reviewers.collect { |r|
|
33
37
|
{
|
34
38
|
'user' => {
|
35
39
|
'name' => r
|
@@ -48,44 +52,41 @@ module Atlassian
|
|
48
52
|
end
|
49
53
|
|
50
54
|
def extract_repository_info (url = get_remote_url)
|
51
|
-
if m = url.match(/\/([a-zA-Z][a-zA-Z0-9_]*)\/([[:alnum:]][\w\-\.]*).git$/)
|
55
|
+
if m = url.match(/\/([a-zA-Z~][a-zA-Z0-9_]*)\/([[:alnum:]][\w\-\.]*).git$/)
|
52
56
|
return RepoInfo.new(m[1], m[2])
|
53
57
|
end
|
54
58
|
raise "Repository does not seem to be hosted in Stash"
|
55
59
|
end
|
56
60
|
|
57
|
-
def
|
58
|
-
output = %x(git log --reverse --format=%s #{target}..#{source}).split(/\n/).first
|
59
|
-
output || 'Merge \'%s\' into \'%s\'' % [source, target]
|
60
|
-
end
|
61
|
-
|
62
|
-
|
63
|
-
def create_pull_request(source, target, reviewers)
|
61
|
+
def create_pull_request(source, target, reviewers, options)
|
64
62
|
Process.exit if not target or not source
|
65
63
|
|
64
|
+
@source = source
|
65
|
+
@target = target
|
66
|
+
|
66
67
|
repoInfo = extract_repository_info
|
67
|
-
title = generate_pull_request_title source, target
|
68
|
-
description = ''
|
69
68
|
|
70
|
-
resource = CreatePullRequestResource.new(repoInfo.projectKey, repoInfo.slug, title, description, reviewers, source, target).resource
|
69
|
+
resource = CreatePullRequestResource.new(repoInfo.projectKey, repoInfo.slug, title, description, reviewers, @source, @target).resource
|
71
70
|
|
72
71
|
username = @config["username"]
|
73
72
|
password = @config["password"]
|
73
|
+
proxy_addr, proxy_port = parse_proxy(@config["proxy"])
|
74
74
|
|
75
75
|
username = ask("Username: ") unless @config["username"]
|
76
76
|
password = ask("Password: ") { |q| q.echo = '*' } unless @config["password"]
|
77
77
|
|
78
|
-
uri = URI.parse(@config["stash_url"]
|
78
|
+
uri = URI.parse(@config["stash_url"])
|
79
79
|
prPath = uri.path + '/projects/' + repoInfo.projectKey + '/repos/' + repoInfo.slug + '/pull-requests'
|
80
|
+
prPath = uri.query.nil? ? "#{prPath}" : "#{prPath}?#{uri.query}"
|
80
81
|
|
81
|
-
req = Net::HTTP::Post.new(prPath,
|
82
|
+
req = Net::HTTP::Post.new(prPath, {'Content-Type' => 'application/json', 'Accept' => 'application/json'})
|
82
83
|
req.basic_auth username, password
|
83
84
|
req.body = resource.to_json
|
84
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
85
|
+
http = Net::HTTP.new(uri.host, uri.port, proxy_addr, proxy_port)
|
85
86
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
86
87
|
http.use_ssl = uri.scheme.eql?("https")
|
87
88
|
|
88
|
-
response = http.start {|
|
89
|
+
response = http.start {|conn| conn.request(req) }
|
89
90
|
|
90
91
|
if not response.is_a? Net::HTTPCreated
|
91
92
|
responseBody = JSON.parse(response.body)
|
@@ -110,8 +111,37 @@ module Atlassian
|
|
110
111
|
prUri = uri.clone
|
111
112
|
prUri.path = prPath + '/' + responseBody['id'].to_s
|
112
113
|
puts prUri.to_s
|
114
|
+
|
115
|
+
if @config["open"] || options.open
|
116
|
+
Launchy.open prUri.to_s
|
117
|
+
end
|
113
118
|
end
|
119
|
+
end
|
120
|
+
|
121
|
+
private
|
114
122
|
|
123
|
+
def title
|
124
|
+
convert_branch_name_to_sentence(@source) || "Merge '#{@source}' into '#{@target}'"
|
125
|
+
end
|
126
|
+
|
127
|
+
def description
|
128
|
+
git_commit_messages
|
129
|
+
end
|
130
|
+
|
131
|
+
def git_commit_messages
|
132
|
+
@commit_messages ||= `git log --reverse --format=%s #{@target}..#{@source}`
|
133
|
+
end
|
134
|
+
|
135
|
+
def parse_proxy(conf)
|
136
|
+
return nil, nil unless conf
|
137
|
+
|
138
|
+
addr, port = conf.split(":")
|
139
|
+
if port =~ /\d+/
|
140
|
+
port = port.to_i
|
141
|
+
else
|
142
|
+
port = nil
|
143
|
+
end
|
144
|
+
[addr, port]
|
115
145
|
end
|
116
146
|
end
|
117
147
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
|
2
|
+
module Atlassian
|
3
|
+
module Util
|
4
|
+
module TextUtil
|
5
|
+
def convert_branch_name_to_sentence(branch_name)
|
6
|
+
return '' if branch_name.nil?
|
7
|
+
|
8
|
+
branch_name = branch_name.to_s
|
9
|
+
return '' if branch_name.empty?
|
10
|
+
|
11
|
+
issue_key_regex = /([A-Z]{1,10}-\d+)/
|
12
|
+
branch_components = branch_name.split(issue_key_regex);
|
13
|
+
|
14
|
+
parts = branch_components.each_with_index.map { |value, index|
|
15
|
+
(index % 2 === 0) ? value.gsub(/[\-_]/, ' ') : value
|
16
|
+
}
|
17
|
+
|
18
|
+
to_sentence_case(parts.join(''))
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_sentence_case(str)
|
22
|
+
return '' if str.nil?
|
23
|
+
|
24
|
+
str = str.to_s
|
25
|
+
return '' if str.empty?
|
26
|
+
|
27
|
+
str[0].upcase + str.slice(1, str.length)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/stash_cli.rb
CHANGED
data/test/helper.rb
CHANGED
@@ -4,27 +4,64 @@ include Atlassian::Stash
|
|
4
4
|
include Atlassian::Stash::Git
|
5
5
|
|
6
6
|
class TestStashCreatePullRequest < Test::Unit::TestCase
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
end
|
7
|
+
|
8
|
+
context "Extract repository info" do
|
9
|
+
should "extract project key and repo slug from Stash remote" do
|
10
|
+
remote = "https://sruiz@stash-dev.atlassian.com/scm/STASH/stash.git"
|
11
|
+
cpr = CreatePullRequest.new nil
|
12
|
+
ri = cpr.extract_repository_info remote
|
13
|
+
assert_equal 'STASH', ri.projectKey
|
14
|
+
assert_equal 'stash', ri.slug
|
15
|
+
end
|
16
|
+
|
17
|
+
should "extracting project key and repo slug from non stash url raises exception" do
|
18
|
+
remote = "git@bitbucket.org:sebr/atlassian-stash-rubygem.git"
|
19
|
+
cpr = CreatePullRequest.new nil
|
20
|
+
assert_raise(RuntimeError) { cpr.extract_repository_info remote }
|
21
|
+
end
|
22
|
+
|
23
|
+
should "repo with hyphes" do
|
24
|
+
remote = "https://sruiz@stash-dev.atlassian.com/scm/s745h/stash-repository.git"
|
25
|
+
cpr = CreatePullRequest.new nil
|
26
|
+
ri = cpr.extract_repository_info remote
|
27
|
+
assert_equal 's745h', ri.projectKey
|
28
|
+
assert_equal 'stash-repository', ri.slug
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context "#parse_proxy" do
|
33
|
+
setup do
|
34
|
+
@cpr = CreatePullRequest.new nil
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'when proxy_conf is nil' do
|
38
|
+
should 'returns [nil, nil]' do
|
39
|
+
assert_equal [nil, nil], @cpr.send(:parse_proxy, nil)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'when proxy_conf is blank' do
|
44
|
+
should 'returns [nil, nil]' do
|
45
|
+
assert_equal [nil, nil], @cpr.send(:parse_proxy, "")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'when proxy_conf is "proxy.example.com"' do
|
50
|
+
should 'returns ["proxy.example.com", nil]' do
|
51
|
+
assert_equal ["proxy.example.com", nil], @cpr.send(:parse_proxy, "proxy.example.com")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context 'when proxy_conf is "proxy.example.com:8080"' do
|
56
|
+
should 'returns ["proxy.example.com", 8080]' do
|
57
|
+
assert_equal ["proxy.example.com", 8080], @cpr.send(:parse_proxy, "proxy.example.com:8080")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context 'when proxy_conf is "proxy.example.com:foo"' do
|
62
|
+
should 'returns ["proxy.example.com", nil]' do
|
63
|
+
assert_equal ["proxy.example.com", nil], @cpr.send(:parse_proxy, "proxy.example.com:foo")
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
|
2
|
+
include Atlassian::Util::TextUtil
|
3
|
+
|
4
|
+
class TextUtilTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
context "to_sentence_case" do
|
7
|
+
should "work with an empty string" do
|
8
|
+
assert_equal "", to_sentence_case("")
|
9
|
+
end
|
10
|
+
|
11
|
+
should "work with a single letter" do
|
12
|
+
assert_equal "A", to_sentence_case("a")
|
13
|
+
end
|
14
|
+
|
15
|
+
should "work with a single number" do
|
16
|
+
assert_equal "1", to_sentence_case("1")
|
17
|
+
end
|
18
|
+
|
19
|
+
should "work with multichar" do
|
20
|
+
assert_equal "Abc def", to_sentence_case("abc def")
|
21
|
+
end
|
22
|
+
|
23
|
+
should "coerce boolean false" do
|
24
|
+
assert_equal "False", to_sentence_case(false)
|
25
|
+
end
|
26
|
+
|
27
|
+
should "coerce boolean true" do
|
28
|
+
assert_equal "True", to_sentence_case(true)
|
29
|
+
end
|
30
|
+
|
31
|
+
should "coerce nil" do
|
32
|
+
assert_equal "", to_sentence_case(nil)
|
33
|
+
end
|
34
|
+
|
35
|
+
should "coerce 0" do
|
36
|
+
assert_equal "0", to_sentence_case(0)
|
37
|
+
end
|
38
|
+
|
39
|
+
should "coerce 1" do
|
40
|
+
assert_equal "1", to_sentence_case(1)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context "convert_branch_name_to_sentence" do
|
45
|
+
|
46
|
+
should "work with branch name with leading issue key" do
|
47
|
+
assert_equal "STASHDEV-1234 branch name", convert_branch_name_to_sentence("STASHDEV-1234-branch-name")
|
48
|
+
end
|
49
|
+
|
50
|
+
should "work with branch name with trailing issue key" do
|
51
|
+
assert_equal "Branch name STASHDEV-1234", convert_branch_name_to_sentence("branch-name-STASHDEV-1234")
|
52
|
+
end
|
53
|
+
|
54
|
+
should "work with branch name with issue key in middle" do
|
55
|
+
assert_equal "Branch STASHDEV-1234 name", convert_branch_name_to_sentence("branch-STASHDEV-1234-name")
|
56
|
+
end
|
57
|
+
|
58
|
+
should "work with branch name with multiple adjacent issue keys" do
|
59
|
+
assert_equal "Branch name STASHDEV-1234 STASHDEV-1234", convert_branch_name_to_sentence("branch-name-STASHDEV-1234-STASHDEV-1234")
|
60
|
+
end
|
61
|
+
|
62
|
+
should "work with branch name with no issue keys" do
|
63
|
+
assert_equal "Tests branch name", convert_branch_name_to_sentence("tests-branch-name")
|
64
|
+
end
|
65
|
+
|
66
|
+
should "work with branch name with underscore delimiter" do
|
67
|
+
assert_equal "Tests branch name", convert_branch_name_to_sentence("tests_branch_name")
|
68
|
+
end
|
69
|
+
|
70
|
+
should "work with branch name with mixed delimiter" do
|
71
|
+
assert_equal "Tests branch name", convert_branch_name_to_sentence("tests-branch_name")
|
72
|
+
end
|
73
|
+
|
74
|
+
should "work with single word branch name" do
|
75
|
+
assert_equal "Branchname", convert_branch_name_to_sentence("branchname")
|
76
|
+
end
|
77
|
+
|
78
|
+
should "work with slash delimited branch name" do
|
79
|
+
assert_equal "Feature/tests/STASHDEV-1234 branch name", convert_branch_name_to_sentence("feature/tests/STASHDEV-1234-branch-name")
|
80
|
+
end
|
81
|
+
|
82
|
+
should "work with slash delimited branch name with issue key component" do
|
83
|
+
assert_equal "Feature/STASHDEV-1234/branch name", convert_branch_name_to_sentence("feature/STASHDEV-1234/branch-name")
|
84
|
+
end
|
85
|
+
|
86
|
+
should "work with branch name with invalid issue key (punctuation)" do
|
87
|
+
assert_equal "STASHDEV! 1234 branch name", convert_branch_name_to_sentence("STASHDEV!-1234-branch-name")
|
88
|
+
end
|
89
|
+
|
90
|
+
should "work with branch name with invalid issue key (lowercase)" do
|
91
|
+
assert_equal "Stashdev 1234 branch name", convert_branch_name_to_sentence("stashdev-1234-branch-name")
|
92
|
+
end
|
93
|
+
|
94
|
+
should "work with branch name with invalid issue key (numbers in project key)" do
|
95
|
+
assert_equal "STASHDEV1 1234 branch name", convert_branch_name_to_sentence("STASHDEV1-1234-branch-name")
|
96
|
+
end
|
97
|
+
|
98
|
+
should "work with empty branch name" do
|
99
|
+
assert_equal "", convert_branch_name_to_sentence("")
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
metadata
CHANGED
@@ -1,133 +1,186 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: atlassian-stash
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 1
|
8
|
-
- 6
|
9
|
-
version: 0.1.6
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.8
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Seb Ruiz
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
12
|
+
date: 2013-11-13 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: git
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
21
23
|
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: json
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
22
38
|
type: :runtime
|
23
|
-
name: git
|
24
|
-
version_requirements: &id001 !ruby/object:Gem::Requirement
|
25
|
-
requirements:
|
26
|
-
- - ">="
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
segments:
|
29
|
-
- 0
|
30
|
-
version: "0"
|
31
|
-
requirement: *id001
|
32
|
-
- !ruby/object:Gem::Dependency
|
33
39
|
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: commander
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
34
54
|
type: :runtime
|
35
|
-
name: json
|
36
|
-
version_requirements: &id002 !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
segments:
|
41
|
-
- 0
|
42
|
-
version: "0"
|
43
|
-
requirement: *id002
|
44
|
-
- !ruby/object:Gem::Dependency
|
45
55
|
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: launchy
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
46
70
|
type: :runtime
|
47
|
-
name: commander
|
48
|
-
version_requirements: &id003 !ruby/object:Gem::Requirement
|
49
|
-
requirements:
|
50
|
-
- - ">="
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
segments:
|
53
|
-
- 0
|
54
|
-
version: "0"
|
55
|
-
requirement: *id003
|
56
|
-
- !ruby/object:Gem::Dependency
|
57
71
|
prerelease: false
|
58
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
59
79
|
name: shoulda
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
version: "0"
|
67
|
-
requirement: *id004
|
68
|
-
- !ruby/object:Gem::Dependency
|
69
|
-
prerelease: false
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
70
86
|
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
71
95
|
name: rdoc
|
72
|
-
|
73
|
-
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
74
99
|
- - ~>
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
|
77
|
-
- 3
|
78
|
-
- 12
|
79
|
-
version: "3.12"
|
80
|
-
requirement: *id005
|
81
|
-
- !ruby/object:Gem::Dependency
|
82
|
-
prerelease: false
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '3.12'
|
83
102
|
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '3.12'
|
110
|
+
- !ruby/object:Gem::Dependency
|
84
111
|
name: bundler
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
- 1
|
91
|
-
- 2
|
92
|
-
- 0
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
93
117
|
version: 1.2.0
|
94
|
-
requirement: *id006
|
95
|
-
- !ruby/object:Gem::Dependency
|
96
|
-
prerelease: false
|
97
118
|
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 1.2.0
|
126
|
+
- !ruby/object:Gem::Dependency
|
98
127
|
name: jeweler
|
99
|
-
|
100
|
-
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
101
131
|
- - ~>
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
segments:
|
104
|
-
- 1
|
105
|
-
- 8
|
106
|
-
- 4
|
132
|
+
- !ruby/object:Gem::Version
|
107
133
|
version: 1.8.4
|
108
|
-
requirement: *id007
|
109
|
-
- !ruby/object:Gem::Dependency
|
110
|
-
prerelease: false
|
111
134
|
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ~>
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 1.8.4
|
142
|
+
- !ruby/object:Gem::Dependency
|
112
143
|
name: rcov
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: simplecov
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - ! '>='
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
type: :development
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
description: Provides convenient functions for interacting with Atlassian Stash through
|
175
|
+
the command line
|
122
176
|
email: sruiz@atlassian.com
|
123
|
-
executables:
|
177
|
+
executables:
|
124
178
|
- stash
|
125
179
|
extensions: []
|
126
|
-
|
127
|
-
extra_rdoc_files:
|
180
|
+
extra_rdoc_files:
|
128
181
|
- LICENSE.txt
|
129
182
|
- README.md
|
130
|
-
files:
|
183
|
+
files:
|
131
184
|
- .document
|
132
185
|
- Gemfile
|
133
186
|
- LICENSE.txt
|
@@ -138,39 +191,38 @@ files:
|
|
138
191
|
- lib/atlassian/stash/git.rb
|
139
192
|
- lib/atlassian/stash/pullrequest.rb
|
140
193
|
- lib/atlassian/stash/version.rb
|
194
|
+
- lib/atlassian/util/text_util.rb
|
141
195
|
- lib/stash_cli.rb
|
142
196
|
- test/helper.rb
|
143
197
|
- test/test_stash-create-pull-request.rb
|
144
198
|
- test/test_stash-git.rb
|
145
|
-
|
199
|
+
- test/test_text-util.rb
|
146
200
|
homepage: https://bitbucket.org/atlassian/stash-command-line-tools
|
147
|
-
licenses:
|
201
|
+
licenses:
|
148
202
|
- MIT
|
149
203
|
post_install_message:
|
150
204
|
rdoc_options: []
|
151
|
-
|
152
|
-
require_paths:
|
205
|
+
require_paths:
|
153
206
|
- lib
|
154
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
|
-
requirements:
|
163
|
-
- - ">="
|
164
|
-
- !ruby/object:Gem::Version
|
165
|
-
segments:
|
207
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
208
|
+
none: false
|
209
|
+
requirements:
|
210
|
+
- - ! '>='
|
211
|
+
- !ruby/object:Gem::Version
|
212
|
+
version: '0'
|
213
|
+
segments:
|
166
214
|
- 0
|
167
|
-
|
215
|
+
hash: 4305375427045807658
|
216
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
217
|
+
none: false
|
218
|
+
requirements:
|
219
|
+
- - ! '>='
|
220
|
+
- !ruby/object:Gem::Version
|
221
|
+
version: '0'
|
168
222
|
requirements: []
|
169
|
-
|
170
223
|
rubyforge_project:
|
171
|
-
rubygems_version: 1.
|
224
|
+
rubygems_version: 1.8.25
|
172
225
|
signing_key:
|
173
226
|
specification_version: 3
|
174
227
|
summary: Command line tools for Atlassian Stash
|
175
228
|
test_files: []
|
176
|
-
|