gem_comet 0.2.0 → 0.3.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.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +1 -1
- data/CHANGELOG.md +10 -0
- data/Gemfile.lock +2 -2
- data/lib/gem_comet/changelog/editor.rb +47 -0
- data/lib/gem_comet/changelog/generator.rb +112 -0
- data/lib/gem_comet/changelog.rb +50 -0
- data/lib/gem_comet/cli.rb +32 -3
- data/lib/gem_comet/release/update_pr.rb +4 -4
- data/lib/gem_comet/version.rb +1 -1
- data/lib/gem_comet.rb +3 -2
- metadata +5 -4
- data/lib/gem_comet/changelog_editor.rb +0 -26
- data/lib/gem_comet/changelog_generator.rb +0 -107
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d5518bdb07a7f391789dd4a92dfab7da680516d056043f53f89cc90b6369bf2c
|
4
|
+
data.tar.gz: bd74b2883f594bf6a8f8ef8d16f7e5b6523e51e99b78c2204ad7d59d13715746
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04115a41944981972f6ff88c7ec3d91facd4125ed05376b65341f94251910568a00bfc5d6b7aa968ffc2a47088adb8d41e0d9a230681e346999ea0e4402d5151
|
7
|
+
data.tar.gz: a654c0dc19960e482c4db8a049a35df9a741440b6806a361aabce616bc1eb212df794b41f55436c38ce2ada34a11f86f1bcb6d9a36d9439041377266f1ac4fcd
|
data/.rubocop_todo.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on 2019-
|
3
|
+
# on 2019-10-14 23:40:22 +0000 using RuboCop version 0.75.1.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
# Change log
|
2
2
|
|
3
|
+
## 0.3.0 (Oct 19, 2019)
|
4
|
+
|
5
|
+
### Feature
|
6
|
+
|
7
|
+
* Enhance the feature of changelog command ([#27](https://github.com/ryz310/gem_comet/pull/27))
|
8
|
+
|
9
|
+
### Misc
|
10
|
+
|
11
|
+
* Re-generate .rubocop_todo.yml with RuboCop v0.75.1 ([#25](https://github.com/ryz310/gem_comet/pull/25))
|
12
|
+
|
3
13
|
## 0.2.0 (Oct 14, 2019)
|
4
14
|
|
5
15
|
### Feature
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
gem_comet (0.
|
4
|
+
gem_comet (0.3.0)
|
5
5
|
pr_comet (~> 0.3.0)
|
6
6
|
thor
|
7
7
|
type_struct
|
@@ -54,7 +54,7 @@ GEM
|
|
54
54
|
rspec-support (3.9.0)
|
55
55
|
rspec_junit_formatter (0.4.1)
|
56
56
|
rspec-core (>= 2, < 4, != 2.12.0)
|
57
|
-
rubocop (0.75.
|
57
|
+
rubocop (0.75.1)
|
58
58
|
jaro_winkler (~> 1.5.1)
|
59
59
|
parallel (~> 1.10)
|
60
60
|
parser (>= 2.6)
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GemComet
|
4
|
+
class Changelog
|
5
|
+
# Edits CHANGELOG.md file of gem
|
6
|
+
class Editor
|
7
|
+
HEADER = "# Change log\n"
|
8
|
+
|
9
|
+
attr_reader :changelog_file_path
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@changelog_file_path = Config.call.release.changelog_file_path
|
13
|
+
end
|
14
|
+
|
15
|
+
# Prepends the content to CHANGELOG.md.
|
16
|
+
#
|
17
|
+
# @param content [String] Character string you want to prepend
|
18
|
+
def prepend!(content:)
|
19
|
+
return if changelog_file_path.nil?
|
20
|
+
|
21
|
+
modify_changelog do |changelog_file|
|
22
|
+
position = changelog_file.index(HEADER) + HEADER.length
|
23
|
+
changelog_file.insert(position, content)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Appends the content to CHANGELOG.md.
|
28
|
+
#
|
29
|
+
# @param content [String] Character string you want to append
|
30
|
+
def append!(content:)
|
31
|
+
return if changelog_file_path.nil?
|
32
|
+
|
33
|
+
modify_changelog do |changelog_file|
|
34
|
+
changelog_file.concat(content)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def modify_changelog
|
41
|
+
changelog_file = File.read(changelog_file_path)
|
42
|
+
yield(changelog_file)
|
43
|
+
File.write(changelog_file_path, changelog_file)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GemComet
|
4
|
+
class Changelog
|
5
|
+
# Generates changelog from git log
|
6
|
+
class Generator < ServiceAbstract
|
7
|
+
attr_reader :from, :to, :new_version
|
8
|
+
|
9
|
+
# @param from_version [String] The beginning of version number to create a changelog
|
10
|
+
# @param to_version [String]
|
11
|
+
# The end of version number to create a changelog. If ommit this option,
|
12
|
+
# it's specified `HEAD`.
|
13
|
+
# @param new_version [String] Next version of your gem
|
14
|
+
def initialize(from_version:, to_version: nil, new_version: nil)
|
15
|
+
@from = "v#{from_version}"
|
16
|
+
@to = to_version.nil? ? 'HEAD' : "v#{to_version}"
|
17
|
+
@new_version = new_version || to
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
MERGE_COMMIT_TITLE = /Merge pull request #(\d+) from (.+)/.freeze
|
23
|
+
|
24
|
+
# Returns changelogs as markdown format from current version to HEAD commit.
|
25
|
+
#
|
26
|
+
# @return [String] Changelogs as markdown format
|
27
|
+
def call
|
28
|
+
<<~MARKDOWN
|
29
|
+
|
30
|
+
## #{new_version} (#{Date.today.strftime('%b %d, %Y')})
|
31
|
+
|
32
|
+
### Feature
|
33
|
+
### Bugfix
|
34
|
+
### Breaking Change
|
35
|
+
### Misc
|
36
|
+
|
37
|
+
#{changelogs.reverse.join("\n")}
|
38
|
+
MARKDOWN
|
39
|
+
end
|
40
|
+
|
41
|
+
# Returns array of changelogs as markdown format.
|
42
|
+
#
|
43
|
+
# @return [Array<String>] Array of changelogs as markdown format
|
44
|
+
def changelogs
|
45
|
+
merge_commits.map do |merge_commit|
|
46
|
+
next unless merge_commit.match?(MERGE_COMMIT_TITLE)
|
47
|
+
|
48
|
+
pull_request_number = extract_pull_request_number(merge_commit)
|
49
|
+
pull_request_url = get_pull_request_url(pull_request_number)
|
50
|
+
description = extract_description(merge_commit) || extract_branch_name(merge_commit)
|
51
|
+
|
52
|
+
"* #{description} ([##{pull_request_number}](#{pull_request_url}))"
|
53
|
+
end.compact
|
54
|
+
end
|
55
|
+
|
56
|
+
# Extracts PR number from merge commit string.
|
57
|
+
#
|
58
|
+
# @param merge_commit [String] The target string
|
59
|
+
# @return [Integer] The pull request number
|
60
|
+
def extract_pull_request_number(merge_commit)
|
61
|
+
MERGE_COMMIT_TITLE.match(merge_commit).captures.first.to_i
|
62
|
+
end
|
63
|
+
|
64
|
+
# Get the PR URL. (e.g. https://github.com/ryz310/gem_comet/pull/1)
|
65
|
+
#
|
66
|
+
# @param pull_request_number [Integer] The target pull request number
|
67
|
+
# @return [String] Returns the URL
|
68
|
+
def get_pull_request_url(pull_request_number)
|
69
|
+
"#{origin_url}/pull/#{pull_request_number}"
|
70
|
+
end
|
71
|
+
|
72
|
+
# Extracts commit desciption from merge commit string.
|
73
|
+
#
|
74
|
+
# @param merge_commit [String] The target string
|
75
|
+
# @return [String] The commit description
|
76
|
+
# @return [nil] Returns `nil` if not exists
|
77
|
+
def extract_description(merge_commit)
|
78
|
+
description = merge_commit.lines.last
|
79
|
+
description&.chomp&.strip unless description.match?(MERGE_COMMIT_TITLE)
|
80
|
+
end
|
81
|
+
|
82
|
+
# Extracts the PR branch name from merge commit string.
|
83
|
+
#
|
84
|
+
# @param merge_commit [String] The target string
|
85
|
+
# @return [String] Branch name
|
86
|
+
def extract_branch_name(merge_commit)
|
87
|
+
MERGE_COMMIT_TITLE.match(merge_commit).captures.last.chomp.strip
|
88
|
+
end
|
89
|
+
|
90
|
+
# Parces the merge commit log, which to separate by each commit.
|
91
|
+
#
|
92
|
+
# @return [Array<String>] Array of git commit log
|
93
|
+
def merge_commits
|
94
|
+
merge_commit_log.split(/^commit \w{40}\n/).reject(&:empty?).map(&:chomp)
|
95
|
+
end
|
96
|
+
|
97
|
+
# Returns only merge commit logs via git command.
|
98
|
+
#
|
99
|
+
# @return [String] Get only merge commit logs
|
100
|
+
def merge_commit_log
|
101
|
+
@merge_commit_log ||= `git log --merges #{from}..#{to}`
|
102
|
+
end
|
103
|
+
|
104
|
+
# Returns the git origin URL via git command.
|
105
|
+
#
|
106
|
+
# @return [String] The origin URL
|
107
|
+
def origin_url
|
108
|
+
@origin_url ||= `git remote get-url --push origin`.sub('.git', '').chomp
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GemComet
|
4
|
+
# Generates changelog from git log
|
5
|
+
class Changelog < ServiceAbstract
|
6
|
+
# @param from_version [String]
|
7
|
+
# The beginning of version number to create a changelog.
|
8
|
+
# Default is specified current version.
|
9
|
+
# @param to_version [String]
|
10
|
+
# The end of version number to create a changelog.
|
11
|
+
# Default is specified `HEAD`.
|
12
|
+
# @param append [Boolean]
|
13
|
+
# Appends execution result to CHANGELOG.md.
|
14
|
+
# @param prepend [Boolean]
|
15
|
+
# Prepends execution result to CHANGELOG.md.
|
16
|
+
def initialize(from_version: nil, to_version: nil, append: false, prepend: false)
|
17
|
+
@version_editor = VersionEditor.new
|
18
|
+
@changelog_editor = Changelog::Editor.new
|
19
|
+
@from_version = from_version || version_editor.current_version
|
20
|
+
@to_version = to_version
|
21
|
+
@append = append
|
22
|
+
@prepend = prepend
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
attr_reader :version_editor, :changelog_editor,
|
28
|
+
:from_version, :to_version, :append, :prepend
|
29
|
+
|
30
|
+
# Displays changelogs. If specified a `append` or `prepend` option, updates
|
31
|
+
# CHANGELOG.md with generated changelog.
|
32
|
+
#
|
33
|
+
# @return [String] Ganalated changelog
|
34
|
+
def call
|
35
|
+
if append
|
36
|
+
changelog_editor.append!(content: changelog)
|
37
|
+
elsif prepend
|
38
|
+
changelog_editor.prepend!(content: changelog)
|
39
|
+
end
|
40
|
+
changelog
|
41
|
+
end
|
42
|
+
|
43
|
+
# Generate a changelog. The result is memoized.
|
44
|
+
#
|
45
|
+
# @return [String] Ganalated changelog
|
46
|
+
def changelog
|
47
|
+
@changelog ||= Generator.call(from_version: from_version, to_version: to_version)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/gem_comet/cli.rb
CHANGED
@@ -21,10 +21,39 @@ module GemComet
|
|
21
21
|
Release.call(version: version)
|
22
22
|
end
|
23
23
|
|
24
|
-
desc 'changelog', 'Displays changelogs
|
24
|
+
desc 'changelog', 'Displays changelogs'
|
25
|
+
option :from,
|
26
|
+
type: :string,
|
27
|
+
aliases: :f,
|
28
|
+
desc: 'The beginning of version number to create a changelog. ' \
|
29
|
+
'Default is specified current version.'
|
30
|
+
option :to,
|
31
|
+
type: :string,
|
32
|
+
aliases: :t,
|
33
|
+
desc: 'The end of version number to create a changelog. ' \
|
34
|
+
'Default is specified `HEAD`.'
|
35
|
+
option :append,
|
36
|
+
type: :boolean,
|
37
|
+
aliases: :a,
|
38
|
+
default: false,
|
39
|
+
desc: 'Appends execution result to CHANGELOG.md.'
|
40
|
+
option :prepend,
|
41
|
+
type: :boolean,
|
42
|
+
aliases: :p,
|
43
|
+
default: false,
|
44
|
+
desc: 'Prepends execution result to CHANGELOG.md.'
|
25
45
|
def changelog
|
26
|
-
|
27
|
-
|
46
|
+
puts Changelog.call(
|
47
|
+
from_version: options[:from],
|
48
|
+
to_version: options[:to],
|
49
|
+
append: options[:append],
|
50
|
+
prepend: options[:prepend]
|
51
|
+
)
|
52
|
+
end
|
53
|
+
|
54
|
+
desc 'versions', 'Displays version numbers of your gem.'
|
55
|
+
def versions
|
56
|
+
puts `git tag`
|
28
57
|
end
|
29
58
|
|
30
59
|
desc 'version', 'Shows current version'
|
@@ -8,7 +8,7 @@ module GemComet
|
|
8
8
|
@version = version
|
9
9
|
@pr_comet = PrComet.new(base: base_branch, branch: "update/v#{version}")
|
10
10
|
@version_editor = VersionEditor.new
|
11
|
-
@changelog_editor =
|
11
|
+
@changelog_editor = Changelog::Editor.new
|
12
12
|
end
|
13
13
|
|
14
14
|
private
|
@@ -24,11 +24,11 @@ module GemComet
|
|
24
24
|
|
25
25
|
def update_changelog
|
26
26
|
pr_comet.commit ':comet: Update CHANGELOG.md' do
|
27
|
-
changelog =
|
28
|
-
|
27
|
+
changelog = Changelog::Generator.call(
|
28
|
+
from_version: version_editor.current_version,
|
29
29
|
new_version: version
|
30
30
|
)
|
31
|
-
changelog_editor.
|
31
|
+
changelog_editor.prepend!(content: changelog)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
data/lib/gem_comet/version.rb
CHANGED
data/lib/gem_comet.rb
CHANGED
@@ -9,8 +9,9 @@ require 'gem_comet/version'
|
|
9
9
|
require 'gem_comet/service_abstract'
|
10
10
|
require 'gem_comet/config'
|
11
11
|
require 'gem_comet/version_editor'
|
12
|
-
require 'gem_comet/
|
13
|
-
require 'gem_comet/
|
12
|
+
require 'gem_comet/changelog'
|
13
|
+
require 'gem_comet/changelog/editor'
|
14
|
+
require 'gem_comet/changelog/generator'
|
14
15
|
require 'gem_comet/release'
|
15
16
|
require 'gem_comet/release/update_pr'
|
16
17
|
require 'gem_comet/release/release_pr'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gem_comet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ryz310
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-10-
|
11
|
+
date: 2019-10-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pr_comet
|
@@ -219,8 +219,9 @@ files:
|
|
219
219
|
- exe/gem_comet
|
220
220
|
- gem_comet.gemspec
|
221
221
|
- lib/gem_comet.rb
|
222
|
-
- lib/gem_comet/
|
223
|
-
- lib/gem_comet/
|
222
|
+
- lib/gem_comet/changelog.rb
|
223
|
+
- lib/gem_comet/changelog/editor.rb
|
224
|
+
- lib/gem_comet/changelog/generator.rb
|
224
225
|
- lib/gem_comet/cli.rb
|
225
226
|
- lib/gem_comet/config.rb
|
226
227
|
- lib/gem_comet/release.rb
|
@@ -1,26 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module GemComet
|
4
|
-
# Edits CHANGELOG.md file of gem
|
5
|
-
class ChangelogEditor
|
6
|
-
HEADER = "# Change log\n"
|
7
|
-
|
8
|
-
attr_reader :changelog_file_path
|
9
|
-
|
10
|
-
def initialize
|
11
|
-
@changelog_file_path = Config.call.release.changelog_file_path
|
12
|
-
end
|
13
|
-
|
14
|
-
# Appends the content to CHANGELOG.md.
|
15
|
-
#
|
16
|
-
# @param content [String] Character string you want to append
|
17
|
-
def append!(content:)
|
18
|
-
return if changelog_file_path.nil?
|
19
|
-
|
20
|
-
changelog_file = File.read(changelog_file_path)
|
21
|
-
position = changelog_file.index(HEADER) + HEADER.length
|
22
|
-
changelog_file.insert(position, content)
|
23
|
-
File.write(changelog_file_path, changelog_file)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,107 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module GemComet
|
4
|
-
# Generates changelog from git log
|
5
|
-
class ChangelogGenerator < ServiceAbstract
|
6
|
-
attr_reader :last_label, :new_version
|
7
|
-
|
8
|
-
# @param current_version [String] Current version of your gem
|
9
|
-
# @param new_version [String] Next version of your gem
|
10
|
-
def initialize(current_version:, new_version: nil)
|
11
|
-
@last_label = "v#{current_version}"
|
12
|
-
@new_version = new_version || 'NEW'
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
MERGE_COMMIT_TITLE = /Merge pull request #(\d+) from (.+)/.freeze
|
18
|
-
|
19
|
-
# Returns changelogs as markdown format from current version to HEAD commit.
|
20
|
-
#
|
21
|
-
# @return [String] Changelogs as markdown format
|
22
|
-
def call
|
23
|
-
<<~MARKDOWN
|
24
|
-
|
25
|
-
## #{new_version} (#{Date.today.strftime('%b %d, %Y')})
|
26
|
-
|
27
|
-
### Feature
|
28
|
-
### Bugfix
|
29
|
-
### Breaking Change
|
30
|
-
### Misc
|
31
|
-
|
32
|
-
#{changelogs.reverse.join("\n")}
|
33
|
-
|
34
|
-
MARKDOWN
|
35
|
-
end
|
36
|
-
|
37
|
-
# Returns array of changelogs as markdown format.
|
38
|
-
#
|
39
|
-
# @return [Array<String>] Array of changelogs as markdown format
|
40
|
-
def changelogs
|
41
|
-
merge_commits.map do |merge_commit|
|
42
|
-
next unless merge_commit.match?(MERGE_COMMIT_TITLE)
|
43
|
-
|
44
|
-
pull_request_number = extract_pull_request_number(merge_commit)
|
45
|
-
pull_request_url = get_pull_request_url(pull_request_number)
|
46
|
-
description = extract_description(merge_commit) || extract_branch_name(merge_commit)
|
47
|
-
|
48
|
-
"* #{description} ([##{pull_request_number}](#{pull_request_url}))"
|
49
|
-
end.compact
|
50
|
-
end
|
51
|
-
|
52
|
-
# Extracts PR number from merge commit string.
|
53
|
-
#
|
54
|
-
# @param merge_commit [String] The target string
|
55
|
-
# @return [Integer] The pull request number
|
56
|
-
def extract_pull_request_number(merge_commit)
|
57
|
-
MERGE_COMMIT_TITLE.match(merge_commit).captures.first.to_i
|
58
|
-
end
|
59
|
-
|
60
|
-
# Get the PR URL. (e.g. https://github.com/ryz310/gem_comet/pull/1)
|
61
|
-
#
|
62
|
-
# @param pull_request_number [Integer] The target pull request number
|
63
|
-
# @return [String] Returns the URL
|
64
|
-
def get_pull_request_url(pull_request_number)
|
65
|
-
"#{origin_url}/pull/#{pull_request_number}"
|
66
|
-
end
|
67
|
-
|
68
|
-
# Extracts commit desciption from merge commit string.
|
69
|
-
#
|
70
|
-
# @param merge_commit [String] The target string
|
71
|
-
# @return [String] The commit description
|
72
|
-
# @return [nil] Returns `nil` if not exists
|
73
|
-
def extract_description(merge_commit)
|
74
|
-
description = merge_commit.lines.last
|
75
|
-
description&.chomp&.strip unless description.match?(MERGE_COMMIT_TITLE)
|
76
|
-
end
|
77
|
-
|
78
|
-
# Extracts the PR branch name from merge commit string.
|
79
|
-
#
|
80
|
-
# @param merge_commit [String] The target string
|
81
|
-
# @return [String] Branch name
|
82
|
-
def extract_branch_name(merge_commit)
|
83
|
-
MERGE_COMMIT_TITLE.match(merge_commit).captures.last.chomp.strip
|
84
|
-
end
|
85
|
-
|
86
|
-
# Parces the merge commit log, which to separate by each commit.
|
87
|
-
#
|
88
|
-
# @return [Array<String>] Array of git commit log
|
89
|
-
def merge_commits
|
90
|
-
merge_commit_log.split(/^commit \w{40}\n/).reject(&:empty?).map(&:chomp)
|
91
|
-
end
|
92
|
-
|
93
|
-
# Returns only merge commit logs via git command.
|
94
|
-
#
|
95
|
-
# @return [String] Get only merge commit logs
|
96
|
-
def merge_commit_log
|
97
|
-
@merge_commit_log ||= `git log --merges #{last_label}..HEAD`
|
98
|
-
end
|
99
|
-
|
100
|
-
# Returns the git origin URL via git command.
|
101
|
-
#
|
102
|
-
# @return [String] The origin URL
|
103
|
-
def origin_url
|
104
|
-
@origin_url ||= `git remote get-url --push origin`.sub('.git', '').chomp
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|