tbgit 1.0.4 → 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/tbgit +9 -7
- data/lib/score_parser.rb +38 -0
- data/lib/scoresheet.txt +3 -0
- data/lib/tbgit/version.rb +1 -1
- data/lib/tbgit.rb +84 -49
- data/tbgit.gemspec +2 -0
- metadata +31 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc190fce7c3defc7df4c29ebc7f0ed09c76365de
|
4
|
+
data.tar.gz: 6c5ec3f084df04208c75c30c77655e4a2506a0db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 236c2f3c28a0a54c77a1688380689ea77730095a9c6e3fe308d440fdaeaa3585c20f7a690aeb8166d713d9920f0e6fb7ccc3fd3cd9b948f603c27262e3350722
|
7
|
+
data.tar.gz: e0d93db6c08c334a27bcd118c240d914b87bc09cecf5172a1bce711cecba58af240dbb674ee900d1efa93f404e3b2c8f320cf01582399bfc1a6464e8cb01cb4c
|
data/bin/tbgit
CHANGED
@@ -8,7 +8,7 @@ helptext = HelpText.new
|
|
8
8
|
|
9
9
|
case ARGV[0]
|
10
10
|
when "setup"
|
11
|
-
tbgit.gather
|
11
|
+
tbgit.gather(ARGV[1],ARGV[2],ARGV[3])
|
12
12
|
|
13
13
|
tbgit.add_remotes
|
14
14
|
tbgit.spacer
|
@@ -26,24 +26,26 @@ when "setup"
|
|
26
26
|
tbgit.git_branch
|
27
27
|
tbgit.spacer
|
28
28
|
when "pull"
|
29
|
-
tbgit.update_repos(ARGV[0])
|
29
|
+
tbgit.update_repos(ARGV[0],ARGV[1])
|
30
30
|
when "push"
|
31
|
-
tbgit.update_repos(ARGV[0])
|
31
|
+
tbgit.update_repos(ARGV[0],ARGV[1])
|
32
|
+
when "push-origin"
|
33
|
+
tbgit.push_origin(ARGV[1])
|
32
34
|
when "merge"
|
33
|
-
tbgit.merge_and_commit
|
35
|
+
tbgit.merge_and_commit(ARGV[1],ARGV[2],ARGV[3])
|
34
36
|
when "status"
|
35
37
|
tbgit.git_status
|
36
38
|
when "each"
|
37
39
|
tbgit.on_each_gather
|
38
40
|
when "spec"
|
39
|
-
tbgit.spec
|
41
|
+
tbgit.spec(ARGV[1],ARGV[2],ARGV[3],ARGV[4],ARGV[5])
|
40
42
|
when "add-remotes"
|
41
|
-
tbgit.gather
|
43
|
+
tbgit.gather(ARGV[1],ARGV[2],ARGV[3])
|
42
44
|
tbgit.spacer
|
43
45
|
|
44
46
|
tbgit.add_remotes
|
45
47
|
when "create-locals"
|
46
|
-
tbgit.gather
|
48
|
+
tbgit.gather(ARGV[1],ARGV[2],ARGV[3])
|
47
49
|
tbgit.spacer
|
48
50
|
|
49
51
|
tbgit.create_local_tracking_remotes
|
data/lib/score_parser.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
class Parser
|
5
|
+
|
6
|
+
def json_parse(string)
|
7
|
+
JSON.parse(string)
|
8
|
+
end
|
9
|
+
|
10
|
+
def score_parse(masterfolder) #main parsing method
|
11
|
+
# Open master scoresheet file for writing
|
12
|
+
ss = File.new(masterfolder + "/scoresheet.txt", "w")
|
13
|
+
|
14
|
+
# Open each .rb file in directory and add username and failure count to scoresheet
|
15
|
+
Dir.glob(masterfolder + '/*') do |student_result|
|
16
|
+
if File.basename(student_result) != "scoresheet.txt"
|
17
|
+
# Parse file into JSON and extract failure count
|
18
|
+
file = File.open(student_result, "r")
|
19
|
+
contents = file.read
|
20
|
+
json = json_parse(contents)
|
21
|
+
failure_count = json['summary']['failure_count']
|
22
|
+
|
23
|
+
# Set filename to just username of student
|
24
|
+
filename = File.basename(student_result)
|
25
|
+
filename.chomp(File.extname(filename))
|
26
|
+
|
27
|
+
# Write username and failure count to score sheet
|
28
|
+
ss << filename
|
29
|
+
ss << ' '
|
30
|
+
ss << failure_count
|
31
|
+
ss << "\n"
|
32
|
+
file.close
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
ss.close
|
37
|
+
end
|
38
|
+
end
|
data/lib/scoresheet.txt
ADDED
data/lib/tbgit/version.rb
CHANGED
data/lib/tbgit.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "tbgit/version"
|
2
2
|
require "tempfile"
|
3
|
+
require "score_parser"
|
3
4
|
|
4
5
|
module Main
|
5
6
|
|
@@ -10,14 +11,16 @@ module Main
|
|
10
11
|
end
|
11
12
|
|
12
13
|
#confirms a given message
|
13
|
-
def confirm(message)
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
14
|
+
def confirm(flag,message)
|
15
|
+
if flag != '-y'
|
16
|
+
print message + " (y/n) "
|
17
|
+
response = $stdin.gets.chomp
|
18
|
+
if response == 'y'
|
19
|
+
#do nothing
|
20
|
+
else
|
21
|
+
exit
|
22
|
+
end
|
23
|
+
end
|
21
24
|
end
|
22
25
|
|
23
26
|
#three simple git methods
|
@@ -35,24 +38,36 @@ module Main
|
|
35
38
|
end
|
36
39
|
|
37
40
|
#gather necessary information
|
38
|
-
def gather
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
41
|
+
def gather(students_file, organization, reponame)
|
42
|
+
if students_file == ""
|
43
|
+
puts 'Students file |../students|:'
|
44
|
+
@students_file = $stdin.gets.chomp
|
45
|
+
if @students_file == ""
|
46
|
+
@students_file = "../students"
|
47
|
+
end
|
48
|
+
else
|
49
|
+
@students_file = students_file
|
50
|
+
end
|
51
|
+
|
52
|
+
if organization == ""
|
53
|
+
puts 'Organization name |yale-stc-developer-curriculum|:'
|
54
|
+
@organization = $stdin.gets.chomp
|
55
|
+
if @organization == ""
|
56
|
+
@organization = "yale-stc-developer-curriculum"
|
57
|
+
end
|
58
|
+
else
|
59
|
+
@organization = organization
|
60
|
+
end
|
61
|
+
|
62
|
+
if reponame == ""
|
63
|
+
puts 'Student Repo Name |TechBootcampHomework|:'
|
64
|
+
@reponame = $stdin.gets.chomp
|
65
|
+
if @reponame == ""
|
66
|
+
@reponame = "TechBootcampHomework"
|
67
|
+
end
|
68
|
+
else
|
69
|
+
@reponame = reponame
|
70
|
+
end
|
56
71
|
end
|
57
72
|
|
58
73
|
#update remotes
|
@@ -63,7 +78,6 @@ module Main
|
|
63
78
|
|
64
79
|
#add each student repository as a remote
|
65
80
|
def add_remotes
|
66
|
-
confirm("Each student repository will be added as a remote. Continue?")
|
67
81
|
students = IO.readlines(@students_file)
|
68
82
|
students.each do |username|
|
69
83
|
username.delete!("\n")
|
@@ -77,7 +91,6 @@ module Main
|
|
77
91
|
|
78
92
|
#create local branches to track remote student repositories
|
79
93
|
def create_local_tracking_remotes
|
80
|
-
confirm("Local branches will be created to track remote student repositories. Continue?")
|
81
94
|
students = IO.readlines(@students_file)
|
82
95
|
students.each do |username|
|
83
96
|
username.delete!("\n")
|
@@ -102,25 +115,35 @@ module Main
|
|
102
115
|
end
|
103
116
|
|
104
117
|
#used for push / pull
|
105
|
-
def update_repos(pushpull)
|
118
|
+
def update_repos(pushpull,flag)
|
106
119
|
if pushpull == "push"
|
107
|
-
confirm("Each local student branch will be pushed to their remote master branch. Continue?")
|
120
|
+
confirm(flag,"Each local student branch will be pushed to their remote master branch. Continue?")
|
108
121
|
on_each_exec(["git push <branch> <branch>:master"])
|
109
122
|
else
|
110
|
-
confirm("Each remote student master branch will be pulled to the local branch. Continue?")
|
123
|
+
confirm(flag,"Each remote student master branch will be pulled to the local branch. Continue?")
|
111
124
|
on_each_exec(["git pull <branch> master"])
|
112
125
|
end
|
113
126
|
end
|
114
127
|
|
128
|
+
def push_origin(flag) #push all student branches to our origin
|
129
|
+
confirm(flag,"Each local student branch will be pushed to the the origin remote. Continue?")
|
130
|
+
on_each_exec(["git push origin <branch>"])
|
131
|
+
end
|
132
|
+
|
115
133
|
#merges from master (or another branch) to each student branch and commits the changes
|
116
|
-
def merge_and_commit
|
134
|
+
def merge_and_commit(flag,merge_branch,message)
|
117
135
|
|
118
|
-
confirm("A merge and commit will be performed on each local student branch (from the branch you specify). Continue?")
|
119
|
-
|
120
|
-
merge_branch
|
136
|
+
confirm(flag,"A merge and commit will be performed on each local student branch (from the branch you specify). Continue?")
|
137
|
+
|
138
|
+
if merge_branch != ""
|
139
|
+
puts "Merge from branch: "
|
140
|
+
merge_branch = $stdin.gets.chomp
|
141
|
+
end
|
121
142
|
|
122
|
-
|
123
|
-
|
143
|
+
if message != ""
|
144
|
+
puts "Commit Message: "
|
145
|
+
message = $stdin.gets.chomp
|
146
|
+
end
|
124
147
|
|
125
148
|
commands = ["git merge --no-commit " + merge_branch.to_s,
|
126
149
|
"git add --all",
|
@@ -177,25 +200,34 @@ module Main
|
|
177
200
|
on_each_exec(["git status <branch>"])
|
178
201
|
end
|
179
202
|
|
180
|
-
def spec
|
181
|
-
|
182
|
-
specfile
|
203
|
+
def spec(flag,specfile,studentcopy,mastercopy,commit_message)
|
204
|
+
|
205
|
+
if specfile==""
|
206
|
+
puts "Please specify the relative path from your pwd to the rspec file you would like to spec, eg. 'hw1/spec/spec.rb'"
|
207
|
+
specfile = $stdin.gets.chomp
|
208
|
+
end
|
183
209
|
|
184
|
-
|
185
|
-
|
186
|
-
|
210
|
+
if studentcopy==""
|
211
|
+
puts "Where would you like to save each student's individual results?"
|
212
|
+
puts "**Must be inside the student's repo directory, eg. 'hw1/spec/results.txt'**"
|
213
|
+
studentcopy = $stdin.gets.chomp
|
214
|
+
end
|
187
215
|
|
188
|
-
|
189
|
-
|
190
|
-
|
216
|
+
if mastercopy==""
|
217
|
+
puts "In which folder would you like to save a copy of all results?"
|
218
|
+
puts "**Must be outside the student's repo directory, eg. '../results'**"
|
219
|
+
mastercopy = $stdin.gets.chomp
|
220
|
+
end
|
191
221
|
|
192
222
|
puts "mkdir " + mastercopy
|
193
223
|
system "mkdir " + mastercopy
|
194
224
|
|
195
|
-
|
196
|
-
|
225
|
+
if commit_message==""
|
226
|
+
puts "Commit message (commiting each student's results to their repo):"
|
227
|
+
commit_message = $stdin.gets.chomp
|
228
|
+
end
|
197
229
|
|
198
|
-
confirm("'rspec " + specfile + "' will be executed on each student's local branch. \
|
230
|
+
confirm(flag,"'rspec " + specfile + "' will be executed on each student's local branch. \
|
199
231
|
Individual results will be saved to " + studentcopy + " and master results to " + mastercopy + ". Continue?")
|
200
232
|
|
201
233
|
on_each_exec(["rspec " +specfile + " > " + studentcopy, #overwrite
|
@@ -204,6 +236,9 @@ module Main
|
|
204
236
|
"git commit -am '" + commit_message + "'",
|
205
237
|
"git push <branch> <branch>:master"])
|
206
238
|
|
239
|
+
my_parser = Parser.new
|
240
|
+
my_parser.score_parse(mastercopy)
|
241
|
+
|
207
242
|
end
|
208
243
|
|
209
244
|
end #class
|
data/tbgit.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tbgit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Charlie Proctor
|
@@ -38,6 +38,34 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: json
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
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: rubygems
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
41
69
|
description: ''
|
42
70
|
email:
|
43
71
|
- charlie@charlieproctor.com
|
@@ -53,6 +81,8 @@ files:
|
|
53
81
|
- Rakefile
|
54
82
|
- bin/tbgit
|
55
83
|
- lib/helptext.rb
|
84
|
+
- lib/score_parser.rb
|
85
|
+
- lib/scoresheet.txt
|
56
86
|
- lib/tbgit.rb
|
57
87
|
- lib/tbgit/version.rb
|
58
88
|
- tbgit.gemspec
|