knife-stash 0.1.0
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/.gitignore +18 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +5 -0
- data/README.md +117 -0
- data/Rakefile +2 -0
- data/knife-stash.gemspec +18 -0
- data/lib/chef/knife/BaseStashCommand.rb +93 -0
- data/lib/chef/knife/stash_project_create.rb +68 -0
- data/lib/chef/knife/stash_project_delete.rb +66 -0
- data/lib/chef/knife/stash_project_repos.rb +45 -0
- data/lib/chef/knife/stash_projects.rb +37 -0
- data/lib/chef/knife/stash_repo_create.rb +64 -0
- data/lib/chef/knife/stash_repo_delete.rb +52 -0
- data/lib/chef/knife/stash_repos.rb +49 -0
- data/lib/knife-stash/version.rb +5 -0
- metadata +76 -0
data/.gitignore
ADDED
data/CHANGELOG.md
ADDED
data/README.md
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
# Knife Stash
|
2
|
+
|
3
|
+
A knife plugin for Atlassian Stash.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
* Clone repo to ~/.chef/plugins/knife or path/to/cheforg/.chef/plugins/knife
|
8
|
+
|
9
|
+
## Usage
|
10
|
+
|
11
|
+
Plugin will prompt for any missing passwords.
|
12
|
+
|
13
|
+
### Common parameters
|
14
|
+
|
15
|
+
* `--noop` - Perform no modifying operations
|
16
|
+
* `--stash-username USERNAME` - Stash username, defaults to
|
17
|
+
`ENV['USER']`
|
18
|
+
* `--stash-password PASSWORD` - Stash password, defaults to nothing but will ask if necessary
|
19
|
+
* `--stash-hostname HOSTNAME` - Stash hostname, no default
|
20
|
+
|
21
|
+
### knife stash project create KEY NAME
|
22
|
+
|
23
|
+
Creates a Stash project.
|
24
|
+
|
25
|
+
* `--description DESCRIPTION` - optionally set a description for the project
|
26
|
+
|
27
|
+
For example:
|
28
|
+
|
29
|
+
$ knife stash project create TEST "Test Project from API"
|
30
|
+
Created Stash Project: TEST (Test Project from API)
|
31
|
+
|
32
|
+
### knife stash project delete KEY
|
33
|
+
|
34
|
+
Deletes a Stash project.
|
35
|
+
|
36
|
+
* `--delete-repos` - required if any repositories exist under project
|
37
|
+
|
38
|
+
For example:
|
39
|
+
|
40
|
+
$ knife stash project delete TEST --delete-repos
|
41
|
+
Deleted Stash Repository: TEST/repo1
|
42
|
+
Deleted Stash Repository: TEST/repo2
|
43
|
+
Deleted Stash Project: TEST
|
44
|
+
|
45
|
+
### knife stash project repos KEY
|
46
|
+
|
47
|
+
Lists all Stash repositories in a project.
|
48
|
+
|
49
|
+
$ knife stash project repos COOKBOOKS
|
50
|
+
cessna (cessna)
|
51
|
+
netbackup (netbackup)
|
52
|
+
remoteaddr (remoteaddr)
|
53
|
+
template-cookbook (template-cookbook)
|
54
|
+
...
|
55
|
+
|
56
|
+
### knife stash projects
|
57
|
+
|
58
|
+
Lists all Stash projects.
|
59
|
+
|
60
|
+
$ knife stash projects
|
61
|
+
CHEF_BASEBOX: Chef Basebox
|
62
|
+
COOKBOOKS: Chef Cookbooks
|
63
|
+
CHEFORG_CORE_SYSTEMS: Chef Organization core-systems
|
64
|
+
CHEFORG_FNCE: Chef Organization FNCE
|
65
|
+
...
|
66
|
+
|
67
|
+
### knife stash repo create KEY REPO
|
68
|
+
|
69
|
+
Creates a Stash repository in a project.
|
70
|
+
|
71
|
+
$ knife stash repo create TEST repo1
|
72
|
+
Created Stash Repository: TEST/repo1
|
73
|
+
Available via (HTTPS): https://bflad@stash.example.com/scm/TEST/repo1.git
|
74
|
+
Available via (SSH): ssh://git@stash.example.com:7999/TEST/repo1.git
|
75
|
+
|
76
|
+
### knife stash repo delete KEY REPO
|
77
|
+
|
78
|
+
Deletes a Stash repository in a project.
|
79
|
+
|
80
|
+
$ knife stash repo delete TEST repo1
|
81
|
+
Deleted Stash Repository: TEST/repo1
|
82
|
+
|
83
|
+
### knife stash repos
|
84
|
+
|
85
|
+
Lists all Stash repositories in all projects.
|
86
|
+
|
87
|
+
$ knife stash repos
|
88
|
+
CHEF_BASEBOX/definitions
|
89
|
+
COOKBOOKS/cessna
|
90
|
+
COOKBOOKS/netbackup
|
91
|
+
COOKBOOKS/remoteaddr
|
92
|
+
COOKBOOKS/template-cookbook
|
93
|
+
CHEFORG_CORE_SYSTEMS/cheforg-core-systems
|
94
|
+
CHEFORG_FNCE/cheforg_fnce
|
95
|
+
...
|
96
|
+
|
97
|
+
## Contributing
|
98
|
+
|
99
|
+
Please use standard Github issues and pull requests.
|
100
|
+
|
101
|
+
## License and Author
|
102
|
+
|
103
|
+
Author:: Brian Flad (<bflad417@gmail.com>)
|
104
|
+
|
105
|
+
Copyright:: 2013
|
106
|
+
|
107
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
108
|
+
you may not use this file except in compliance with the License.
|
109
|
+
You may obtain a copy of the License at
|
110
|
+
|
111
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
112
|
+
|
113
|
+
Unless required by applicable law or agreed to in writing, software
|
114
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
115
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
116
|
+
See the License for the specific language governing permissions and
|
117
|
+
limitations under the License.
|
data/Rakefile
ADDED
data/knife-stash.gemspec
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/knife-stash/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Brian Flad"]
|
6
|
+
gem.email = ["bflad417@gmail.com"]
|
7
|
+
gem.description = %q{A knife plugin for Atlassian Stash.}
|
8
|
+
gem.summary = gem.summary
|
9
|
+
gem.homepage = "https://github.com/bflad/knife-stash"
|
10
|
+
|
11
|
+
gem.add_runtime_dependency "faraday"
|
12
|
+
|
13
|
+
gem.files = `git ls-files`.split($\)
|
14
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
15
|
+
gem.name = "knife-stash"
|
16
|
+
gem.require_paths = ["lib"]
|
17
|
+
gem.version = Knife::Stash::VERSION
|
18
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Brian Flad (<bflad417@gmail.com>)
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
|
6
|
+
module StashKnifePlugin
|
7
|
+
|
8
|
+
require 'chef/knife'
|
9
|
+
require 'highline/import'
|
10
|
+
require 'faraday'
|
11
|
+
|
12
|
+
class BaseStashCommand < Chef::Knife
|
13
|
+
|
14
|
+
deps do
|
15
|
+
require 'highline/import'
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.get_common_options
|
19
|
+
unless defined? $default
|
20
|
+
$default = Hash.new
|
21
|
+
end
|
22
|
+
|
23
|
+
option :noop,
|
24
|
+
:long => "--noop",
|
25
|
+
:description => "Perform no modifying operations",
|
26
|
+
:boolean => false
|
27
|
+
|
28
|
+
option :stash_username,
|
29
|
+
:short => "-u USERNAME",
|
30
|
+
:long => "--stash-username USERNAME",
|
31
|
+
:description => "The username for Stash"
|
32
|
+
$default[:stash_username] = ENV['USER']
|
33
|
+
|
34
|
+
option :stash_password,
|
35
|
+
:short => "-p PASSWORD",
|
36
|
+
:long => "--stash-password PASSWORD",
|
37
|
+
:description => "The password for Stash"
|
38
|
+
|
39
|
+
option :stash_hostname,
|
40
|
+
:long => "--stash-hostname HOSTNAME",
|
41
|
+
:description => "The hostname for Stash"
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
def display_stash_error(message,response)
|
46
|
+
ui.fatal message
|
47
|
+
JSON.parse(response.body)['errors'].each do |error|
|
48
|
+
ui.fatal "#{error['context'] ? error['context'] + ": " : "" }#{error['message']}"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def get_all_values(stash,url,response)
|
53
|
+
r = JSON.parse(response.body)
|
54
|
+
yield r['values']
|
55
|
+
until r['isLastPage']
|
56
|
+
response = stash.get url, { :start => r['nextPageStart'] }
|
57
|
+
r = JSON.parse(response.body)
|
58
|
+
yield r['values']
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def get_config(key)
|
63
|
+
key = key.to_sym
|
64
|
+
rval = config[key] || Chef::Config[:knife][key] || $default[key]
|
65
|
+
Chef::Log.debug("value for config item #{key}: #{rval}")
|
66
|
+
rval
|
67
|
+
end
|
68
|
+
|
69
|
+
def get_stash_connection
|
70
|
+
config[:stash_hostname] = ask("Stash Hostname: ") { |q| q.echo = "*" } unless get_config(:stash_hostname)
|
71
|
+
config[:stash_username] = ask("Stash Username for #{get_config(:stash_hostname)}: ") { |q| q.echo = "*" } unless get_config(:stash_username)
|
72
|
+
config[:stash_password] = ask("Stash Password for #{get_config(:stash_username)}: ") { |q| q.echo = "*" } unless get_config(:stash_password)
|
73
|
+
|
74
|
+
connection = Faraday.new(:url => "https://#{get_config(:stash_hostname)}", :ssl => {:verify => false}) do |faraday|
|
75
|
+
faraday.request :url_encoded # form-encode POST params
|
76
|
+
#faraday.response :logger # log requests to STDOUT
|
77
|
+
faraday.adapter :net_http # make requests with Net::HTTP
|
78
|
+
end
|
79
|
+
connection.basic_auth(get_config(:stash_username),get_config(:stash_password))
|
80
|
+
connection.url_prefix = "https://#{get_config(:stash_hostname)}/rest/api/1.0"
|
81
|
+
connection
|
82
|
+
end
|
83
|
+
|
84
|
+
def get_repo_https_url(project_key,repo)
|
85
|
+
"https://#{get_config(:stash_username)}@#{get_config(:stash_hostname)}/scm/#{project_key}/#{repo}.git"
|
86
|
+
end
|
87
|
+
|
88
|
+
def get_repo_ssh_url(project_key,repo)
|
89
|
+
"ssh://git@#{get_config(:stash_hostname)}:7999/#{project_key}/#{repo}.git"
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Brian Flad (<bflad417@gmail.com>)
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
|
6
|
+
module StashKnifePlugin
|
7
|
+
|
8
|
+
require 'chef/knife'
|
9
|
+
|
10
|
+
class StashProjectCreate < BaseStashCommand
|
11
|
+
|
12
|
+
banner "knife stash project create KEY NAME (options)"
|
13
|
+
category "stash"
|
14
|
+
|
15
|
+
option :description,
|
16
|
+
:short => "-d DESCRIPTION",
|
17
|
+
:long => "--description DESCRIPTION",
|
18
|
+
:description => "The description for the project"
|
19
|
+
|
20
|
+
get_common_options
|
21
|
+
|
22
|
+
def run
|
23
|
+
|
24
|
+
key = name_args.first
|
25
|
+
|
26
|
+
if key.nil?
|
27
|
+
ui.fatal "You need a project key!"
|
28
|
+
show_usage
|
29
|
+
exit 1
|
30
|
+
end
|
31
|
+
|
32
|
+
name = name_args[1]
|
33
|
+
|
34
|
+
if name.nil?
|
35
|
+
ui.fatal "You need a project name!"
|
36
|
+
show_usage
|
37
|
+
exit 1
|
38
|
+
end
|
39
|
+
|
40
|
+
args = name_args[2]
|
41
|
+
if args.nil?
|
42
|
+
args = ""
|
43
|
+
end
|
44
|
+
|
45
|
+
stash = get_stash_connection
|
46
|
+
project = { :name => name, :key => key }
|
47
|
+
project[:description] = get_config(:description) if get_config(:description)
|
48
|
+
|
49
|
+
if get_config(:noop)
|
50
|
+
ui.info "#{ui.color "Skipping project creation process because --noop specified.", :red}"
|
51
|
+
else
|
52
|
+
response = stash.post do |post|
|
53
|
+
post.url "projects"
|
54
|
+
post.headers['Content-Type'] = "application/json"
|
55
|
+
post.body = JSON.generate(project)
|
56
|
+
end
|
57
|
+
if response.success?
|
58
|
+
ui.info "Created Stash Project: #{key} (#{name})"
|
59
|
+
else
|
60
|
+
display_stash_error "Could not create Stash project!", response
|
61
|
+
exit 1
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Brian Flad (<bflad417@gmail.com>)
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
|
6
|
+
module StashKnifePlugin
|
7
|
+
|
8
|
+
require 'chef/knife'
|
9
|
+
|
10
|
+
class StashProjectDelete < BaseStashCommand
|
11
|
+
|
12
|
+
banner "knife stash project delete KEY (options)"
|
13
|
+
category "stash"
|
14
|
+
|
15
|
+
option :delete_repos,
|
16
|
+
:short => "-d",
|
17
|
+
:long => "--delete-repos",
|
18
|
+
:description => "Delete all repositories in project.",
|
19
|
+
:boolean => false
|
20
|
+
|
21
|
+
get_common_options
|
22
|
+
|
23
|
+
def run
|
24
|
+
|
25
|
+
key = name_args.first
|
26
|
+
|
27
|
+
if key.nil?
|
28
|
+
ui.fatal "You need a project key!"
|
29
|
+
show_usage
|
30
|
+
exit 1
|
31
|
+
end
|
32
|
+
|
33
|
+
stash = get_stash_connection
|
34
|
+
|
35
|
+
if get_config(:noop)
|
36
|
+
ui.info "#{ui.color "Skipping project deletion process because --noop specified.", :red}"
|
37
|
+
else
|
38
|
+
if get_config(:delete_repos)
|
39
|
+
url = "projects/#{key}/repos"
|
40
|
+
response = stash.get url
|
41
|
+
if response.success?
|
42
|
+
get_all_values stash,url,response do |values|
|
43
|
+
values.each do |repo|
|
44
|
+
repo_delete = StashRepoDelete.new
|
45
|
+
repo_delete.name_args = [ key, repo['name'] ]
|
46
|
+
repo_delete.run
|
47
|
+
end
|
48
|
+
end
|
49
|
+
else
|
50
|
+
display_stash_error "Could not delete Stash project repositories!", response
|
51
|
+
exit 1
|
52
|
+
end
|
53
|
+
end
|
54
|
+
response = stash.delete "projects/#{key}"
|
55
|
+
if response.success?
|
56
|
+
ui.info "Deleted Stash Project: #{key}"
|
57
|
+
else
|
58
|
+
display_stash_error "Could not delete Stash project!", response
|
59
|
+
exit 1
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Brian Flad (<bflad417@gmail.com>)
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
|
6
|
+
module StashKnifePlugin
|
7
|
+
|
8
|
+
require 'chef/knife'
|
9
|
+
|
10
|
+
class StashProjectRepos < BaseStashCommand
|
11
|
+
|
12
|
+
banner "knife stash project repos KEY (options)"
|
13
|
+
category "stash"
|
14
|
+
|
15
|
+
get_common_options
|
16
|
+
|
17
|
+
def run
|
18
|
+
|
19
|
+
key = name_args.first
|
20
|
+
|
21
|
+
if key.nil?
|
22
|
+
ui.fatal "You need a project key!"
|
23
|
+
show_usage
|
24
|
+
exit 1
|
25
|
+
end
|
26
|
+
|
27
|
+
stash = get_stash_connection
|
28
|
+
url = "projects/#{key}/repos"
|
29
|
+
response = stash.get url
|
30
|
+
|
31
|
+
if response.success?
|
32
|
+
get_all_values stash,url,response do |values|
|
33
|
+
values.each do |repo|
|
34
|
+
ui.info "#{repo['slug']} (#{repo['name']})"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
else
|
38
|
+
display_stash_error "Could not list Stash project repositories!", response
|
39
|
+
exit 1
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Brian Flad (<bflad417@gmail.com>)
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
|
6
|
+
module StashKnifePlugin
|
7
|
+
|
8
|
+
require 'chef/knife'
|
9
|
+
|
10
|
+
class StashProjects < BaseStashCommand
|
11
|
+
|
12
|
+
banner "knife stash projects (options)"
|
13
|
+
category "stash"
|
14
|
+
|
15
|
+
get_common_options
|
16
|
+
|
17
|
+
def run
|
18
|
+
|
19
|
+
stash = get_stash_connection
|
20
|
+
url = "projects"
|
21
|
+
response = stash.get url
|
22
|
+
|
23
|
+
if response.success?
|
24
|
+
get_all_values stash,url,response do |values|
|
25
|
+
values.each do |project|
|
26
|
+
ui.info "#{project['key']}: #{project['name']}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
else
|
30
|
+
display_stash_error "Could not list Stash projects!", response
|
31
|
+
exit 1
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Brian Flad (<bflad417@gmail.com>)
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
|
6
|
+
module StashKnifePlugin
|
7
|
+
|
8
|
+
require 'chef/knife'
|
9
|
+
|
10
|
+
class StashRepoCreate < BaseStashCommand
|
11
|
+
|
12
|
+
banner "knife stash repo create PROJECT_KEY NAME (options)"
|
13
|
+
category "stash"
|
14
|
+
|
15
|
+
get_common_options
|
16
|
+
|
17
|
+
def run
|
18
|
+
|
19
|
+
project_key = name_args.first
|
20
|
+
|
21
|
+
if project_key.nil?
|
22
|
+
ui.fatal "You need a project key!"
|
23
|
+
show_usage
|
24
|
+
exit 1
|
25
|
+
end
|
26
|
+
|
27
|
+
name = name_args[1]
|
28
|
+
|
29
|
+
if name.nil?
|
30
|
+
ui.fatal "You need a repository name!"
|
31
|
+
show_usage
|
32
|
+
exit 1
|
33
|
+
end
|
34
|
+
|
35
|
+
args = name_args[2]
|
36
|
+
if args.nil?
|
37
|
+
args = ""
|
38
|
+
end
|
39
|
+
|
40
|
+
stash = get_stash_connection
|
41
|
+
repo = { :name => name, :scmId => "git" }
|
42
|
+
|
43
|
+
if get_config(:noop)
|
44
|
+
ui.info "#{ui.color "Skipping repo creation process because --noop specified.", :red}"
|
45
|
+
else
|
46
|
+
response = stash.post do |post|
|
47
|
+
post.url "projects/#{project_key}/repos"
|
48
|
+
post.headers['Content-Type'] = "application/json"
|
49
|
+
post.body = JSON.generate(repo)
|
50
|
+
end
|
51
|
+
if response.success?
|
52
|
+
ui.info "Created Stash Repository: #{project_key}/#{name}"
|
53
|
+
ui.info "Available via (HTTPS): #{get_repo_https_url(project_key,name)}"
|
54
|
+
ui.info "Available via (SSH): #{get_repo_ssh_url(project_key,name)}"
|
55
|
+
else
|
56
|
+
display_stash_error "Could not create Stash repository!", response
|
57
|
+
exit 1
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Brian Flad (<bflad417@gmail.com>)
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
|
6
|
+
module StashKnifePlugin
|
7
|
+
|
8
|
+
require 'chef/knife'
|
9
|
+
|
10
|
+
class StashRepoDelete < BaseStashCommand
|
11
|
+
|
12
|
+
banner "knife stash repo delete KEY REPO (options)"
|
13
|
+
category "stash"
|
14
|
+
|
15
|
+
get_common_options
|
16
|
+
|
17
|
+
def run
|
18
|
+
|
19
|
+
key = name_args.first
|
20
|
+
|
21
|
+
if key.nil?
|
22
|
+
ui.fatal "You need a project key!"
|
23
|
+
show_usage
|
24
|
+
exit 1
|
25
|
+
end
|
26
|
+
|
27
|
+
repo = name_args[1]
|
28
|
+
|
29
|
+
if repo.nil?
|
30
|
+
ui.fatal "You need a repository name!"
|
31
|
+
show_usage
|
32
|
+
exit 1
|
33
|
+
end
|
34
|
+
|
35
|
+
stash = get_stash_connection
|
36
|
+
|
37
|
+
if get_config(:noop)
|
38
|
+
ui.info "#{ui.color "Skipping project repository deletion process because --noop specified.", :red}"
|
39
|
+
else
|
40
|
+
response = stash.delete "projects/#{key}/repos/#{repo}"
|
41
|
+
if response.success?
|
42
|
+
ui.info "Deleted Stash Repository: #{key}/#{repo}"
|
43
|
+
else
|
44
|
+
display_stash_error "Could not delete Stash respository!", response
|
45
|
+
exit 1
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Brian Flad (<bflad417@gmail.com>)
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
|
6
|
+
module StashKnifePlugin
|
7
|
+
|
8
|
+
require 'chef/knife'
|
9
|
+
|
10
|
+
class StashRepos < BaseStashCommand
|
11
|
+
|
12
|
+
banner "knife stash repos (options)"
|
13
|
+
category "stash"
|
14
|
+
|
15
|
+
get_common_options
|
16
|
+
|
17
|
+
def run
|
18
|
+
|
19
|
+
stash = get_stash_connection
|
20
|
+
url = "projects"
|
21
|
+
project_response = stash.get url
|
22
|
+
|
23
|
+
if project_response.success?
|
24
|
+
get_all_values stash,url,project_response do |project_values|
|
25
|
+
project_values.each do |project|
|
26
|
+
url = "projects/#{project['key']}/repos"
|
27
|
+
repo_response = stash.get url
|
28
|
+
|
29
|
+
if repo_response.success?
|
30
|
+
get_all_values stash,url,repo_response do |repo_values|
|
31
|
+
repo_values.each do |repo|
|
32
|
+
ui.info "#{project['key']}/#{repo['slug']}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
else
|
36
|
+
display_stash_error "Could not list Stash project repositories!", repo_response
|
37
|
+
exit 1
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
else
|
42
|
+
display_stash_error "Could not list Stash projects!", project_response
|
43
|
+
exit 1
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
metadata
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: knife-stash
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Brian Flad
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-02-20 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: faraday
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
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
|
+
description: A knife plugin for Atlassian Stash.
|
31
|
+
email:
|
32
|
+
- bflad417@gmail.com
|
33
|
+
executables: []
|
34
|
+
extensions: []
|
35
|
+
extra_rdoc_files: []
|
36
|
+
files:
|
37
|
+
- .gitignore
|
38
|
+
- CHANGELOG.md
|
39
|
+
- Gemfile
|
40
|
+
- README.md
|
41
|
+
- Rakefile
|
42
|
+
- knife-stash.gemspec
|
43
|
+
- lib/chef/knife/BaseStashCommand.rb
|
44
|
+
- lib/chef/knife/stash_project_create.rb
|
45
|
+
- lib/chef/knife/stash_project_delete.rb
|
46
|
+
- lib/chef/knife/stash_project_repos.rb
|
47
|
+
- lib/chef/knife/stash_projects.rb
|
48
|
+
- lib/chef/knife/stash_repo_create.rb
|
49
|
+
- lib/chef/knife/stash_repo_delete.rb
|
50
|
+
- lib/chef/knife/stash_repos.rb
|
51
|
+
- lib/knife-stash/version.rb
|
52
|
+
homepage: https://github.com/bflad/knife-stash
|
53
|
+
licenses: []
|
54
|
+
post_install_message:
|
55
|
+
rdoc_options: []
|
56
|
+
require_paths:
|
57
|
+
- lib
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ! '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
requirements: []
|
71
|
+
rubyforge_project:
|
72
|
+
rubygems_version: 1.8.23
|
73
|
+
signing_key:
|
74
|
+
specification_version: 3
|
75
|
+
summary: ''
|
76
|
+
test_files: []
|