atlassian-stash 0.3.2 → 0.4.0

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: d378f61db7522c5d9871c7b62c11417d4d36f1fd
4
- data.tar.gz: 962a88dee48cc89db7d571a6ea26b19f0780c295
3
+ metadata.gz: f542f9e4f0ec7a27fc9a7a24ba23946f1e498aec
4
+ data.tar.gz: b842b2d4caaa4f6ccbe06174ab626d27521fbe4b
5
5
  SHA512:
6
- metadata.gz: bb4c15d5dd4222fee274a182d788daaa480a6eaa5ca0d9a708f138febc610a984ab29e2c8a2a366e0ecf899fe81f67267a903e45c1df5e2cb4f75846ed6c950e
7
- data.tar.gz: f6cb1f5021840101f9675b49f9ebebf12b98457372994e2459e86ecfc8d35833eee7a945cf89b4405af842d4d4677348069957cac96245bd584fee5f71463e55
6
+ metadata.gz: 2dc56d9a2571ffd9fd5cb65cbccb741ac979f8fb29fa1dfbe408eb6591652e5d2334412a2ed1708b05edaa10a751c684ff82c1d4825090bb034c35e92cec7f7a
7
+ data.tar.gz: dc1b2b8fc10e8d86c8a8137a303505487cce431be380a4d4f51d61e921a06b76742df541acb6260278cc6180b4ed541e0e137f63be6523dd530bd4bcf907d308
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.2
1
+ 0.4.0
data/bin/stash CHANGED
@@ -86,6 +86,8 @@ command 'pull-request' do |c|
86
86
  c.example 'stash pull-request topicBranch master @michael', "Create a pull request from branch 'topicBranch' into 'master' with 'michael' added as a reviewer"
87
87
  c.example 'stash pull-request master', "Create a pull request from the current git branch into 'master'"
88
88
  c.example 'stash pull-request master -T "JIRA-1234 new feature" -d "Adds new feature as described in JIRA-1234"', "Create a pull request from the current git branch into 'master' with the title 'JIRA-1234 new feature' and description 'Adds new feature as described in JIRA-1234'"
89
+ c.example 'stash pull-request topicBranch upstream/master', "Create a pull request from branch 'topicBranch' into branch 'master' on the remote named 'upstream'"
90
+ c.example 'stash pull-request remotes/upstream/master', "Create a pull request from the current branch into branch 'master' on the remote named 'upstream'"
89
91
  c.action do |args, options|
90
92
  if args.length == 0
91
93
  command(:help).run('pull-request')
@@ -102,6 +104,34 @@ command 'pull-request' do |c|
102
104
  reviewers = extract_reviewers args
103
105
  end
104
106
 
107
+ # Strip out any starting 'remotes/' from branch name for matching
108
+ if source.index('remotes/') == 0
109
+ source = source['remotes/'.size..-1]
110
+ end
111
+ if target.index('remotes/') == 0
112
+ target = target['remotes/'.size..-1]
113
+ end
114
+
115
+ options.src_remote = options.remote
116
+ if not is_branch?(source)
117
+ if not is_branch?("remotes/" + source)
118
+ raise "fatal: unrecogonized source branch"
119
+ end
120
+ # If a remote matches, split the remote out of the refspec
121
+ options.src_remote = source.split('/')[0]
122
+ source = source.split('/')[1..-1].join('/')
123
+ end
124
+
125
+ options.target_remote = options.remote
126
+ if not is_branch?(target)
127
+ if not is_branch?("remotes/" + target)
128
+ raise "fatal: unrecognized target branch"
129
+ end
130
+ # If a remote matches, split the remote out of the refspec
131
+ options.target_remote = target.split('/')[0]
132
+ target = target.split('/')[1..-1].join('/')
133
+ end
134
+
105
135
  ensure_within_git! do
106
136
  cpr = CreatePullRequest.new(load_config)
107
137
  cpr.create_pull_request source, target, reviewers, options
@@ -10,6 +10,16 @@ module Atlassian
10
10
  %x(git symbolic-ref HEAD)[/refs\/heads\/(.*)/, 1]
11
11
  end
12
12
 
