tukune 0.0.1 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -1
- data/bin/tukune +4 -0
- data/lib/github.rb +137 -0
- data/lib/tukune.rb +1 -1
- data/lib/tukune/cli.rb +15 -11
- data/lib/tukune/version.rb +1 -1
- data/tukune.gemspec +2 -2
- metadata +8 -5
- data/lib/tukune/git/commit.rb +0 -113
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 73d08b6076a382f4cf209647056bfcce7a43f133
|
4
|
+
data.tar.gz: 99146e70bef2a37a55df7cc8b72f83087a4d7485
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c1e7cddf73594634ccb4cddb30f5653b0f2be8f54ccbff0084a9821933aca170dc91d19926e13c645ff85e6a129e5a475072f447563a013df17989a0d431ca84
|
7
|
+
data.tar.gz: 5f0cc1005ff747072627982110e0066fdc7910bc27cf7845f47fbe0dda7103d83a1c0bd052333e9763fa339840992d346ca154a68c6fe2d8289bab005cf7878d
|
data/README.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# Tukune
|
2
|
+
[![Gem Version](https://badge.fury.io/rb/tukune.svg)](https://badge.fury.io/rb/tukune)
|
2
3
|
[![Build Status](https://travis-ci.org/gin0606/tukune.svg?branch=master)](https://travis-ci.org/gin0606/tukune)
|
3
4
|
[![Coverage Status](https://coveralls.io/repos/github/gin0606/tukune/badge.svg?branch=master)](https://coveralls.io/github/gin0606/tukune?branch=master)
|
4
5
|
|
@@ -43,6 +44,11 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
|
43
44
|
|
44
45
|
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).
|
45
46
|
|
47
|
+
|
48
|
+
### TODO
|
49
|
+
- [ ] testing
|
50
|
+
- [ ] refactoring
|
51
|
+
|
46
52
|
## Contributing
|
47
53
|
1. Fork it ( https://github.com/gin0606/tukune/fork )
|
48
54
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
data/bin/tukune
CHANGED
data/lib/github.rb
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
require 'octokit'
|
2
|
+
require 'mem'
|
3
|
+
|
4
|
+
class Github
|
5
|
+
include Mem
|
6
|
+
|
7
|
+
def initialize(repo, current_branch = 'master')
|
8
|
+
@repo = repo
|
9
|
+
@current_branch_name = current_branch
|
10
|
+
@branch = BranchCache.new(repo)
|
11
|
+
end
|
12
|
+
|
13
|
+
def branch(name)
|
14
|
+
current_branch = @branch.read(@current_branch_name)
|
15
|
+
@branch.create(name, current_branch[:object][:sha])
|
16
|
+
end
|
17
|
+
|
18
|
+
def checkout(branch)
|
19
|
+
@current_branch_name = branch
|
20
|
+
@branch.read(@current_branch_name)
|
21
|
+
end
|
22
|
+
|
23
|
+
def add(path)
|
24
|
+
added_files << path
|
25
|
+
end
|
26
|
+
|
27
|
+
def commit(message)
|
28
|
+
current_branch = @branch.read(@current_branch_name)
|
29
|
+
|
30
|
+
tree = create_tree(current_branch[:object][:sha])
|
31
|
+
new_commit = client.create_commit(@repo, message, tree[:sha], current_branch[:object][:sha])
|
32
|
+
|
33
|
+
@branch.update(@current_branch_name, new_commit[:sha])
|
34
|
+
added_files.clear
|
35
|
+
|
36
|
+
new_commit
|
37
|
+
end
|
38
|
+
|
39
|
+
def pull_request(base, title, body)
|
40
|
+
client.create_pull_request(
|
41
|
+
@repo,
|
42
|
+
base,
|
43
|
+
@current_branch_name,
|
44
|
+
title,
|
45
|
+
body
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def create_tree(branch_sha)
|
52
|
+
tree_helper = TreeHelper.new(@repo, branch_sha)
|
53
|
+
added_files.each { |path| tree_helper.add(path) }
|
54
|
+
tree_helper.create_tree
|
55
|
+
end
|
56
|
+
|
57
|
+
def added_files
|
58
|
+
[]
|
59
|
+
end
|
60
|
+
memoize :added_files
|
61
|
+
|
62
|
+
def client
|
63
|
+
::Octokit::Client.new
|
64
|
+
end
|
65
|
+
memoize :client
|
66
|
+
|
67
|
+
class BranchCache
|
68
|
+
include Mem
|
69
|
+
|
70
|
+
def initialize(repo)
|
71
|
+
@repo = repo
|
72
|
+
@cache = {}
|
73
|
+
end
|
74
|
+
|
75
|
+
def create(name, sha)
|
76
|
+
@cache[name] = client.create_ref(@repo, "heads/#{name}", sha)
|
77
|
+
end
|
78
|
+
|
79
|
+
def read(name)
|
80
|
+
@cache[name] = client.ref(@repo, "heads/#{name}")
|
81
|
+
end
|
82
|
+
|
83
|
+
def update(name, sha)
|
84
|
+
@cache[name] = client.update_branch(@repo, name, sha)
|
85
|
+
end
|
86
|
+
|
87
|
+
def delete(name)
|
88
|
+
ref = client.delete_ref(@repo, "heads/#{name}")
|
89
|
+
@cache.delete(name)
|
90
|
+
ref
|
91
|
+
end
|
92
|
+
|
93
|
+
private
|
94
|
+
|
95
|
+
def client
|
96
|
+
::Octokit::Client.new
|
97
|
+
end
|
98
|
+
memoize :client
|
99
|
+
end
|
100
|
+
|
101
|
+
class TreeHelper
|
102
|
+
include Mem
|
103
|
+
|
104
|
+
def initialize(repo, branch_sha)
|
105
|
+
@repo = repo
|
106
|
+
@branch_sha = branch_sha
|
107
|
+
end
|
108
|
+
|
109
|
+
def add(path)
|
110
|
+
content = Base64.encode64(File.read(path))
|
111
|
+
sha = client.create_blob(@repo, content, 'base64')
|
112
|
+
tree << { path: path, mode: '100644', type: 'blob', sha: sha }
|
113
|
+
end
|
114
|
+
|
115
|
+
def create_tree
|
116
|
+
client.create_tree(@repo, tree, base_tree: current_tree[:sha])
|
117
|
+
end
|
118
|
+
|
119
|
+
private
|
120
|
+
|
121
|
+
def current_tree
|
122
|
+
commit = client.commit(@repo, @branch_sha)
|
123
|
+
client.tree(@repo, commit[:commit][:tree][:sha], recursive: true)
|
124
|
+
end
|
125
|
+
memoize :current_tree
|
126
|
+
|
127
|
+
def tree
|
128
|
+
[]
|
129
|
+
end
|
130
|
+
memoize :tree
|
131
|
+
|
132
|
+
def client
|
133
|
+
::Octokit::Client.new
|
134
|
+
end
|
135
|
+
memoize :client
|
136
|
+
end
|
137
|
+
end
|
data/lib/tukune.rb
CHANGED
data/lib/tukune/cli.rb
CHANGED
@@ -2,33 +2,37 @@ module Tukune
|
|
2
2
|
class CLI
|
3
3
|
class << self
|
4
4
|
def start(options)
|
5
|
-
|
5
|
+
config = Tukune.configuration
|
6
|
+
diff = Tukune::Git::Diff.name_status
|
7
|
+
if config.tukune_branch?
|
6
8
|
puts 'this branch is tukune'
|
7
9
|
return
|
8
10
|
end
|
9
|
-
unless
|
11
|
+
unless options[:enable_all] || config.pull_request?
|
10
12
|
puts 'This build is not part of pull request.'
|
11
13
|
puts 'If you want to exec tukune, try to use `--enable-all` option.'
|
12
14
|
return
|
13
15
|
end
|
14
|
-
diff = Tukune::Git::Diff.name_status
|
15
16
|
if diff.nothing_to_commit?
|
16
17
|
puts 'nothing to commit, working directory clean'
|
17
18
|
return
|
18
19
|
end
|
19
|
-
|
20
|
+
|
21
|
+
github = Github.new(config.repository_name, config.current_branch)
|
22
|
+
github.branch(config.feature_branch)
|
23
|
+
github.checkout(config.feature_branch)
|
24
|
+
|
20
25
|
diff.modified_files.each do |f|
|
21
|
-
|
22
|
-
puts "Create #{f}
|
26
|
+
github.add(f)
|
27
|
+
puts "Create #{f}."
|
23
28
|
end
|
24
29
|
diff.added_files.each do |f|
|
25
|
-
|
26
|
-
puts "Create #{f}
|
30
|
+
github.add(f)
|
31
|
+
puts "Create #{f}."
|
27
32
|
end
|
28
|
-
|
29
|
-
c.commit("#{options[:title]}\n\n#{options[:body]}")
|
33
|
+
p github.commit("#{options[:title]}\n\n#{options[:body]}")
|
30
34
|
puts 'Create commit'
|
31
|
-
|
35
|
+
github.pull_request(config.current_branch, options[:title], options[:body])
|
32
36
|
puts 'Create pull request'
|
33
37
|
end
|
34
38
|
end
|
data/lib/tukune/version.rb
CHANGED
data/tukune.gemspec
CHANGED
@@ -15,8 +15,8 @@ Gem::Specification.new do |spec|
|
|
15
15
|
spec.license = 'MIT'
|
16
16
|
|
17
17
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
-
spec.bindir = '
|
19
|
-
spec.executables = spec.files.grep(%r{^
|
18
|
+
spec.bindir = 'bin'
|
19
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
20
20
|
spec.require_paths = ['lib']
|
21
21
|
|
22
22
|
spec.add_dependency 'octokit'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tukune
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- gin0606
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: octokit
|
@@ -111,7 +111,10 @@ dependencies:
|
|
111
111
|
description: Create a pull request if there is a difference via Github API
|
112
112
|
email:
|
113
113
|
- kkgn06@gmail.com
|
114
|
-
executables:
|
114
|
+
executables:
|
115
|
+
- console
|
116
|
+
- setup
|
117
|
+
- tukune
|
115
118
|
extensions: []
|
116
119
|
extra_rdoc_files: []
|
117
120
|
files:
|
@@ -127,13 +130,13 @@ files:
|
|
127
130
|
- bin/console
|
128
131
|
- bin/setup
|
129
132
|
- bin/tukune
|
133
|
+
- lib/github.rb
|
130
134
|
- lib/tukune.rb
|
131
135
|
- lib/tukune/cli.rb
|
132
136
|
- lib/tukune/configuration.rb
|
133
137
|
- lib/tukune/configuration/circle_ci.rb
|
134
138
|
- lib/tukune/configuration/default.rb
|
135
139
|
- lib/tukune/configuration/travis_ci.rb
|
136
|
-
- lib/tukune/git/commit.rb
|
137
140
|
- lib/tukune/git/diff.rb
|
138
141
|
- lib/tukune/version.rb
|
139
142
|
- tukune.gemspec
|
data/lib/tukune/git/commit.rb
DELETED
@@ -1,113 +0,0 @@
|
|
1
|
-
require 'octokit'
|
2
|
-
require 'mem'
|
3
|
-
|
4
|
-
module Tukune
|
5
|
-
module Git
|
6
|
-
class Commit
|
7
|
-
include Mem
|
8
|
-
|
9
|
-
def initialize(configuration)
|
10
|
-
@repository_name = configuration.repository_name
|
11
|
-
@current_branch = configuration.current_branch
|
12
|
-
@feature_branch = configuration.feature_branch
|
13
|
-
end
|
14
|
-
|
15
|
-
def add(file_path)
|
16
|
-
content = Base64.encode64(File.read(file_path))
|
17
|
-
sha = client.create_blob(@repository_name, content, 'base64')
|
18
|
-
blobs[file_path] = sha
|
19
|
-
end
|
20
|
-
|
21
|
-
def delete(file_path)
|
22
|
-
delete_files << file_path
|
23
|
-
end
|
24
|
-
|
25
|
-
def commit(message)
|
26
|
-
tree = if delete_files.empty?
|
27
|
-
create_tree(changed_blobs)
|
28
|
-
else
|
29
|
-
create_tree_with_delete_files(changed_blobs)
|
30
|
-
end
|
31
|
-
|
32
|
-
commits << client.create_commit(@repository_name, message, tree[:sha], current_branch[:object][:sha])
|
33
|
-
end
|
34
|
-
|
35
|
-
def pull_request(title, body)
|
36
|
-
create_feature_branch(@feature_branch, commits.last[:sha])
|
37
|
-
client.create_pull_request(
|
38
|
-
@repository_name,
|
39
|
-
@current_branch,
|
40
|
-
@feature_branch,
|
41
|
-
title,
|
42
|
-
body
|
43
|
-
)
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
|
48
|
-
def create_tree(changed_blobs)
|
49
|
-
client.create_tree(@repository_name, changed_blobs, base_tree: current_tree[:sha])
|
50
|
-
end
|
51
|
-
|
52
|
-
# FIXME: can not commit correctly if exist delete_files
|
53
|
-
def create_tree_with_delete_files(changed_blobs)
|
54
|
-
changed_files = blobs.map { |path, _| path }
|
55
|
-
|
56
|
-
# trees = current_tree[:tree].map(&:to_h)
|
57
|
-
# trees = current_tree[:tree].map(&:to_h).delete_if { |blob| delete_files.include?(blob[:path]) }
|
58
|
-
trees = current_tree[:tree].map(&:to_h)
|
59
|
-
.delete_if { |blob| delete_files.include?(blob[:path]) }
|
60
|
-
.delete_if { |blob| changed_files.include?(blob[:path]) }
|
61
|
-
trees += changed_blobs
|
62
|
-
|
63
|
-
client.create_tree(@repository_name, trees)
|
64
|
-
end
|
65
|
-
|
66
|
-
def current_tree
|
67
|
-
commit = client.commit(@repository_name, current_branch[:object][:sha])
|
68
|
-
client.tree(@repository_name, commit[:commit][:tree][:sha], recursive: true)
|
69
|
-
end
|
70
|
-
memoize :current_tree
|
71
|
-
|
72
|
-
def current_branch
|
73
|
-
client.ref(@repository_name, "heads/#{@current_branch}")
|
74
|
-
end
|
75
|
-
memoize :current_branch
|
76
|
-
|
77
|
-
def create_feature_branch(name, sha)
|
78
|
-
client.create_ref(@repository_name, "heads/#{name}", sha)
|
79
|
-
end
|
80
|
-
|
81
|
-
def commits
|
82
|
-
[]
|
83
|
-
end
|
84
|
-
memoize :commits
|
85
|
-
|
86
|
-
def blobs
|
87
|
-
{}
|
88
|
-
end
|
89
|
-
memoize :blobs
|
90
|
-
|
91
|
-
def changed_blobs
|
92
|
-
blobs.map do |file_path, sha|
|
93
|
-
{
|
94
|
-
path: file_path,
|
95
|
-
mode: '100644',
|
96
|
-
type: 'blob',
|
97
|
-
sha: sha
|
98
|
-
}
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
def delete_files
|
103
|
-
[]
|
104
|
-
end
|
105
|
-
memoize :delete_files
|
106
|
-
|
107
|
-
def client
|
108
|
-
::Octokit::Client.new
|
109
|
-
end
|
110
|
-
memoize :client
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|