atlassian-stash 0.1.6 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
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
- $> bundler install
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
- require 'rcov/rcovtask'
37
- Rcov::RcovTask.new do |test|
38
- test.libs << 'test'
39
- test.pattern = 'test/**/test_*.rb'
40
- test.verbose = true
41
- test.rcov_opts << '--exclude "gems/*"'
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
- task :default => :test
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.6
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 generate_pull_request_title(source, target)
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"].downcase)
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, initheader = {'Content-Type' => 'application/json', 'Accept' => 'application/json'})
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 {|http| http.request(req) }
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
@@ -1,2 +1,3 @@
1
1
 
2
+ Dir[File.join(File.dirname(__FILE__), "atlassian", "util", "*.rb")].sort.each {|f| require f}
2
3
  Dir[File.join(File.dirname(__FILE__), "atlassian", "stash", "*.rb")].sort.each {|f| require f}
data/test/helper.rb CHANGED
@@ -1,5 +1,13 @@
1
1
  require 'rubygems'
2
2
  require 'bundler'
3
+
4
+ if ENV["COVERAGE"]
5
+ require "simplecov"
6
+ SimpleCov.start :test_frameworks do
7
+ add_filter "/vendor/"
8
+ end
9
+ end
10
+
3
11
  begin
4
12
  Bundler.setup(:default, :development)
5
13
  rescue Bundler::BundlerError => e
@@ -4,27 +4,64 @@ include Atlassian::Stash
4
4
  include Atlassian::Stash::Git
5
5
 
6
6
  class TestStashCreatePullRequest < Test::Unit::TestCase
7
-
8
- should "extract project key and repo slug from Stash remote" do
9
- remote = "https://sruiz@stash-dev.atlassian.com/scm/STASH/stash.git"
10
- cpr = CreatePullRequest.new nil
11
- ri = cpr.extract_repository_info remote
12
- assert_equal 'STASH', ri.projectKey
13
- assert_equal 'stash', ri.slug
14
- end
15
-
16
- should "extracting project key and repo slug from non stash url raises exception" do
17
- remote = "git@bitbucket.org:sebr/atlassian-stash-rubygem.git"
18
- cpr = CreatePullRequest.new nil
19
- assert_raise(RuntimeError) { cpr.extract_repository_info remote }
20
- end
21
-
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
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
- prerelease: false
5
- segments:
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
- date: 2012-11-07 00:00:00 +11:00
18
- default_executable: stash
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
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
- type: :development
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
- version_requirements: &id004 !ruby/object:Gem::Requirement
61
- requirements:
62
- - - ">="
63
- - !ruby/object:Gem::Version
64
- segments:
65
- - 0
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
- version_requirements: &id005 !ruby/object:Gem::Requirement
73
- requirements:
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
74
99
  - - ~>
75
- - !ruby/object:Gem::Version
76
- segments:
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
- version_requirements: &id006 !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- segments:
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
- version_requirements: &id007 !ruby/object:Gem::Requirement
100
- requirements:
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
- version_requirements: &id008 !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- segments:
118
- - 0
119
- version: "0"
120
- requirement: *id008
121
- description: Provides convenient functions for interacting with Atlassian Stash through the command line
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
- has_rdoc: true
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
- requirements:
156
- - - ">="
157
- - !ruby/object:Gem::Version
158
- segments:
159
- - 0
160
- version: "0"
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
- version: "0"
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.3.6
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
-