atlassian-stash 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f108029674203b07feb43c788c21b500f2a681d6
4
- data.tar.gz: 969ff0cb30cf6bb55fa6f137714aaf7b7ea8db50
3
+ metadata.gz: d378f61db7522c5d9871c7b62c11417d4d36f1fd
4
+ data.tar.gz: 962a88dee48cc89db7d571a6ea26b19f0780c295
5
5
  SHA512:
6
- metadata.gz: 283e3979a42e790293548dc7a5e5f0164c16e185dd7361b2853e7dd1a5b6b2e2114484f0817ebb39db3a930f90c771553e73c71d4735b5674eaa336c831e3cd8
7
- data.tar.gz: db3063ea5662fbd4d1a9ad9ae065130d9e65aff823bf66e58a4b6087d9f7239cceee67a7268f4a290cf8915dcf163337a6b1bf7681247f604d6c705d3a776e6c
6
+ metadata.gz: bb4c15d5dd4222fee274a182d788daaa480a6eaa5ca0d9a708f138febc610a984ab29e2c8a2a366e0ecf899fe81f67267a903e45c1df5e2cb4f75846ed6c950e
7
+ data.tar.gz: f6cb1f5021840101f9675b49f9ebebf12b98457372994e2459e86ecfc8d35833eee7a945cf89b4405af842d4d4677348069957cac96245bd584fee5f71463e55
data/Gemfile CHANGED
@@ -18,4 +18,5 @@ group :development do
18
18
  gem "rcov", ">= 0", :platforms => :ruby_18
19
19
  gem "simplecov", ">= 0", :platforms => :ruby_19, :require => "false"
20
20
  gem "minitest", ">= 0", :platforms => :ruby_19
21
+ gem "mocha", ">= 0"
21
22
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.1
1
+ 0.3.2
data/bin/stash CHANGED
@@ -34,7 +34,7 @@ def repo_config
34
34
  if (stash_config.exist? && stash_config.file?)
35
35
  @repo_config = YAML.load_file(stash_config)
36
36
  end
37
- @repo_config
37
+ Hash.new
38
38
  end
39
39
 
40
40
  command 'configure' do |c|
@@ -71,7 +71,7 @@ end
71
71
 
72
72
  command 'pull-request' do |c|
73
73
  def extract_reviewers(args = [])
74
- default_reviewers = repo_config.nil? ? [] : Array(repo_config[:reviewers])
74
+ default_reviewers = repo_config.nil? ? Array.new : Array(repo_config[:reviewers])
75
75
  default_reviewers.concat args.collect { |user|
76
76
  user[1..-1] if user.start_with?("@")
77
77
  }.compact
@@ -122,10 +122,8 @@ command 'browse' do |c|
122
122
  tab = args.shift unless args.empty?
123
123
 
124
124
  config = load_config
125
- remote = options.remote || config['remote']
126
- remote_url = get_remote_url(remote)
127
125
 
128
- repoInfo = RepoInfo.create(config, remote_url)
126
+ repoInfo = RepoInfo.create(config, options.remote)
129
127
 
130
128
  branch = options.branch || get_current_branch
131
129
 
@@ -3,6 +3,9 @@
3
3
  module Atlassian
4
4
  module Stash
5
5
  module Git
6
+
7
+ DEFAULT_REMOTE="origin"
8
+
6
9
  def get_current_branch
7
10
  %x(git symbolic-ref HEAD)[/refs\/heads\/(.*)/, 1]
8
11
  end
@@ -15,8 +18,14 @@ module Atlassian
15
18
  %x(git remote -v)
16
19
  end
17
20
 
