gitgut 0.1.1
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 +7 -0
- data/.gitignore +11 -0
- data/.rspec +2 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +76 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/exe/gitgut +62 -0
- data/gitgut.gemspec +36 -0
- data/lib/gitgut/branch.rb +109 -0
- data/lib/gitgut/git.rb +11 -0
- data/lib/gitgut/github.rb +37 -0
- data/lib/gitgut/jira.rb +110 -0
- data/lib/gitgut/settings.rb +10 -0
- data/lib/gitgut/version.rb +3 -0
- data/lib/gitgut.rb +10 -0
- metadata +218 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 94dc47b7fdf0914947313f8a19c3c14e3b79c2f2
|
4
|
+
data.tar.gz: cdc09a9fbb53282f8888e20c7f113dc8828115aa
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ffa8a129a1fbf84d70f0e695143e8076697ab9d20f6de3ae89f4836e8c915b8681d2cc26f44d687e385c24f647d231c66bdf54d9cac71bfab95b439c7e591e41
|
7
|
+
data.tar.gz: 3a2dc0fe09932f8f6eadd34211ae404ceeccbeec2cbb17927fff1aaef212902f3ddf4c6264b9805a3595d79e4322b059048c1c0da43ab68e894a12cb1e5fdcb3
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2016 Benoit Dinocourt
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
# Gitgut
|
2
|
+
|
3
|
+
Display PR and JIRA tickets info about the branches that are currently checked out on your git repository.
|
4
|
+
|
5
|
+
## Disclaimer
|
6
|
+
|
7
|
+
This gem is tailored for the JobTeaser.com development workflow and is probably not suited for anything else at this time.
|
8
|
+
|
9
|
+
Use only for inspiration purpose.
|
10
|
+
|
11
|
+
## Expected features
|
12
|
+
|
13
|
+
* Show how many commits are not merged in staging/develop
|
14
|
+
* Show all commits for the branch only
|
15
|
+
* Allow to checkout a branch from the jira number
|
16
|
+
* Show if branch has one or more PR and the state of the PR
|
17
|
+
* Categorize branches by JIRA/NO JIRA, developer/reviewer, JIRA status
|
18
|
+
* Automatically delete branches that are merged in develop
|
19
|
+
* Display time retrieving various info
|
20
|
+
|
21
|
+
## Installation
|
22
|
+
|
23
|
+
Add this line to your application's Gemfile:
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
gem 'gitgut'
|
27
|
+
```
|
28
|
+
|
29
|
+
And then execute:
|
30
|
+
|
31
|
+
$ bundle
|
32
|
+
|
33
|
+
Or install it yourself as:
|
34
|
+
|
35
|
+
$ gem install gitgut
|
36
|
+
|
37
|
+
## Usage
|
38
|
+
|
39
|
+
Add a .gitgut file to the working directory of your application
|
40
|
+
|
41
|
+
# .gitgut
|
42
|
+
jira:
|
43
|
+
username: first_name.last_name
|
44
|
+
password: 'p@$$W0rd'
|
45
|
+
endpoint: https://[companyname].atlassian.net/rest/api/2/search
|
46
|
+
|
47
|
+
github:
|
48
|
+
login: username
|
49
|
+
password: 'p@$$W0rd'
|
50
|
+
repo:
|
51
|
+
name: name_of_the_repository
|
52
|
+
owner: repo_owner_username
|
53
|
+
|
54
|
+
And then run gitgut from the same directory
|
55
|
+
|
56
|
+
$ gitgut
|
57
|
+
|
58
|
+
### Interactive console
|
59
|
+
|
60
|
+
$ bin/console
|
61
|
+
|
62
|
+
## Development
|
63
|
+
|
64
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
65
|
+
|
66
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
67
|
+
|
68
|
+
## Contributing
|
69
|
+
|
70
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/Ghrind/gitgut.
|
71
|
+
|
72
|
+
|
73
|
+
## License
|
74
|
+
|
75
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
76
|
+
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "gitgut"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
data/exe/gitgut
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
t1 = Time.now
|
4
|
+
|
5
|
+
lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
|
6
|
+
$LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
|
7
|
+
|
8
|
+
require 'gitgut'
|
9
|
+
|
10
|
+
require 'colorize'
|
11
|
+
|
12
|
+
headings = ['Branch name', 'Develop', 'Staging', 'PR', 'JIRA', 'Suggestion']
|
13
|
+
|
14
|
+
def present_commit_count(count, error = false)
|
15
|
+
return count.to_s.colorize(:red) if error
|
16
|
+
return '-' if count.zero?
|
17
|
+
count.to_s
|
18
|
+
end
|
19
|
+
|
20
|
+
print 'Retrieving info: '
|
21
|
+
data = []
|
22
|
+
|
23
|
+
branches = []
|
24
|
+
`git branch`.each_line do |l|
|
25
|
+
branch = Gitgut::Branch.new(l)
|
26
|
+
|
27
|
+
next if %w(develop master staging).include? branch.name
|
28
|
+
|
29
|
+
branches << branch
|
30
|
+
end
|
31
|
+
|
32
|
+
require 'parallel'
|
33
|
+
branches = Parallel.map(branches) do |branch|
|
34
|
+
branch.preload!.tap do
|
35
|
+
print '.'.colorize(:green)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
branches.each do |branch|
|
40
|
+
row = [
|
41
|
+
branch.name.colorize(branch.color),
|
42
|
+
present_commit_count(branch.to_develop),
|
43
|
+
present_commit_count(branch.to_staging, branch.develop_is_ahead_of_staging? || branch.merge_in_staging_required_by_ticket_status?),
|
44
|
+
branch.pull_requests.map { |pr| pr.number.colorize(pr.color) }.join(' '),
|
45
|
+
(branch.ticket ? branch.ticket.key.colorize(branch.ticket.color) : ''),
|
46
|
+
#(branch.ticket ? branch.ticket.assignee_initials : ''),
|
47
|
+
#(branch.ticket ? branch.ticket.status : '')
|
48
|
+
branch.action_suggestion
|
49
|
+
]
|
50
|
+
|
51
|
+
data << row
|
52
|
+
end
|
53
|
+
puts
|
54
|
+
puts
|
55
|
+
|
56
|
+
require 'terminal-table'
|
57
|
+
table = Terminal::Table.new headings: headings, rows: data
|
58
|
+
|
59
|
+
puts table
|
60
|
+
|
61
|
+
puts
|
62
|
+
puts "Rendered in #{(Time.now - t1).round(1)}s"
|
data/gitgut.gemspec
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'gitgut/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "gitgut"
|
8
|
+
spec.version = Gitgut::VERSION
|
9
|
+
spec.authors = ["Benoit Dinocourt"]
|
10
|
+
spec.email = ["ghrind@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{See your branches, Github PRs and JIRA tickets in one glance!}
|
13
|
+
spec.description = %q{Display PR and JIRA tickets info about the branches that are currently checked out on your git repository.}
|
14
|
+
spec.homepage = "https://github.com/Ghrind/gitgut"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
+
spec.bindir = "exe"
|
19
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
# TODO: Add required versions
|
23
|
+
spec.add_dependency 'colorize'
|
24
|
+
spec.add_dependency 'httparty'
|
25
|
+
spec.add_dependency 'parallel'
|
26
|
+
spec.add_dependency 'terminal-table'
|
27
|
+
spec.add_dependency 'octokit'
|
28
|
+
spec.add_dependency 'settingslogic'
|
29
|
+
|
30
|
+
spec.add_development_dependency "bundler", "~> 1.11"
|
31
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
32
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
33
|
+
spec.add_development_dependency 'webmock'
|
34
|
+
spec.add_development_dependency 'simplecov'
|
35
|
+
# spec.add_development_dependency 'pry-byebug'
|
36
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
module Gitgut
|
2
|
+
# A local git branch
|
3
|
+
class Branch
|
4
|
+
def initialize(name)
|
5
|
+
@raw_name = name
|
6
|
+
end
|
7
|
+
|
8
|
+
# TODO: Sanitization should be done elsewhere
|
9
|
+
def name
|
10
|
+
return @name if @name
|
11
|
+
match_data = /[ *]+(?<branch>[^\s]*)/.match @raw_name
|
12
|
+
@name = match_data[:branch]
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_develop
|
16
|
+
Gitgut::Git.missing_commits_count('develop', name)
|
17
|
+
end
|
18
|
+
|
19
|
+
def from_develop
|
20
|
+
Gitgut::Git.missing_commits_count(name, 'develop')
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_staging
|
24
|
+
Gitgut::Git.missing_commits_count('staging', name)
|
25
|
+
end
|
26
|
+
|
27
|
+
def from_staging
|
28
|
+
Gitgut::Git.missing_commits_count(name, 'staging')
|
29
|
+
end
|
30
|
+
|
31
|
+
def pull_requests
|
32
|
+
@pull_requests ||= Gitgut::Github.client.pull_requests("#{Settings.github.repo.owner}/#{Settings.github.repo.name}", state: 'all', head: "#{Settings.github.repo.owner}:#{name}").map { |pr| Gitgut::Github::PullRequest.new(pr) }
|
33
|
+
end
|
34
|
+
|
35
|
+
def jira_ticket_number
|
36
|
+
matches = name.match(/^jt-(?<id>\d+)/i)
|
37
|
+
return 'JT-' + matches[:id] if matches
|
38
|
+
end
|
39
|
+
|
40
|
+
def ticket
|
41
|
+
return @ticket if defined?(@ticket)
|
42
|
+
if jira_ticket_number
|
43
|
+
payload = Gitgut::Jira.request 'id=' + jira_ticket_number
|
44
|
+
return @ticket = nil if payload['issues'].empty?
|
45
|
+
@ticket = Gitgut::Jira::Ticket.new(payload['issues'].first)
|
46
|
+
else
|
47
|
+
@ticket = nil
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def color
|
52
|
+
return :red unless valid?
|
53
|
+
if has_pull_requests? && all_pull_requests_merged?
|
54
|
+
:green
|
55
|
+
else
|
56
|
+
:white
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def all_pull_requests_merged?
|
61
|
+
pull_requests.all?(&:merged?)
|
62
|
+
end
|
63
|
+
|
64
|
+
def has_pull_requests?
|
65
|
+
!pull_requests.empty?
|
66
|
+
end
|
67
|
+
|
68
|
+
def valid?
|
69
|
+
return false if develop_is_ahead_of_staging?
|
70
|
+
return false if merge_in_staging_required_by_ticket_status?
|
71
|
+
true
|
72
|
+
end
|
73
|
+
|
74
|
+
def develop_is_ahead_of_staging?
|
75
|
+
to_develop > 0 && to_develop < to_staging
|
76
|
+
end
|
77
|
+
|
78
|
+
def merge_in_staging_required_by_ticket_status?
|
79
|
+
return false unless ticket
|
80
|
+
if ['In Functional Review', 'In Review', 'Ready for Release'].include?(ticket.status) && to_staging > 0
|
81
|
+
return true
|
82
|
+
end
|
83
|
+
false
|
84
|
+
end
|
85
|
+
|
86
|
+
def merged_everywhere?
|
87
|
+
to_staging.zero? && to_develop.zero?
|
88
|
+
end
|
89
|
+
|
90
|
+
def action_suggestion
|
91
|
+
return 'Review the PR' if ticket && ticket.assigned_to_me? && ticket.in_review?
|
92
|
+
return 'Merge into staging' if merge_in_staging_required_by_ticket_status?
|
93
|
+
return 'Merge into staging or update your staging branch' if develop_is_ahead_of_staging?
|
94
|
+
if ticket
|
95
|
+
return 'Do some code' if ticket.assigned_to_me?
|
96
|
+
return 'Assign the ticket to me (and start the development)' if ticket.assignee.nil? && !ticket.done?
|
97
|
+
end
|
98
|
+
return 'Delete the local branch' if (merged_everywhere? && (!ticket || ticket.done?)) || (ticket && ticket.closed?)
|
99
|
+
end
|
100
|
+
|
101
|
+
def preload!
|
102
|
+
ticket
|
103
|
+
pull_requests
|
104
|
+
to_staging
|
105
|
+
to_develop
|
106
|
+
self
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
data/lib/gitgut/git.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
module Gitgut
|
2
|
+
# Wrapper around git commands
|
3
|
+
#
|
4
|
+
# Show commits only on this branch
|
5
|
+
# git log --no-merges HEAD --not develop --pretty=oneline
|
6
|
+
module Git
|
7
|
+
def self.missing_commits_count(from, to)
|
8
|
+
`git rev-list #{from}..#{to} --count`.to_i
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'octokit'
|
2
|
+
|
3
|
+
module Gitgut
|
4
|
+
# A wrapper around an octokit client
|
5
|
+
module Github
|
6
|
+
def self.client
|
7
|
+
@client ||= Octokit::Client.new(login: Settings.github.login, password: Settings.github.password)
|
8
|
+
end
|
9
|
+
|
10
|
+
# A Github pull request
|
11
|
+
class PullRequest
|
12
|
+
attr_reader :number, :state, :merged_at
|
13
|
+
|
14
|
+
def initialize(payload)
|
15
|
+
@number = payload[:number].to_s
|
16
|
+
@state = payload[:state]
|
17
|
+
# @url = payload[:url]
|
18
|
+
# @title = payload[:title]
|
19
|
+
@merged_at = payload[:merged_at]
|
20
|
+
# @closed_at = payload[:closed_at]
|
21
|
+
end
|
22
|
+
|
23
|
+
def color
|
24
|
+
case state
|
25
|
+
when 'open'
|
26
|
+
:white
|
27
|
+
when 'closed'
|
28
|
+
merged? ? :green : :light_black
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def merged?
|
33
|
+
!@merged_at.nil?
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/gitgut/jira.rb
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
|
3
|
+
module Gitgut
|
4
|
+
# Namespace around Atlassian/JIRA objects
|
5
|
+
module Jira
|
6
|
+
# A JIRA ticket
|
7
|
+
class Ticket
|
8
|
+
attr_reader :key, :assignee, :status
|
9
|
+
|
10
|
+
def initialize(payload)
|
11
|
+
@key = payload['key']
|
12
|
+
# TODO: use Mash?
|
13
|
+
if payload['fields']['assignee']
|
14
|
+
@assignee = payload['fields']['assignee']['name']
|
15
|
+
@assignee_display_name = payload['fields']['assignee']['displayName']
|
16
|
+
end
|
17
|
+
|
18
|
+
if payload['fields']['status']
|
19
|
+
@status = payload['fields']['status']['name']
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def assigned_to_me?
|
24
|
+
assignee == Settings.jira.username
|
25
|
+
end
|
26
|
+
|
27
|
+
def assignee_initials
|
28
|
+
return '' unless assignee
|
29
|
+
words = @assignee_display_name.split(/ +/)
|
30
|
+
"#{words.first} #{words.last[0]}."
|
31
|
+
end
|
32
|
+
|
33
|
+
def ready_for_release?
|
34
|
+
status == 'Ready for Release'
|
35
|
+
end
|
36
|
+
|
37
|
+
def in_review?
|
38
|
+
status == 'In Review'
|
39
|
+
end
|
40
|
+
|
41
|
+
def done?
|
42
|
+
ready_for_release? || released? || closed?
|
43
|
+
end
|
44
|
+
|
45
|
+
def closed?
|
46
|
+
status == 'Closed'
|
47
|
+
end
|
48
|
+
|
49
|
+
def released?
|
50
|
+
status == 'Released'
|
51
|
+
end
|
52
|
+
|
53
|
+
def color
|
54
|
+
return :light_blue if assigned_to_me?
|
55
|
+
case status
|
56
|
+
when 'In Functional Review', 'In Review'
|
57
|
+
:white
|
58
|
+
when 'In Development', 'Open'
|
59
|
+
:light_blue
|
60
|
+
when 'Ready for Release', 'Released'
|
61
|
+
:green
|
62
|
+
when 'Closed'
|
63
|
+
:light_black
|
64
|
+
else
|
65
|
+
:white
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.request(query)
|
71
|
+
response = Request.new(query).perform!
|
72
|
+
JSON.parse(response.body)
|
73
|
+
end
|
74
|
+
|
75
|
+
# Wrapper around a JQL query for JIR
|
76
|
+
class Request
|
77
|
+
DEFAULT_OPTIONS = {
|
78
|
+
headers: { 'Content-Type' => 'application/json' }
|
79
|
+
}.freeze
|
80
|
+
|
81
|
+
JQL_PARAM_NAME = 'jql'.freeze
|
82
|
+
|
83
|
+
def initialize(query)
|
84
|
+
@query = query
|
85
|
+
end
|
86
|
+
|
87
|
+
# TODO: Maybe use a flag like performed? and store the response in an
|
88
|
+
# attr_reader
|
89
|
+
def perform!
|
90
|
+
options = DEFAULT_OPTIONS.merge(
|
91
|
+
basic_auth: auth_options
|
92
|
+
)
|
93
|
+
HTTParty.get(url, options)
|
94
|
+
end
|
95
|
+
|
96
|
+
def url
|
97
|
+
url = URI.parse(Settings.jira.endpoint)
|
98
|
+
url.query = "#{JQL_PARAM_NAME}=#{URI.escape(@query)}"
|
99
|
+
url
|
100
|
+
end
|
101
|
+
|
102
|
+
def auth_options
|
103
|
+
{
|
104
|
+
username: Settings.jira.username,
|
105
|
+
password: Settings.jira.password
|
106
|
+
}
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
data/lib/gitgut.rb
ADDED
metadata
ADDED
@@ -0,0 +1,218 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gitgut
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Benoit Dinocourt
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-02-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: colorize
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: httparty
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: parallel
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: terminal-table
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: octokit
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: settingslogic
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: bundler
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.11'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1.11'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rake
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '10.0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '10.0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rspec
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '3.0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '3.0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: webmock
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: simplecov
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
description: Display PR and JIRA tickets info about the branches that are currently
|
168
|
+
checked out on your git repository.
|
169
|
+
email:
|
170
|
+
- ghrind@gmail.com
|
171
|
+
executables:
|
172
|
+
- gitgut
|
173
|
+
extensions: []
|
174
|
+
extra_rdoc_files: []
|
175
|
+
files:
|
176
|
+
- ".gitignore"
|
177
|
+
- ".rspec"
|
178
|
+
- ".travis.yml"
|
179
|
+
- Gemfile
|
180
|
+
- LICENSE.txt
|
181
|
+
- README.md
|
182
|
+
- Rakefile
|
183
|
+
- bin/console
|
184
|
+
- bin/setup
|
185
|
+
- exe/gitgut
|
186
|
+
- gitgut.gemspec
|
187
|
+
- lib/gitgut.rb
|
188
|
+
- lib/gitgut/branch.rb
|
189
|
+
- lib/gitgut/git.rb
|
190
|
+
- lib/gitgut/github.rb
|
191
|
+
- lib/gitgut/jira.rb
|
192
|
+
- lib/gitgut/settings.rb
|
193
|
+
- lib/gitgut/version.rb
|
194
|
+
homepage: https://github.com/Ghrind/gitgut
|
195
|
+
licenses:
|
196
|
+
- MIT
|
197
|
+
metadata: {}
|
198
|
+
post_install_message:
|
199
|
+
rdoc_options: []
|
200
|
+
require_paths:
|
201
|
+
- lib
|
202
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
203
|
+
requirements:
|
204
|
+
- - ">="
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: '0'
|
207
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
208
|
+
requirements:
|
209
|
+
- - ">="
|
210
|
+
- !ruby/object:Gem::Version
|
211
|
+
version: '0'
|
212
|
+
requirements: []
|
213
|
+
rubyforge_project:
|
214
|
+
rubygems_version: 2.4.8
|
215
|
+
signing_key:
|
216
|
+
specification_version: 4
|
217
|
+
summary: See your branches, Github PRs and JIRA tickets in one glance!
|
218
|
+
test_files: []
|