13
+ def get_branches()
14
+ all = %x{git branch -a}.gsub("*","").gsub(" ", "").split("\n")
15
+ all.select{|x| not x.include? "->"}
16
+ end
17
+
18
+ def is_branch?(match)
19
+ all = get_branches
20
+ not all.select{|x| x == match}.empty?
21
+ end
22
+
13
23
  def is_in_git_repository?
14
24
  system('git rev-parse')
15
25
  end
@@ -11,20 +11,26 @@ module Atlassian
11
11
  class CreatePullRequestResource
12
12
  attr_accessor :resource
13
13
 
14
- def initialize(projectKey, slug, title, description, reviewers, source, target)
15
- repository = {
16
- 'slug' => slug,
14
+ def initialize(sourceRepoInfo, targetRepoInfo, title, description, reviewers, source, target)
15
+ src_repository = {
16
+ 'slug' => sourceRepoInfo.slug,
17
17
  'project' => {
18
- 'key' => projectKey
18
+ 'key' => sourceRepoInfo.projectKey
19
+ }
20
+ }
21
+ target_repository = {
22
+ 'slug' => targetRepoInfo.slug,
23
+ 'project' => {
24
+ 'key' => targetRepoInfo.projectKey
19
25
  }
20
26
  }
21
27
  fromRef = {
22
28
  'id' => source,
23
- 'repository' => repository
29
+ 'repository' => src_repository
24
30
  }
25
31
  toRef = {
26
32
  'id' => target,
27
- 'repository' => repository
33
+ 'repository' => target_repository
28
34
  }
29
35
  @resource = {
30
36
  'title' => title,
@@ -56,11 +62,12 @@ module Atlassian
56
62
  @source = source
57
63
  @target = target
58
64
 
59
- repoInfo = RepoInfo.create(@config, options.remote)
65
+ srcRepoInfo = RepoInfo.create(@config, options.src_remote)
66
+ targetRepoInfo = RepoInfo.create(@config, options.target_remote)
60
67
 
61
68
  title, description = title_and_description(options)
62
69
 
63
- resource = CreatePullRequestResource.new(repoInfo.projectKey, repoInfo.slug, title, description, reviewers, @source, @target).resource
70
+ resource = CreatePullRequestResource.new(srcRepoInfo, targetRepoInfo, title, description, reviewers, @source, @target).resource
64
71
 
65
72
  username = @config["username"]
66
73
  password = @config["password"]
@@ -70,7 +77,7 @@ module Atlassian
70
77
  password = ask("Password: ") { |q| q.echo = '*' } unless @config["password"]
71
78
 
72
79
  uri = URI.parse(@config["stash_url"])
73
- prPath = repoInfo.repoPath + '/pull-requests'
80
+ prPath = targetRepoInfo.repoPath + '/pull-requests'
74
81
 
75
82
  req = Net::HTTP::Post.new(uri.query.nil? ? "#{prPath}" : "#{prPath}?#{uri.query}", {'Content-Type' => 'application/json', 'Accept' => 'application/json'})
76
83
  req.basic_auth username, password
@@ -77,4 +77,20 @@ class TestGit < Minitest::Test
77
77
  )
78
78
  assert_equal nil, Atlassian::Stash::Git.get_remote_url('origin')
79
79
  end
80
- end
80
+
81
+ should "branches are matched" do
82
+ Atlassian::Stash::Git.stubs(:get_branches).returns(
83
+ " feature
84
+ temp
85
+ * master
86
+ remotes/origin/master
87
+ remotes/origin/release/v1.0
88
+ remotes/origin/feature/awesome
89
+ remotes/upstream/master
90
+ remotes/upstream/release/v1.0
91
+ remotes/upstream/feature/Issue7")
92
+ assert_equal true, Atlassian::Stash::Git.is_branch?('master')
93
+ assert_equal true, Atlassian::Stash::Git.is_branch?('remotes/upstream/master')
94
+ end
95
+
96
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: atlassian-stash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Seb Ruiz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-15 00:00:00.000000000 Z
11
+ date: 2014-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: git
@@ -226,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
226
226
  version: '0'
227
227
  requirements: []
228
228
  rubyforge_project:
229
- rubygems_version: 2.2.1
229
+ rubygems_version: 2.4.2
230
230
  signing_key:
231
231
  specification_version: 4
232
232
  summary: Command line tools for Atlassian Stash