18
- def get_remote_url(remote = 'origin')
19
- origin = get_remotes.split("\n").collect { |r| r.strip }.grep(/^#{remote}.*\(push\)$/).first
21
+ def get_remote_url(remote=nil)
22
+ remotes = get_remotes
23
+ return nil if remotes.empty?
24
+
25
+ remote = DEFAULT_REMOTE if remote.nil? || remote.empty?
26
+
27
+ origin = remotes.split("\n").collect { |r| r.strip }.grep(/^#{remote}.*\(push\)$/).first
28
+ return nil if origin.nil?
20
29
  URI.extract(origin).first
21
30
  end
22
31
 
@@ -56,8 +56,7 @@ module Atlassian
56
56
  @source = source
57
57
  @target = target
58
58
 
59
- remote = get_remote_url(options.remote || @config["remote"])
60
- repoInfo = RepoInfo.create(@config, remote)
59
+ repoInfo = RepoInfo.create(@config, options.remote)
61
60
 
62
61
  title, description = title_and_description(options)
63
62
 
@@ -37,11 +37,25 @@ module Atlassian
37
37
  uri.to_s
38
38
  end
39
39
 
40
- def self.create (config, url = get_remote_url)
41
- if m = url.match(/\/([a-zA-Z~][a-zA-Z0-9_\-]*)\/([[:alnum:]][\w\-\.]*).git$/)
40
+ def self.create (config, remote=nil)
41
+ config = Hash.new if config.nil?
42
+ remote = config["remote"] if (remote.nil? || remote.empty?)
43
+ remoteUrl = Atlassian::Stash::Git.get_remote_url(remote)
44
+
45
+ if remoteUrl.nil?
46
+ remotes = Atlassian::Stash::Git.get_remotes
47
+ if remotes.empty?
48
+ raise "No git remotes found, could not determine Stash project URL"
49
+ else
50
+ remote = Atlassian::Stash::Git::DEFAULT_REMOTE if (remote.nil? || remote.empty?)
51
+ raise "Could not find requested git remote '#{remote}'. Remotes found: \r\n" + remotes
52
+ end
53
+ end
54
+
55
+ if m = remoteUrl.match(/\/([a-zA-Z~][a-zA-Z0-9_\-]*)\/([[:alnum:]][\w\-\.]*).git$/)
42
56
  return RepoInfo.new(config, m[1], m[2])
43
57
  end
44
- raise "Repository does not seem to be hosted in Stash; Remote url: " + url
58
+ raise "Repository does not seem to be hosted in Stash; Remote url: " + remoteUrl
45
59
  end
46
60
  end
47
61
  end
data/test/helper.rb CHANGED
@@ -17,6 +17,7 @@ rescue Bundler::BundlerError => e
17
17
  end
18
18
  require 'minitest/autorun'
19
19
  require 'shoulda'
20
+ require "mocha/mini_test"
20
21
 
21
22
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
22
23
  $LOAD_PATH.unshift(File.dirname(__FILE__))
@@ -6,38 +6,31 @@ include Atlassian::Stash::Git
6
6
  class TestGit < Minitest::Test
7
7
 
8
8
  should "extract remote with ssh remote" do
9
- Atlassian::Stash::Git.instance_eval do
10
- def get_remotes
9
+ Atlassian::Stash::Git.stubs(:get_remotes).returns(
11
10
  "origin ssh://git@stash.atlassian.com:7999/STASH/stash.git (fetch)
12
11
  origin ssh://git@stash.atlassian.com:7999/STASH/stash.git (push)"
13
- end
14
- end
12
+ )
15
13
  assert_equal 'ssh://git@stash.atlassian.com:7999/STASH/stash.git', Atlassian::Stash::Git.get_remote_url
16
14
  end
17
15
 
18
16
  should "extract push remote with different fetch and push urls" do
19
- Atlassian::Stash::Git.instance_eval do
20
- def get_remotes
17
+ Atlassian::Stash::Git.stubs(:get_remotes).returns(
21
18
  "origin ssh://git@github.com/~sebr/stash.git (fetch)
22
19
  origin ssh://git@stash.atlassian.com:7999/STASH/stash.git (push)"
23
- end
24
- end
20
+ )
25
21
  assert_equal 'ssh://git@stash.atlassian.com:7999/STASH/stash.git', Atlassian::Stash::Git.get_remote_url
26
22
  end
27
23
 
28
24
  should "extract remote with http remote" do
29
- Atlassian::Stash::Git.instance_eval do
30
- def get_remotes
25
+ Atlassian::Stash::Git.stubs(:get_remotes).returns(
31
26
  "origin http://adam@sonoma:7990/stash/scm/QA/stash.git (fetch)
32
27
  origin http://adam@sonoma:7990/stash/scm/QA/stash.git (push)"
33
- end
34
- end
28
+ )
35
29
  assert_equal 'http://adam@sonoma:7990/stash/scm/QA/stash.git', Atlassian::Stash::Git.get_remote_url
36
30
  end
37
31
 
38
32
  should "extract remote with multiple remote urls" do
39
- Atlassian::Stash::Git.instance_eval do
40
- def get_remotes
33
+ Atlassian::Stash::Git.stubs(:get_remotes).returns(
41
34
  "bitbucket git@bitbucket.org:atlassian/stash-command-line-tools.git (fetch)
42
35
  bitbucket git@bitbucket.org:atlassian/stash-command-line-tools.git (push)
43
36
  kostya http://admin@kostya:7990/scm/CA/cylon.git (fetch)
@@ -49,15 +42,12 @@ class TestGit < Minitest::Test
49
42
  seb http://adam@sonoma:7990/stash/scm/QA/stash.git (fetch)
50
43
  seb http://adam@sonoma:7990/stash/scm/QA/stash.git (push)
51
44
  upstream http://github-enterprise-11-10/stash/stash.git (fetch)
52
- upstream http://github-enterprise-11-10/stash/stash.git (push)"
53
- end
54
- end
45
+ upstream http://github-enterprise-11-10/stash/stash.git (push)")
55
46
  assert_equal 'ssh://git@stash.atlassian.com:7999/STASH/stash.git', Atlassian::Stash::Git.get_remote_url
56
47
  end
57
48
 
58
49
  should "extract custom remote with multiple remote urls" do
59
- Atlassian::Stash::Git.instance_eval do
60
- def get_remotes
50
+ Atlassian::Stash::Git.stubs(:get_remotes).returns(
61
51
  "bitbucket git@bitbucket.org:atlassian/stash-command-line-tools.git (fetch)
62
52
  bitbucket git@bitbucket.org:atlassian/stash-command-line-tools.git (push)
63
53
  kostya http://admin@kostya:7990/scm/CA/cylon.git (fetch)
@@ -71,9 +61,20 @@ class TestGit < Minitest::Test
71
61
  seb http://adam@sonoma:7990/stash/scm/QA/stash.git (fetch)
72
62
  seb http://adam@sonoma:7990/stash/scm/QA/stash.git (push)
73
63
  upstream http://github-enterprise-11-10/stash/stash.git (fetch)
74
- upstream http://github-enterprise-11-10/stash/stash.git (push)"
75
- end
76
- end
64
+ upstream http://github-enterprise-11-10/stash/stash.git (push)")
77
65
  assert_equal 'ssh://git@stash.atlassian.com:7999/ATLASSIAN/stash.git', Atlassian::Stash::Git.get_remote_url('upstream')
78
66
  end
67
+
68
+ should "repo with no remotes returns nil" do
69
+ Atlassian::Stash::Git.stubs(:get_remotes).returns("")
70
+ assert_equal nil, Atlassian::Stash::Git.get_remote_url
71
+ end
72
+
73
+ should "repo with unfound remote returns nil" do
74
+ Atlassian::Stash::Git.stubs(:get_remotes).returns(
75
+ "bitbucket git@bitbucket.org:atlassian/stash-command-line-tools.git (fetch)
76
+ bitbucket git@bitbucket.org:atlassian/stash-command-line-tools.git (push)"
77
+ )
78
+ assert_equal nil, Atlassian::Stash::Git.get_remote_url('origin')
79
+ end
79
80
  end
@@ -7,20 +7,21 @@ class TestStashRepoInfo < Minitest::Test
7
7
 
8
8
  context "Extract repository info" do
9
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
- ri = RepoInfo.create nil, remote
10
+ Atlassian::Stash::Git.stubs(:get_remotes).returns("origin https://sruiz@stash-dev.atlassian.com/scm/STASH/stash.git (push)")
11
+
12
+ ri = RepoInfo.create({})
12
13
  assert_equal 'STASH', ri.projectKey
13
14
  assert_equal 'stash', ri.slug
14
15
  end
15
16
 
16
17
  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
- assert_raises(RuntimeError) { RepoInfo.create nil, remote }
18
+ Atlassian::Stash::Git.stubs(:get_remotes).returns("origin git@bitbucket.org:sebr/atlassian-stash-rubygem.git (push)")
19
+ assert_raises(RuntimeError) { RepoInfo.create({}) }
19
20
  end
20
21
 
21
22
  should "repo with hyphes" do
22
- remote = "https://sruiz@stash-dev.atlassian.com/scm/s745h/stash-repository.git"
23
- ri = RepoInfo.create nil, remote
23
+ Atlassian::Stash::Git.stubs(:get_remotes).returns("origin https://sruiz@stash-dev.atlassian.com/scm/s745h/stash-repository.git (push)")
24
+ ri = RepoInfo.create({})
24
25
  assert_equal 's745h', ri.projectKey
25
26
  assert_equal 'stash-repository', ri.slug
26
27
  end
@@ -28,14 +29,14 @@ class TestStashRepoInfo < Minitest::Test
28
29
 
29
30
  context "Create repo url" do
30
31
  setup do
31
- @remote = "https://sruiz@stash-dev.atlassian.com/scm/STASH/stash.git"
32
+ Atlassian::Stash::Git.stubs(:get_remotes).returns("origin https://sruiz@stash-dev.atlassian.com/scm/STASH/stash.git (push)")
32
33
  end
33
34
 
34
35
  should "create expected repo path" do
35
36
  config = {
36
37
  'stash_url' => 'https://www.stash.com'
37
38
  }
38
- ri = RepoInfo.create config, @remote
39
+ ri = RepoInfo.create config
39
40
  assert_equal '/projects/STASH/repos/stash', ri.repoPath
40
41
  end
41
42
 
@@ -43,7 +44,7 @@ class TestStashRepoInfo < Minitest::Test
43
44
  config = {
44
45
  'stash_url' => 'https://www.stash.com/foo'
45
46
  }
46
- ri = RepoInfo.create config, @remote
47
+ ri = RepoInfo.create config
47
48
  assert_equal '/foo/projects/STASH/repos/stash', ri.repoPath
48
49
  end
49
50
 
@@ -51,7 +52,7 @@ class TestStashRepoInfo < Minitest::Test
51
52
  config = {
52
53
  'stash_url' => 'https://www.stash.com/foo'
53
54
  }
54
- ri = RepoInfo.create config, @remote
55
+ ri = RepoInfo.create config
55
56
  assert_equal '/foo/projects/STASH/repos/stash', ri.repoPath
56
57
  end
57
58
 
@@ -59,7 +60,7 @@ class TestStashRepoInfo < Minitest::Test
59
60
  config = {
60
61
  'stash_url' => 'https://www.stash.com'
61
62
  }
62
- ri = RepoInfo.create config, @remote
63
+ ri = RepoInfo.create config
63
64
  assert_equal 'https://www.stash.com/projects/STASH/repos/stash', ri.repoUrl(nil, nil)
64
65
  end
65
66
 
@@ -67,7 +68,7 @@ class TestStashRepoInfo < Minitest::Test
67
68
  config = {
68
69
  'stash_url' => 'https://www.stash.com/foo'
69
70
  }
70
- ri = RepoInfo.create config, @remote
71
+ ri = RepoInfo.create config
71
72
  assert_equal 'https://www.stash.com/foo/projects/STASH/repos/stash', ri.repoUrl(nil, nil)
72
73
  end
73
74
 
@@ -75,7 +76,7 @@ class TestStashRepoInfo < Minitest::Test
75
76
  config = {
76
77
  'stash_url' => 'https://www.stash.com/foo'
77
78
  }
78
- ri = RepoInfo.create config, @remote
79
+ ri = RepoInfo.create config
79
80
  assert_equal 'https://www.stash.com/foo/projects/STASH/repos/stash/commits?at=develop', ri.repoUrl('commits', 'develop')
80
81
  end
81
82
 
@@ -83,7 +84,7 @@ class TestStashRepoInfo < Minitest::Test
83
84
  config = {
84
85
  'stash_url' => 'https://www.stash.com/foo?git=ftw'
85
86
  }
86
- ri = RepoInfo.create config, @remote
87
+ ri = RepoInfo.create config
87
88
  assert_equal 'https://www.stash.com/foo/projects/STASH/repos/stash/commits?git=ftw&at=develop', ri.repoUrl('commits', 'develop')
88
89
  end
89
90
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: atlassian-stash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Seb Ruiz
@@ -164,6 +164,20 @@ dependencies:
164
164
  - - '>='
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: mocha
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
167
181
  description: Provides convenient functions for interacting with Atlassian Stash through
168
182
  the command line
169
183
  email: sruiz@atlassian.com