toolshed 0.0.5 → 0.0.6
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.
- checksums.yaml +4 -4
- data/.travis.yml +14 -0
- data/Rakefile +11 -0
- data/bin/toolshed.rb +95 -16
- data/lib/toolshed/base.rb +7 -0
- data/lib/toolshed/cli.rb +13 -6
- data/lib/toolshed/client.rb +105 -83
- data/lib/toolshed/commands/checkout_branch.rb +26 -0
- data/lib/toolshed/commands/create_branch.rb +60 -0
- data/lib/toolshed/commands/create_pivotal_tracker_note.rb +9 -4
- data/lib/toolshed/commands/create_pull_request.rb +137 -0
- data/lib/toolshed/commands/delete_branch.rb +27 -0
- data/lib/toolshed/commands/get_daily_time_update.rb +21 -0
- data/lib/toolshed/commands/get_pivotal_tracker_story_information.rb +6 -3
- data/lib/toolshed/commands/list_branches.rb +13 -0
- data/lib/toolshed/commands/push_branch.rb +11 -0
- data/lib/toolshed/commands/update_pivotal_tracker_story_status.rb +8 -5
- data/lib/toolshed/git/git.rb +134 -0
- data/lib/toolshed/git/github.rb +88 -0
- data/lib/toolshed/ticket_tracking/pivotal_tracker.rb +111 -0
- data/lib/toolshed/ticket_tracking/ticket_tracking.rb +6 -0
- data/lib/toolshed/time_tracking/harvest.rb +68 -0
- data/lib/toolshed/time_tracking/time_tracking.rb +6 -0
- data/lib/toolshed/version.rb +1 -1
- data/lib/toolshed.rb +8 -2
- data/test/commands/checkout_branch_test.rb +28 -0
- data/test/commands/commands_helper.rb +2 -0
- data/test/commands/create_branch_test.rb +44 -0
- data/test/commands/create_pull_request_test.rb +125 -0
- data/test/commands/delete_branch_test.rb +75 -0
- data/test/commands/push_branch_test.rb +49 -0
- data/test/config.rb +1 -0
- data/test/git/git_helper.rb +31 -0
- data/test/git/git_test.rb +115 -0
- data/test/git/github_test.rb +91 -0
- data/test/helper.rb +98 -0
- data/toolshed.gemspec +8 -0
- metadata +151 -9
- data/lib/toolshed/commands/checkout_git_branch.rb +0 -23
- data/lib/toolshed/commands/create_git_branch.rb +0 -28
- data/lib/toolshed/commands/create_github_pull_request.rb +0 -77
- data/lib/toolshed/commands/push_git_branch.rb +0 -10
- data/lib/toolshed/github.rb +0 -89
- data/lib/toolshed/pivotal_tracker.rb +0 -87
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f9ed47a186308cf9eaa0043e8ab0abc7fefead11
|
4
|
+
data.tar.gz: 4f4fddd482621ccd255da4219db9583811dee03c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2962ad0d0d636de5a53416f2ed47b41bc3a3a73a20962681f1a0b15de4c0f452ddd5e8729be7bb78f208c1864bc82994ff53c83aa64cdffa1dfda43a2aa93096
|
7
|
+
data.tar.gz: 1a20ab52725da3253f40f840b7d42ae5c7cb4c46bc35a20ef53b3a9a039e62484f4de8a52c8bf496f5f411b84eaa472758881331a5ca077da52476c66810277a
|
data/.travis.yml
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
before_install:
|
2
|
+
- sudo apt-get update -qq
|
3
|
+
- sudo apt-get install -qq freetds-dev
|
4
|
+
- rm -f Gemfile.lock
|
5
|
+
before_script:
|
6
|
+
- git config --global user.email "wallerjake@gmail.com"
|
7
|
+
- git config --global user.name "wallerjake"
|
8
|
+
- rm -r -f test/remote
|
9
|
+
- rm -r -f test/tmp
|
10
|
+
language: ruby
|
11
|
+
rvm:
|
12
|
+
- 2.0.0
|
13
|
+
env:
|
14
|
+
- RUNNING_ON_CI=true
|
data/Rakefile
CHANGED
@@ -1 +1,12 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
|
+
require 'rake/testtask'
|
3
|
+
|
4
|
+
require File.expand_path(File.dirname(__FILE__)) + "/test/config"
|
5
|
+
|
6
|
+
Rake::TestTask.new do |t|
|
7
|
+
t.libs << 'test'
|
8
|
+
t.test_files = FileList['test/**/*_test.rb']
|
9
|
+
end
|
10
|
+
|
11
|
+
desc "Run tests"
|
12
|
+
task default: :test
|
data/bin/toolshed.rb
CHANGED
@@ -16,18 +16,27 @@ be found at https://github.com/wallerjake/toolshed
|
|
16
16
|
Before using this tool you should create a file called .toolshedrc in your projects directory or home directory if you want to use the settings globally.
|
17
17
|
Note that it will only read one file which ever file is closest to the directory you are in. Then and add the following to that file:
|
18
18
|
|
19
|
-
|
19
|
+
ticket_tracking_tool: 'pivotal_tracker' (required)
|
20
20
|
pivotal_tracker_username: [pivotal_tracker_username] (optional)
|
21
21
|
pivotal_tracker_password: [pivotal_tracker_password] (optional)
|
22
22
|
default_pivotal_tracker_project_id: [project_id] (optional)
|
23
|
+
|
23
24
|
github_username: [github_username] (optional)
|
24
25
|
github_password: [github_password] (optional)
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
26
|
+
git_tool: github (optional default `github`)
|
27
|
+
use_git_submodules: false (optional default `false`)
|
28
|
+
pull_from_remote_name: [pull_from_remote_name] (required)
|
29
|
+
pull_from_repository_user: [pull_from_repository_username] (required)
|
30
|
+
pull_from_repository_name: [pull_from_repository_name] (required)
|
31
|
+
push_to_repository_user: [push_to_repository_user] (required)
|
32
|
+
push_to_repository_name: [push_to_repository_name] (required)
|
33
|
+
push_to_remote_name: [push_to_remote_name] (required)
|
34
|
+
|
35
|
+
time_tracking_username: [username] (optional)
|
36
|
+
time_tracking_password: [password] (optional)
|
37
|
+
time_tracking_owner: [owner] (optional)
|
38
|
+
time_tracking_default_project_id: [project_id] (optional)
|
39
|
+
time_tracking_tool: [tool] (optional)
|
31
40
|
|
32
41
|
== Commands
|
33
42
|
|
@@ -36,13 +45,34 @@ All commands are executed as toolshed [options] command [command-options] args
|
|
36
45
|
The following commands are available:
|
37
46
|
|
38
47
|
help # show this usage
|
39
|
-
|
48
|
+
create_pull_request [ # create a github pull request based on the branch you currently have checked out
|
49
|
+
--tool "github", # Optionally pass in your specific tool this can also be set in your config as git_tool
|
50
|
+
--ticket-system "pivotal_tracker" # Optionally pass in your ticket system this can also be set in your config as ticket_tracking_tool
|
51
|
+
--use-defaults "true" # use defaults instead of getting prompts if you don't want to edit your body or title
|
52
|
+
--title "Pull Request Title" # Title you want to use with the pull request
|
53
|
+
--body "Pull Request Body" # Body you want to use with the pull request
|
54
|
+
]
|
40
55
|
get_pivotal_tracker_story_information # Get the ticket information from a PivotalTracker story based on project_id and story_id
|
41
56
|
create_pivotal_tracker_note # Create a note for a specific PivotalTracker story based on project_id and story_id
|
42
57
|
update_pivotal_tracker_story_status # Update the status of PivotalTracker story
|
43
|
-
|
44
|
-
|
45
|
-
|
58
|
+
create_branch [ # Create a branch default (git) and push it to your local repository
|
59
|
+
--branch-name "123_test" # The branch name standard it [ticket_id]_description
|
60
|
+
--branch-from "master" # What branch do you want to branch from
|
61
|
+
]
|
62
|
+
checkout_branch [ # Checkout a branch [default git] and update the submodules if true
|
63
|
+
--branch-name "123" # Branch name or part of the branch name you want to checkout
|
64
|
+
]
|
65
|
+
push_branch [ # Push your current working branch to your own repository
|
66
|
+
--force # Push your current working branch up with --force after
|
67
|
+
--branch-name "another" # Push this specific branch up instead of your current working branch
|
68
|
+
]
|
69
|
+
get_daily_time_update # Get a daily update from your time tracking toolset currently harvest is supported
|
70
|
+
list_branches [ # List branches for your remote repository
|
71
|
+
--repository-name "depot" # The repository name you want to list branches for if not passed pull_from_repository_name is used
|
72
|
+
]
|
73
|
+
delete_branch [ # Delete a branch both locally and to your push to remote
|
74
|
+
--branch-name "134_mybranch" | "134" # Either the full branch name or some unique string in the branch i.e. ticket id
|
75
|
+
]
|
46
76
|
EOF
|
47
77
|
end
|
48
78
|
|
@@ -50,16 +80,16 @@ if $0.split("/").last == 'toolshed'
|
|
50
80
|
options = {}
|
51
81
|
|
52
82
|
global = OptionParser.new do |opts|
|
53
|
-
opts.on("-u", "--
|
83
|
+
opts.on("-u", "--github-username [ARG]") do |username|
|
54
84
|
Toolshed::Client.github_username = username
|
55
85
|
end
|
56
|
-
opts.on("-p", "--
|
86
|
+
opts.on("-p", "--github-password [ARG]") do |password|
|
57
87
|
Toolshed::Client.github_password = password
|
58
88
|
end
|
59
|
-
opts.on("-u", "--
|
89
|
+
opts.on("-u", "--pivotal-tracker-username [ARG]") do |username|
|
60
90
|
Toolshed::Client.pivotal_tracker_username = username
|
61
91
|
end
|
62
|
-
opts.on("-p", "--
|
92
|
+
opts.on("-p", "--pivotal-tracker-password [ARG]") do |password|
|
63
93
|
Toolshed::Client.pivotal_tracker_password = password
|
64
94
|
end
|
65
95
|
opts.on("-d", "--debug [ARG]") do
|
@@ -70,7 +100,56 @@ if $0.split("/").last == 'toolshed'
|
|
70
100
|
end
|
71
101
|
end
|
72
102
|
|
73
|
-
subcommands = {
|
103
|
+
subcommands = {
|
104
|
+
'create_pull_request' => OptionParser.new do |opts|
|
105
|
+
opts.on("--tool [ARG]") do |opt|
|
106
|
+
Toolshed::Client.git_tool = opt.downcase
|
107
|
+
end
|
108
|
+
opts.on("--ticket-system [ARG]") do |opt|
|
109
|
+
Toolshed::Client.ticket_tracking_tool = opt.downcase
|
110
|
+
end
|
111
|
+
opts.on("--use-defaults [ARG]") do |opt|
|
112
|
+
Toolshed::Client.use_defaults = opt
|
113
|
+
end
|
114
|
+
opts.on("--title [ARG]") do |opt|
|
115
|
+
options[:title] = opt
|
116
|
+
end
|
117
|
+
opts.on("--body [ARG]") do |opt|
|
118
|
+
options[:body] = opt
|
119
|
+
end
|
120
|
+
end,
|
121
|
+
'create_branch' => OptionParser.new do |opts|
|
122
|
+
opts.on("--branch-name [ARG]") do |opt|
|
123
|
+
options[:branch_name] = opt
|
124
|
+
end
|
125
|
+
opts.on("--branch-from [ARG]") do |opt|
|
126
|
+
options[:branch_from] = opt
|
127
|
+
end
|
128
|
+
end,
|
129
|
+
'push_branch' => OptionParser.new do |opts|
|
130
|
+
opts.on("--force [ARG]") do |opt|
|
131
|
+
options[:force_command] = true
|
132
|
+
end
|
133
|
+
opts.on("--branch-name [ARG]") do |opt|
|
134
|
+
options[:branch_name] = opt
|
135
|
+
end
|
136
|
+
end,
|
137
|
+
'list_branches' => OptionParser.new do |opts|
|
138
|
+
opts.on("--repository-name [ARG]") do |opt|
|
139
|
+
Toolshed::Client.pull_from_repository_name = opt
|
140
|
+
end
|
141
|
+
end,
|
142
|
+
'checkout_branch' => OptionParser.new do |opts|
|
143
|
+
opts.on("--branch-name [ARG]") do |opt|
|
144
|
+
options[:branch_name] = opt
|
145
|
+
end
|
146
|
+
end,
|
147
|
+
'delete_branch' => OptionParser.new do |opts|
|
148
|
+
opts.on("--branch-name [ARG]") do |opt|
|
149
|
+
options[:branch_name] = opt
|
150
|
+
end
|
151
|
+
end,
|
152
|
+
}
|
74
153
|
|
75
154
|
global.order!
|
76
155
|
command = ARGV.shift
|
data/lib/toolshed/base.rb
CHANGED
data/lib/toolshed/cli.rb
CHANGED
@@ -21,22 +21,29 @@ module Toolshed
|
|
21
21
|
|
22
22
|
def commands
|
23
23
|
{
|
24
|
-
'
|
24
|
+
'create_pull_request' => Toolshed::Commands::CreatePullRequest,
|
25
25
|
'create_pivotal_tracker_note' => Toolshed::Commands::CreatePivotalTrackerNote,
|
26
26
|
'get_pivotal_tracker_story_information' => Toolshed::Commands::GetPivotalTrackerStoryInformation,
|
27
27
|
'update_pivotal_tracker_story_status' => Toolshed::Commands::UpdatePivotalTrackerStoryStatus,
|
28
|
-
'
|
29
|
-
'
|
28
|
+
'create_branch' => Toolshed::Commands::CreateBranch,
|
29
|
+
'checkout_branch' => Toolshed::Commands::CheckoutBranch,
|
30
30
|
'push_git_branch' => Toolshed::Commands::PushGitBranch,
|
31
|
+
'get_daily_time_update' => Toolshed::Commands::GetDailyTimeUpdate,
|
32
|
+
'list_branches' => Toolshed::Commands::ListBranches,
|
33
|
+
'delete_branch' => Toolshed::Commands::DeleteBranch,
|
31
34
|
}
|
32
35
|
end
|
33
36
|
end
|
34
37
|
end
|
35
38
|
|
36
|
-
require 'toolshed/commands/
|
39
|
+
require 'toolshed/commands/create_pull_request'
|
37
40
|
require 'toolshed/commands/create_pivotal_tracker_note'
|
38
41
|
require 'toolshed/commands/get_pivotal_tracker_story_information'
|
39
42
|
require 'toolshed/commands/update_pivotal_tracker_story_status'
|
40
|
-
require 'toolshed/commands/
|
41
|
-
require 'toolshed/commands/
|
43
|
+
require 'toolshed/commands/create_branch'
|
44
|
+
require 'toolshed/commands/checkout_branch'
|
42
45
|
require 'toolshed/commands/push_git_branch'
|
46
|
+
require 'toolshed/commands/get_daily_time_update'
|
47
|
+
require 'toolshed/commands/get_daily_time_update'
|
48
|
+
require 'toolshed/commands/list_branches'
|
49
|
+
require 'toolshed/commands/delete_branch'
|
data/lib/toolshed/client.rb
CHANGED
@@ -6,6 +6,7 @@ module Toolshed
|
|
6
6
|
GITHUB_BASE_API_URL = "https://api.github.com/"
|
7
7
|
PIVOTAL_TRACKER_BASE_API_URL = "https://www.pivotaltracker.com/services/v5/"
|
8
8
|
|
9
|
+
# debugging options
|
9
10
|
def self.debug?
|
10
11
|
@debug
|
11
12
|
end
|
@@ -14,6 +15,22 @@ module Toolshed
|
|
14
15
|
@debug = debug
|
15
16
|
end
|
16
17
|
|
18
|
+
def self.git_quiet
|
19
|
+
@git_quiet
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.git_quiet=(git_quiet)
|
23
|
+
@git_quiet = git_quiet
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.use_defaults
|
27
|
+
@use_defaults
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.use_defaults=(use_defaults)
|
31
|
+
@use_defaults = use_defaults
|
32
|
+
end
|
33
|
+
|
17
34
|
|
18
35
|
# github config settings
|
19
36
|
def self.github_username
|
@@ -32,44 +49,44 @@ module Toolshed
|
|
32
49
|
@github_password = password
|
33
50
|
end
|
34
51
|
|
35
|
-
def self.
|
36
|
-
@
|
52
|
+
def self.pull_from_remote_name
|
53
|
+
@pull_from_remote_name
|
37
54
|
end
|
38
55
|
|
39
|
-
def self.
|
40
|
-
@
|
56
|
+
def self.pull_from_remote_name=(pull_from_remote_name)
|
57
|
+
@pull_from_remote_name = pull_from_remote_name
|
41
58
|
end
|
42
59
|
|
43
|
-
def self.
|
44
|
-
@
|
60
|
+
def self.pull_from_repository_user
|
61
|
+
@pull_from_repository_user
|
45
62
|
end
|
46
63
|
|
47
|
-
def self.
|
48
|
-
@
|
64
|
+
def self.pull_from_repository_user=(pull_from_repository_user)
|
65
|
+
@pull_from_repository_user = pull_from_repository_user
|
49
66
|
end
|
50
67
|
|
51
|
-
def self.
|
52
|
-
@
|
68
|
+
def self.pull_from_repository_name
|
69
|
+
@pull_from_repository_name
|
53
70
|
end
|
54
71
|
|
55
|
-
def self.
|
56
|
-
@
|
72
|
+
def self.pull_from_repository_name=(pull_from_repository_name)
|
73
|
+
@pull_from_repository_name = pull_from_repository_name
|
57
74
|
end
|
58
75
|
|
59
|
-
def self.
|
60
|
-
@
|
76
|
+
def self.push_to_repository_user
|
77
|
+
@push_to_repository_user
|
61
78
|
end
|
62
79
|
|
63
|
-
def self.
|
64
|
-
@
|
80
|
+
def self.push_to_repository_user=(push_to_repository_user)
|
81
|
+
@push_to_repository_user = push_to_repository_user
|
65
82
|
end
|
66
83
|
|
67
|
-
def self.
|
68
|
-
@
|
84
|
+
def self.push_to_remote_name
|
85
|
+
@push_to_remote_name
|
69
86
|
end
|
70
87
|
|
71
|
-
def self.
|
72
|
-
@
|
88
|
+
def self.push_to_remote_name=(push_to_remote_name)
|
89
|
+
@push_to_remote_name = push_to_remote_name
|
73
90
|
end
|
74
91
|
|
75
92
|
def self.use_git_submodules
|
@@ -80,6 +97,13 @@ module Toolshed
|
|
80
97
|
@use_git_submodules = use_git_submodules
|
81
98
|
end
|
82
99
|
|
100
|
+
def self.git_tool
|
101
|
+
(@git_tool.nil?) ? Toolshed::Git::DEFAULT_GIT_TOOL : @git_tool
|
102
|
+
end
|
103
|
+
|
104
|
+
def self.git_tool=(git_tool)
|
105
|
+
@git_tool = git_tool
|
106
|
+
end
|
83
107
|
|
84
108
|
|
85
109
|
# pivotal tracker config
|
@@ -107,23 +131,61 @@ module Toolshed
|
|
107
131
|
@default_pivotal_tracker_project_id = default_pivotal_tracker_project_id
|
108
132
|
end
|
109
133
|
|
110
|
-
|
111
|
-
|
134
|
+
|
135
|
+
# ticket tracking configuration
|
136
|
+
|
137
|
+
def self.ticket_tracking_tool
|
138
|
+
@ticket_tracking_tool
|
139
|
+
end
|
140
|
+
|
141
|
+
def self.ticket_tracking_tool=(ticket_tracking_tool)
|
142
|
+
@ticket_tracking_tool = ticket_tracking_tool
|
112
143
|
end
|
113
144
|
|
114
|
-
|
115
|
-
|
145
|
+
# time tracking configuration
|
146
|
+
|
147
|
+
def self.time_tracking_tool
|
148
|
+
@time_tracking_tool
|
116
149
|
end
|
117
150
|
|
151
|
+
def self.time_tracking_tool=(time_tracking_tool)
|
152
|
+
@time_tracking_tool = time_tracking_tool
|
153
|
+
end
|
118
154
|
|
119
|
-
def self.
|
120
|
-
@
|
155
|
+
def self.time_tracking_username
|
156
|
+
@time_tracking_username
|
121
157
|
end
|
122
158
|
|
123
|
-
def self.
|
124
|
-
@
|
159
|
+
def self.time_tracking_username=(time_tracking_username)
|
160
|
+
@time_tracking_username = time_tracking_username
|
125
161
|
end
|
126
162
|
|
163
|
+
def self.time_tracking_password
|
164
|
+
@time_tracking_password
|
165
|
+
end
|
166
|
+
|
167
|
+
def self.time_tracking_password=(time_tracking_password)
|
168
|
+
@time_tracking_password = time_tracking_password
|
169
|
+
end
|
170
|
+
|
171
|
+
def self.time_tracking_owner
|
172
|
+
@time_tracking_owner
|
173
|
+
end
|
174
|
+
|
175
|
+
def self.time_tracking_owner=(time_tracking_owner)
|
176
|
+
@time_tracking_owner = time_tracking_owner
|
177
|
+
end
|
178
|
+
|
179
|
+
def self.time_tracking_default_project_id
|
180
|
+
@time_tracking_default_project_id
|
181
|
+
end
|
182
|
+
|
183
|
+
def self.time_tracking_default_project_id=(time_tracking_default_project_id)
|
184
|
+
@time_tracking_default_project_id = time_tracking_default_project_id
|
185
|
+
end
|
186
|
+
|
187
|
+
|
188
|
+
|
127
189
|
def self.load_credentials_if_necessary
|
128
190
|
load_credentials unless credentials_loaded?
|
129
191
|
end
|
@@ -154,13 +216,21 @@ module Toolshed
|
|
154
216
|
self.pivotal_tracker_username ||= credentials['pivotal_tracker_username']
|
155
217
|
self.pivotal_tracker_password ||= credentials['pivotal_tracker_password']
|
156
218
|
self.default_pivotal_tracker_project_id ||= credentials['default_pivotal_tracker_project_id']
|
157
|
-
self.
|
158
|
-
self.
|
159
|
-
self.
|
160
|
-
self.
|
161
|
-
self.
|
162
|
-
self.
|
219
|
+
self.pull_from_remote_name ||= credentials['pull_from_remote_name']
|
220
|
+
self.pull_from_repository_user ||= credentials['pull_from_repository_user']
|
221
|
+
self.pull_from_repository_name ||= credentials['pull_from_repository_name']
|
222
|
+
self.push_to_repository_user ||= credentials['push_to_repository_user']
|
223
|
+
self.push_to_remote_name ||= credentials['push_to_remote_name']
|
224
|
+
self.ticket_tracking_tool ||= credentials['ticket_tracking_tool']
|
163
225
|
self.use_git_submodules ||= credentials['use_git_submodules']
|
226
|
+
self.git_tool ||= credentials['git_tool']
|
227
|
+
self.time_tracking_username ||= credentials['time_tracking_username']
|
228
|
+
self.time_tracking_password ||= credentials['time_tracking_password']
|
229
|
+
self.time_tracking_owner ||= credentials['time_tracking_owner']
|
230
|
+
self.time_tracking_default_project_id ||= credentials['time_tracking_default_project_id']
|
231
|
+
self.time_tracking_tool ||= credentials['time_tracking_tool']
|
232
|
+
self.git_quiet ||= (credentials['git_quiet']) ? '&> /dev/null' : ''
|
233
|
+
self.use_defaults ||= credentials['use_defaults']
|
164
234
|
@credentials_loaded = true
|
165
235
|
puts "Credentials loaded from #{File.absolute_path(loaded_from_path)}"
|
166
236
|
rescue => error
|
@@ -170,55 +240,7 @@ module Toolshed
|
|
170
240
|
end
|
171
241
|
|
172
242
|
def self.credentials_loaded?
|
173
|
-
(@credentials_loaded ||= false)
|
174
|
-
end
|
175
|
-
|
176
|
-
def self.base_options
|
177
|
-
options = {
|
178
|
-
:format => :json,
|
179
|
-
:headers => { 'Accept' => 'application/json', 'User-Agent' => "toolshed-ruby/#{Toolshed::VERSION}" },
|
180
|
-
}
|
181
|
-
|
182
|
-
if http_proxy
|
183
|
-
options.merge!(
|
184
|
-
:http_proxyaddr => self.http_proxy[:addr],
|
185
|
-
:http_proxyport => self.http_proxy[:port]
|
186
|
-
)
|
187
|
-
end
|
188
|
-
|
189
|
-
if password
|
190
|
-
options[:basic_auth] = { :username => username, :password => password }
|
191
|
-
else
|
192
|
-
raise Error, 'A password is required for all API requests.'
|
193
|
-
end
|
194
|
-
|
195
|
-
options
|
196
|
-
end
|
197
|
-
|
198
|
-
def self.get(path, options = {})
|
199
|
-
request :get, path, options
|
200
|
-
end
|
201
|
-
|
202
|
-
def self.post(path, options = {})
|
203
|
-
request :post, path, options
|
204
|
-
end
|
205
|
-
|
206
|
-
def self.put(path, options = {})
|
207
|
-
request :put, path, options
|
208
|
-
end
|
209
|
-
|
210
|
-
def self.delete(path, options = {})
|
211
|
-
request :delete, path, options
|
212
|
-
end
|
213
|
-
|
214
|
-
def self.request(method, path, options)
|
215
|
-
response = HTTParty.send(method, "#{base_uri}#{path}", base_options.merge(options))
|
216
|
-
|
217
|
-
if response.code == 401
|
218
|
-
raise AuthenticationFailed
|
219
|
-
end
|
220
|
-
|
221
|
-
response
|
243
|
+
(@credentials_loaded ||= false)
|
222
244
|
end
|
223
245
|
end
|
224
246
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Toolshed
|
2
|
+
module Commands
|
3
|
+
class CheckoutBranch
|
4
|
+
def execute(args, options = {})
|
5
|
+
branch_name = read_user_input("Ticket ID or Branch Name:", options)
|
6
|
+
branch_name = Toolshed::Git::Base.checkout(branch_name)
|
7
|
+
puts "Switched to '#{branch_name}'"
|
8
|
+
end
|
9
|
+
|
10
|
+
def read_user_input(message, options)
|
11
|
+
return options[:branch_name] if (options.has_key?(:branch_name))
|
12
|
+
|
13
|
+
puts message
|
14
|
+
value = $stdin.gets.chomp
|
15
|
+
|
16
|
+
until (!value.empty?)
|
17
|
+
puts "Branch name cannot be empty"
|
18
|
+
puts message
|
19
|
+
value = $stdin.gets.chomp
|
20
|
+
end
|
21
|
+
|
22
|
+
value
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Toolshed
|
2
|
+
module Commands
|
3
|
+
class CreateBranch
|
4
|
+
def execute(args, options = {})
|
5
|
+
begin
|
6
|
+
branch_name = read_user_input_branch_name("Branch name:", options)
|
7
|
+
branch_from = read_user_input_branch_from("Branch from:", options)
|
8
|
+
|
9
|
+
puts "Branch name: #{branch_name}"
|
10
|
+
puts "Branching from: #{branch_from}"
|
11
|
+
|
12
|
+
git = Toolshed::Git::Base.new({
|
13
|
+
from_remote_branch_name: branch_from,
|
14
|
+
to_remote_branch_name: branch_name,
|
15
|
+
})
|
16
|
+
git.create_branch
|
17
|
+
|
18
|
+
puts "Branch #{branch_name} has been created"
|
19
|
+
return
|
20
|
+
rescue Veto::InvalidEntity => e
|
21
|
+
puts "Unable to create branch due to the following errors"
|
22
|
+
e.message.each do |key, value|
|
23
|
+
puts "#{key}: #{value}"
|
24
|
+
end
|
25
|
+
return
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def read_user_input_branch_name(message, options)
|
30
|
+
return options[:branch_name] if (options.has_key?(:branch_name))
|
31
|
+
|
32
|
+
puts message
|
33
|
+
value = $stdin.gets.chomp
|
34
|
+
|
35
|
+
until (!value.empty?)
|
36
|
+
puts "Branch name cannot be empty"
|
37
|
+
puts message
|
38
|
+
value = $stdin.gets.chomp
|
39
|
+
end
|
40
|
+
|
41
|
+
value
|
42
|
+
end
|
43
|
+
|
44
|
+
def read_user_input_branch_from(message, options)
|
45
|
+
return options[:branch_from] if (options.has_key?(:branch_from))
|
46
|
+
|
47
|
+
puts message
|
48
|
+
value = $stdin.gets.chomp
|
49
|
+
|
50
|
+
until (!value.empty?)
|
51
|
+
puts "Branch from cannot be empty"
|
52
|
+
puts message
|
53
|
+
value = $stdin.gets.chomp
|
54
|
+
end
|
55
|
+
|
56
|
+
value
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -8,10 +8,13 @@ module Toolshed
|
|
8
8
|
project_id = Toolshed::Client.default_pivotal_tracker_project_id
|
9
9
|
end
|
10
10
|
|
11
|
-
pivotal_tracker = Toolshed::PivotalTracker.new({
|
12
|
-
|
11
|
+
pivotal_tracker = Toolshed::TicketTracking::PivotalTracker.new({
|
12
|
+
project_id: project_id,
|
13
|
+
username: Toolshed::TicketTracking::PivotalTracker.username,
|
14
|
+
password: Toolshed::TicketTracking::PivotalTracker.password,
|
15
|
+
})
|
13
16
|
|
14
|
-
default_story_id = Toolshed::PivotalTracker::story_id_from_branch_name(
|
17
|
+
default_story_id = Toolshed::TicketTracking::PivotalTracker::story_id_from_branch_name(Toolshed::Git::Base.branch_name)
|
15
18
|
print "Story ID (Default: #{default_story_id})? "
|
16
19
|
story_id = $stdin.gets.chomp.strip
|
17
20
|
if (story_id == '')
|
@@ -23,7 +26,9 @@ module Toolshed
|
|
23
26
|
|
24
27
|
begin
|
25
28
|
result = pivotal_tracker.add_note(story_id, note_text)
|
26
|
-
|
29
|
+
result.instance_variables.each do |name, value|
|
30
|
+
puts "#{name}: #{result.instance_variable_get(name).inspect}"
|
31
|
+
end
|
27
32
|
rescue => e
|
28
33
|
puts e.message
|
29
34
|
exit
|