ghedsh 1.1.40 → 2.3.8

Sign up to get free protection for your applications and to get access to all the features.
data/lib/interface.rb CHANGED
@@ -1,764 +1,102 @@
1
- #!/usr/bin/env ruby
2
- require 'require_all'
3
- require 'json'
4
1
  require 'readline'
5
- require 'octokit'
6
2
  require 'optparse'
7
- require 'actions/help'
8
- require 'actions/orgs'
9
- require 'actions/repo'
10
- require 'actions/system'
11
- require 'actions/teams'
12
- require 'actions/user'
13
3
  require 'version'
14
-
15
- USER=1
16
- ORGS=2
17
- USER_REPO=10
18
- ORGS_REPO=3
19
- TEAM=4
20
- ASSIG=6
21
- TEAM_REPO=5
4
+ require 'context'
5
+ require 'helpers'
22
6
 
23
7
  class Interface
24
- attr_reader :option, :sysbh
25
- attr_accessor :config
26
- attr_accessor :client
27
- attr_accessor :deep
28
- attr_accessor :memory
29
- attr_reader :orgs_list,:repos_list, :teamlist, :orgs_repos, :teams_repos, :repo_path, :issues_list
30
-
31
- def initialize
32
- @sysbh=Sys.new()
33
- @repos_list=[]; @orgs_repos=[]; @teams_repos=[]; @orgs_list=[]; @teamlist=[]
34
- @repo_path=''
8
+ def initialize; end
35
9
 
36
- options=@sysbh.parse
10
+ def parse
11
+ options = { user: nil, token: nil, path: nil }
37
12
 
38
- trap("SIGINT") { throw :ctrl_c}
39
- catch :ctrl_c do
40
- begin
41
- if options[:user]==nil && options[:token]==nil && options[:path]!=nil
42
- self.run(options[:path],options[:token],options[:user])
43
- else
44
- self.run("#{ENV['HOME']}/.ghedsh",options[:token],options[:user])
45
- end
46
- rescue SystemExit, Interrupt
47
- raise
48
- rescue Exception => e
49
- puts "exit"
50
- puts e
13
+ parser = OptionParser.new do |opts|
14
+ opts.banner = "Usage: ghedsh [options]\nWith no options it runs with default configuration. Configuration files are being set in #{ENV['HOME']}/.ghedsh\n"
15
+ opts.on('-t', '--token token', 'Provides a github access token by argument.') do |token|
16
+ options[:token] = token
51
17
  end
52
- end
53
- end
54
-
55
- def prompt()
56
- case
57
- when @deep == USER then return @config["User"]+"> "
58
- when @deep == USER_REPO
59
- if @repo_path!=""
60
- @config["User"]+">"+ "\e[31m#{@config["Repo"]}\e[0m"+">"+"#{@repo_path}"+"> "
61
- else
62
- return @config["User"]+">"+ "\e[31m#{@config["Repo"]}\e[0m"+"> "
63
- end
64
- when @deep == ORGS then return @config["User"]+">"+ "\e[34m#{@config["Org"]}\e[0m"+"> "
65
- when @deep == ASSIG then return @config["User"]+">"+ "\e[34m#{@config["Org"]}\e[0m"+">"+"\e[35m#{@config["Assig"]}\e[0m"+"> "
66
- when @deep == TEAM then return @config["User"]+">"+"\e[34m#{@config["Org"]}\e[0m"+">"+"\e[32m#{@config["Team"]}\e[0m"+"> "
67
- when @deep == TEAM_REPO
68
- if @repo_path!=""
69
- return @config["User"]+">"+"\e[34m#{@config["Org"]}\e[0m"+">"+"\e[32m#{@config["Team"]}\e[0m"+">"+"\e[31m#{@config["Repo"]}\e[0m"+">"+"#{@repo_path}"+"> "
70
- else
71
- return @config["User"]+">"+"\e[34m#{@config["Org"]}\e[0m"+">"+"\e[32m#{@config["Team"]}\e[0m"+">"+"\e[31m#{@config["Repo"]}\e[0m"+"> "
72
- end
73
- when @deep == ORGS_REPO then
74
- if @repo_path!=""
75
- return @config["User"]+">"+"\e[34m#{@config["Org"]}\e[0m"+">"+"\e[31m#{@config["Repo"]}\e[0m"+">"+"#{@repo_path}"+"> "
76
- else
77
- return @config["User"]+">"+"\e[34m#{@config["Org"]}\e[0m"+">"+"\e[31m#{@config["Repo"]}\e[0m"+"> "
78
- end
79
- end
80
- end
81
-
82
- def help(opcd)
83
- h=HelpM.new()
84
- if opcd.size>1
85
- h.context(opcd[1..opcd.size-1],@deep)
86
- else
87
- case
88
- when @deep == USER
89
- h.user()
90
- when @deep == ORGS
91
- h.org()
92
- when @deep == ORGS_REPO
93
- h.org_repo()
94
- when @deep == USER_REPO
95
- h.user_repo()
96
- when @deep == TEAM
97
- h.orgs_teams()
98
- when @deep == TEAM_REPO
99
- h.team_repo()
100
- when @deep == ASSIG
101
- h.asssig()
18
+ opts.on('-c', '--configpath path', 'Give your own path for GHEDSH configuration files') do |path|
19
+ options[:configpath] = path
102
20
  end
103
- end
104
- end
105
-
106
- #Go back to any level
107
- def cdback(returnall)
108
- if returnall!=true
109
- case
110
- when @deep == ORGS
111
- @config["Org"]=nil
112
- @deep=1
113
- @orgs_repos=[]
114
- when @deep == ORGS_REPO
115
- if @repo_path==""
116
- @config["Repo"]=nil
117
- @deep=2
118
- else
119
- aux=@repo_path.split("/")
120
- aux.pop
121
- if aux.empty?
122
- @repo_path=""
123
- else
124
- @repo_path=aux.join("/")
125
- end
126
- end
127
- when @deep == USER_REPO
128
- if @repo_path==""
129
- @config["Repo"]=nil
130
- @deep=1
131
- else
132
- aux=@repo_path.split("/")
133
- aux.pop
134
- if aux.empty?
135
- @repo_path=""
136
- else
137
- @repo_path=aux.join("/")
138
- end
139
- end
140
- when @deep == TEAM
141
- @config["Team"]=nil
142
- @config["TeamID"]=nil
143
- @teams_repos=[]
144
- @deep=ORGS
145
- when @deep == ASSIG
146
- @deep=ORGS
147
- @config["Assig"]=nil
148
- when @deep == TEAM_REPO
149
- if @repo_path==""
150
- @config["Repo"]=nil
151
- @deep=TEAM
152
- else
153
- aux=@repo_path.split("/")
154
- aux.pop
155
- if aux.empty?
156
- @repo_path=""
157
- else
158
- @repo_path=aux.join("/")
159
- end
160
- end
21
+ opts.on('-u', '--user user', 'Change your user from your users list') do |user|
22
+ options[:user] = user
161
23
  end
162
- else
163
- @config["Org"]=nil
164
- @config["Repo"]=nil
165
- @config["Team"]=nil
166
- @config["TeamID"]=nil
167
- @config["Assig"]=nil
168
- @deep=1
169
- @orgs_repos=[]; @teams_repos=[]
170
- @repo_path="";
171
- end
172
- end
173
-
174
- #Go to the path, depends with the scope
175
- #if you are in user scope, first searchs Orgs then Repos, etc.
176
- def cd(path)
177
- if @deep==ORGS_REPO || @deep==USER_REPO || @deep==TEAM_REPO
178
- self.cdrepo(path)
179
- end
180
- o=Organizations.new
181
- path_split=path.split("/")
182
- if path_split.size==1 ##cd con path simple
183
- case
184
- when @deep==USER
185
- @orgs_list=o.read_orgs(@client)
186
- aux=@orgs_list
187
- if aux.one?{|aux| aux==path}
188
- @config["Org"]=path
189
- @teamlist=Teams.new.read_teamlist(@client,@config)
190
- @sysbh.add_history_str(2,o.get_assigs(@client,@config,false))
191
- @sysbh.add_history_str(1,@teamlist)
192
- @deep=2
193
- else
194
- #puts "\nNo organization is available with that name"
195
- self.set(path)
196
- end
197
- when @deep == ORGS
198
- if @teamlist==[]
199
- @teamlist=Teams.new.read_teamlist(@client,@config)
200
- end
201
- aux=@teamlist
202
-
203
- if aux[path]!=nil
204
- @config["Team"]=path
205
- @config["TeamID"]=@teamlist[path]
206
- @deep=TEAM
207
- else
208
- #puts "\nNo team is available with that name"
209
- if cdassig(path)==false
210
- self.set(path)
211
- end
212
- end
213
- when @deep == TEAM
214
- self.set(path)
24
+ opts.on('-v', '--version', 'Show the current version of GHEDSH') do
25
+ puts "GitHub Education Shell v#{Ghedsh::VERSION}"
26
+ exit
215
27
  end
216
- end
217
- end
218
-
219
- #set in the given path repository, first search in the list, then do the github query if list is empty
220
- def set(path)
221
- reposlist=Repositories.new()
222
-
223
- case
224
- when @deep==USER
225
- @config["Repo"]=path
226
- if @repos_list.empty? == false
227
- reposlist=@repos_list
228
- else
229
- reposlist=reposlist.get_repos_list(@client,@config,@deep)
230
- end
231
- if reposlist.one?{|aux| aux==path}
232
- @deep=USER_REPO
233
- puts "Set in #{@config["User"]} repository: #{path}\n\n"
234
- end
235
- when @deep==ORGS
236
-
237
- if @orgs_repos.empty? == false
238
- reposlist=@orgs_repos
239
- else
240
- reposlist=reposlist.get_repos_list(@client,@config,@deep)
241
- end
242
- if reposlist.one?{|aux| aux==path}
243
- @config["Repo"]=path
244
- @deep=ORGS_REPO
245
- puts "Set in #{@config["Org"]} repository: #{path}\n\n"
28
+ opts.on('-h', '--help', 'Displays Help') do
29
+ puts opts
30
+ exit
246
31
  end
247
- when @deep==TEAM
248
-
249
- if @teams_repos.empty? == false
250
- reposlist=@teams_repos
251
- else
252
- reposlist=reposlist.get_repos_list(@client,@config,@deep)
253
- end
254
- if reposlist.one?{|aux| aux==path}
255
- @config["Repo"]=path
256
- @deep=TEAM_REPO
257
- puts "Set in #{@config["Team"]} repository: #{path}\n\n"
258
- end
259
- end
260
- #if @deep==USER || @deep==ORGS || @deep==TEAM then puts "No repository is available with that name\n\n" end
261
- if @deep==USER || @deep==ORGS || @deep==TEAM
262
- puts "\nNo organization is available with that name"
263
- puts "\nNo team is available with that name"
264
- puts "No repository is available with that name\n\n"
265
- end
266
- end
267
-
268
- def cdrepo(path)
269
- r=Repositories.new()
270
- list=[]
271
-
272
- if @repo_path==""
273
- newpath=path
274
- else
275
- newpath=@repo_path+"/"+path
276
- end
277
- list=r.get_files(@client,@config,newpath,false,@deep)
278
- if list==nil
279
- puts "Wrong path name"
280
- else
281
- @repo_path=newpath
282
32
  end
283
- end
284
33
 
285
- def cdassig(path)
286
- o=Organizations.new()
287
- list=o.get_assigs(@client,@config,true)
288
- if list.one?{|aux| aux==path}
289
- @deep=ASSIG
290
- puts "Set in #{@config["Org"]} assignment: #{path}\n\n"
291
- @config["Assig"]=path
292
- return true
293
- else
294
- puts "No assignment is available with that name"
295
- return false
34
+ begin
35
+ parser.parse!
36
+ rescue StandardError
37
+ puts 'Argument error. Use ghedsh -h or ghedsh --help for more information about the usage of this program'
38
+ exit
296
39
  end
40
+ options
297
41
  end
298
42
 
299
- def orgs()
300
- case
301
- when @deep==USER
302
- @sysbh.add_history_str(2,Organizations.new.show_orgs(@client,@config))
303
- when @deep==ORGS
304
- Organizations.new.show_orgs(@client,@config)
305
- end
306
- end
43
+ def start
44
+ spinner = custom_spinner("Starting ghedsh CLI")
45
+ options = parse
307
46
 
308
- def people()
309
- case
310
- when @deep==ORGS
311
- @sysbh.add_history_str(2,Organizations.new.show_organization_members_bs(@client,@config))
312
- when @deep==TEAM
313
- @sysbh.add_history_str(2,Teams.new.show_team_members_bs(@client,@config))
314
- end
315
- end
47
+ trap('SIGINT') { puts; throw :ctrl_c }
316
48
 
317
- def repos(all)
318
- repo=Repositories.new()
319
- case
320
- when @deep == USER
321
- if @repos_list.empty?
322
- if all==false
323
- list=repo.show_repos(@client,@config,USER,nil)
324
- @sysbh.add_history_str(2,list)
325
- @repos_list=list
326
- else
327
- list=repo.get_repos_list(@client,@config,USER)
328
- @sysbh.add_history_str(2,list)
329
- @repos_list=list
330
- puts list
331
- end
332
- else
333
- @sysbh.showcachelist(@repos_list,nil)
334
- end
335
- when @deep ==ORGS
336
- if @orgs_repos.empty?
337
- if all==false
338
- list=repo.show_repos(@client,@config,ORGS,nil)
339
- @sysbh.add_history_str(2,list)
340
- @orgs_repos=list
341
- else
342
- #list=repo.show_repos(@client,@config,ORGS)
343
- list=repo.get_repos_list(@client,@config,ORGS)
344
- @sysbh.add_history_str(2,list)
345
- @orgs_repos=list
346
- puts list
347
- end
348
- else
349
- @sysbh.showcachelist(@orgs_repos,nil)
350
- end
351
- when @deep==TEAM
352
- if @teams_repos.empty?
353
- if all==false
354
- list=repo.show_repos(@client,@config,TEAM,nil)
355
- @sysbh.add_history_str(2,list)
356
- @teams_repos=list
357
- else
358
- list=repo.show_repos(@client,@config,TEAM)
359
- @sysbh.add_history_str(2,list)
360
- @repos_list=list
361
- puts list
362
- end
49
+ catch :ctrl_c do
50
+ begin
51
+ if options[:user].nil? && options[:token].nil? && !options[:path].nil?
52
+ @shell_enviroment = ShellContext.new(options[:user], options[:path], options[:token])
363
53
  else
364
- @sysbh.showcachelist(@teams_repos,nil)
54
+ @shell_enviroment = ShellContext.new(options[:user], "#{ENV['HOME']}/.ghedsh", options[:token])
365
55
  end
366
- end
367
- end
368
-
369
- def get_teamlist(data)
370
- list=Array.new
371
- for i in 0..data.size-1
372
- list.push(@teamlist[data[i]])
373
- end
374
- return list
375
- end
376
-
377
- def commits()
378
- c=Repositories.new
379
- if @deep==ORGS_REPO || @deep==USER_REPO || @deep==TEAM_REPO
380
- c.show_commits(@client,@config,@deep)
381
- end
382
- print "\n"
383
- end
384
-
385
- def show_forks()
386
- c=Repositories.new
387
- if @deep==ORGS_REPO || @deep==USER_REPO || @deep==TEAM_REPO
388
- c.show_forks(@client,@config,@deep)
389
- end
390
- end
391
-
392
- def collaborators()
393
- c=Repositories.new
394
- if @deep==ORGS_REPO || @deep==USER_REPO || @deep==TEAM_REPO
395
- c.show_collaborators(@client,@config,@deep)
396
- end
397
- end
398
-
399
- #Main program
400
- def run(config_path, argv_token,user)
401
- ex=1
402
- opscript=[]
403
- @sysbh.write_initial_memory()
404
- HelpM.new.welcome()
405
- o=Organizations.new
406
- t=Teams.new
407
- r=Repositories.new
408
- s=Sys.new
409
- u=User.new
410
- # orden de búsqueda: ~/.ghedsh.json ./ghedsh.json ENV["ghedsh"] --configpath path/to/file.json
411
-
412
- #control de carga de parametros en el logueo de la aplicacion
413
- if user!=nil
414
- @config=s.load_config_user(config_path,user)
415
- @client=s.client
416
- if @config==nil
417
- ex=0
56
+ spinner.stop
57
+ run
58
+ rescue SystemExit, Interrupt
59
+ raise
60
+ rescue Exception => e
61
+ puts 'exit'
62
+ puts e
418
63
  end
419
- @deep=USER
420
- else
421
- @config=s.load_config(config_path,argv_token) #retorna la configuracion ya guardada anteriormente
422
- @client=s.client
423
- @deep=s.return_deep(config_path)
424
- #if @deep==ORGS then @teamlist=t.get_teamlist end #solucion a la carga de las ids de los equipos de trabajo
425
- end
426
- @sysbh.load_memory(config_path,@config)
427
- #@deep=USER
428
- if @client!=nil
429
- @sysbh.add_history_str(2,Organizations.new.read_orgs(@client))
430
64
  end
65
+ end
431
66
 
432
- while ex != 0
433
-
434
- if opscript.empty?
435
- begin
436
- op=Readline.readline(self.prompt,true).strip
437
- opcd=op.split
438
- rescue
439
- op="exit";opcd="exit"
440
- end
441
- else
442
- op=opscript[0]
443
- opcd=op.split
444
- opscript.shift
445
- end
446
-
447
- case
448
- when op == "exit" then ex=0
449
- @sysbh.save_memory(config_path,@config)
450
- s.save_cache(config_path,@config)
451
- s.remove_temp("#{ENV['HOME']}/.ghedsh/temp")
452
- when op.include?("help") && opcd[0]=="help" then self.help(opcd)
453
- when op == "orgs" then self.orgs()
454
- when op == "cd .."
455
- if @deep==ORGS then t.clean_groupsteams() end ##cleans groups cache
456
- self.cdback(false)
457
- when op.include?("cd assig") && opcd[0]=="cd" && opcd[1]=="assig" && opcd.size==3
458
- if @deep==ORGS
459
- self.cdassig(opcd[2])
460
- end
461
- when op == "people" then self.people()
462
- when op == "teams"
463
- if @deep==ORGS
464
- t.show_teams_bs(@client,@config)
465
- end
466
- when op == "commits" then self.commits()
467
- when op == "issues"
468
- if @deep==ORGS_REPO || @deep==USER_REPO || @deep==TEAM_REPO
469
- @issues_list=r.show_issues(@client,@config,@deep)
470
- end
471
- when op == "col" then self.collaborators()
472
- when op == "forks" then self.show_forks()
473
- when op == "groups"
474
- if @deep==ORGS
475
- t.list_groups(@client,@config)
476
- @sysbh.add_history_str(2,t.get_groupslist(@config))
477
- end
478
- when op.include?("group") && opcd[0]=="group"
479
- if opcd.size==2
480
- teams=t.get_single_group(@config,opcd[1])
481
- if teams!=nil
482
- puts "Teams in group #{opcd[1]} :"
483
- puts teams
484
- else
485
- puts "Group not found"
486
- end
487
- end
488
- when op.include?("new") && opcd[0]=="new" && opcd[1]=="team" #new's parse
489
- if opcd.size==3 and @deep==ORGS
490
- t.create_team(@client,@config,opcd[2])
491
- @teamlist=t.read_teamlist(@client,@config)
492
- @sysbh.add_history_str(1,@teamlist)
493
- end
494
- if opcd.size>3 and @deep==ORGS
495
- t.create_team_with_members(@client,@config,opcd[2],opcd[3..opcd.size])
496
- @teamlist=t.read_teamlist(@client,@config)
497
- @sysbh.add_history_str(1,@teamlist)
498
- end
499
- when op.include?("new") && !op.include?("comment") && opcd[0]=="new" && opcd[1]=="issue"
500
- if opcd.size==2 and (@deep==ORGS_REPO || @deep==USER_REPO || @deep==TEAM_REPO)
501
- r.create_issue(@client,@config,@deep,config_path)
502
- end
503
- when op.include?("new") && (opcd[0]=="new" && opcd[1]=="issue" && opcd[2]=="comment")
504
- if opcd.size==4 and (@deep==ORGS_REPO || @deep==USER_REPO || @deep==TEAM_REPO)
505
- r.add_issue_cm(@client,@config,@deep,opcd[3],config_path)
506
- end
507
- when op.include?("new") && opcd[0]=="new" && opcd[1]=="people" && opcd[2]=="info"
508
- if @deep==ORGS && opcd.size==4 then o.add_people_info(@client,@config,opcd[3],false) end
509
- when op.include?("new") && opcd[0]=="new" && opcd[1]=="repository"
510
- if opcd.size==3
511
- r.create_repository(@client,@config,opcd[2],false,@deep)
512
- end
513
- when op.include?("new relation") && opcd[0]=="new" && opcd[1]="relation"
514
- if opcd.size==3 and @deep==ORGS
515
- o.add_people_info(@client,@config,opcd[2],true)
516
- end
517
- when op.include?("new assignment") && opcd[0]=="new" && opcd[1]="assignment"
518
- if opcd.size==3 and @deep==ORGS
519
- r.create_repository_by_teamlist(@client,@config,opcd[2],opcd[3,opcd.size],self.get_teamlist(opcd[3,opcd.size]))
520
- o.create_assig(@client,@config,opcd[2])
521
- @sysbh.add_history(opcd[2])
522
- end
523
- when op.include?("new group") && opcd[0]=="new" && opcd[1]="group"
524
- if opcd.size==5 and @deep==ORGS and opcd[2]=="-f"
525
- t.new_group_file(@client,@config,opcd[3],opcd[4])
526
- end
527
- if opcd.size>3 and @deep==ORGS and !op.include?("-f")
528
- t.new_group(@client,@config,opcd[2],opcd[3..opcd.size-1])
529
- end
530
-
531
- when op.include?("rm team") && opcd[0]=="rm" && opcd[1]="team" ##rm parse
532
- if opcd.size==3
533
- @teamlist=t.read_teamlist(@client,@config)
534
- if @teamlist[opcd[2]]!=nil
535
- t.delete_team(@client,@teamlist[opcd[2]])
536
- @sysbh.quit_history(@teamlist[opcd[2]])
537
- @teamlist=t.read_teamlist(@client,@config)
538
- @sysbh.add_history_str(1,@teamlist)
539
- else
540
- puts "Team not found"
541
- end
542
- end
543
-
544
- when op.include?("rm group") && opcd[0]=="rm" && opcd[1]="group"
545
- if opcd.size==3 and @deep==ORGS
546
- t.delete_group(@config,opcd[2])
547
- end
548
- if opcd.size==3 and @deep==ASSIG
549
- if opcd[2]!="-all"
550
- o.rm_assigment_group(@config,@config["Assig"],opcd[2],1)
551
- else
552
- o.rm_assigment_group(@config,@config["Assig"],opcd[2],2)
553
- end
554
- end
555
- when op.include?("rm student") && opcd[0]=="rm" && opcd[1]="student"
556
- if opcd.size==3 and @deep==ASSIG
557
- if opcd[2]!="-all"
558
- o.rm_assigment_student(@config,@config["Assig"],opcd[2],1)
559
- else
560
- o.rm_assigment_student(@config,@config["Assig"],opcd[2],2)
561
- end
562
- end
563
- when op.include?("rm repository") && opcd[0]=="rm" && opcd[1]="repository"
564
- if @deep==ORGS || @deep==USER || @deep==TEAM
565
- r.delete_repository(@client,@config,opcd[2],@deep)
566
- if @deep==ORGS
567
- @orgs_repos.delete(opcd[2])
568
- end
569
- end
570
- when op.include?("rm repo")&& opcd[0]=="rm" && opcd[1]="repo"
571
- if @deep==ASSIG and opcd.size==3
572
- o.rm_assigment_repo(@config,@config["Assig"],opcd[2])
573
- end
574
- when op.include?("rm clone files") && opcd[0]=="rm" && opcd[1]="clone" && opcd[2]="files"
575
- if opcd.size>3
576
- r.rm_clone(@client,@config,@scope,false,opcd[3])
577
- else
578
- r.rm_clone(@client,@config,@scope,true,nil)
579
- end
580
- when op == "info"
581
- if @deep==ASSIG then o.show_assig_info(@config,@config["Assig"]) end
582
- if @deep==USER_REPO || @deep==TEAM_REPO || @deep==ORGS_REPO then r.info_repository(@client,@config,@deep) end
583
- when op== "add repo"
584
- if @deep==ASSIG then o.add_repo_to_assig(@client,@config,@config["Assig"],nil) end
585
- when op.include?("change repo") && opcd[0]=="change" && opcd[1]=="repo"
586
- if @deep==ASSIG
587
- if opcd.size>2
588
- o.add_repo_to_assig(@client,@config,@config["Assig"],opcd[2])
589
- else
590
- o.add_repo_to_assig(@client,@config,@config["Assig"],1)
591
- end
592
- end
593
- when op.include?("change sufix") && opcd[0]=="change" && opcd[1]=="sufix"
594
- if @deep==ASSIG
595
- if opcd.size>2 then o.change_repo_sufix(@config,@config["Assig"],opcd[2]) end
596
- end
597
- when op=="add students" && @deep==ASSIG
598
- o.add_people_to_assig(@client,@config,@config["Assig"])
599
- when op.include?("rm")
600
- if @deep==ORGS and opcd[1]=="people" and opcd[2]=="info"
601
- o.rm_people_info(@client,@config)
602
- end
603
- when op== "add group"
604
- if @deep=ASSIG then o.add_group_to_assig(@client,@config,@config["Assig"]) end
605
- when op == "version"
606
- puts "GitHub Education Shell v#{Ghedsh::VERSION}"
607
-
608
- when op.include?("add team member") && opcd[0]=="add" && opcd[1]="team" && opcd[2]="member"
609
- if opcd.size==4 and @deep==TEAM
610
- t.add_to_team(@client,@config,opcd[3])
611
- end
612
-
613
- when op.include?("close issue") && opcd[0]=="close" && opcd[1]="issue"
614
- if (@deep==ORGS_REPO || @deep==USER_REPO || @deep==TEAM_REPO) and opcd.size==3
615
- r.close_issue(@client,@config,@deep,opcd[2])
616
- end
617
-
618
- when op.include?("open issue") && opcd[0]=="open" && opcd[1]="issue"
619
- if (@deep==ORGS_REPO || @deep==USER_REPO || @deep==TEAM_REPO) and opcd.size==3
620
- r.open_issue(@client,@config,@deep,opcd[2])
621
- end
622
-
623
- when op == "assignments"
624
- if @deep==ORGS
625
- o.show_assignments(@client,@config)
626
- @sysbh.add_history_str(2,o.get_assigs(@client,@config,false))
627
- end
628
- when op =="make"
629
- if @deep==ASSIG
630
- o.make_assig(@client,@config,@config["Assig"])
631
- end
632
- when op.include?("open") && opcd[0]=="open"
633
- if @deep==USER_REPO || @deep==TEAM_REPO || @deep==ORGS_REPO then r.open_repository(@client,@config,@deep) end
634
- if @deep==USER then u.open_user(@client) end
635
- if @deep==ORGS
636
- if opcd.size==1
637
- o.open_org(@client,@config)
638
- else
639
- if opcd.size==2
640
- o.open_user_url(@client,@config,opcd[1],nil)
641
- else
642
- o.open_user_url(@client,@config,opcd[1],opcd[2])
643
- end
644
- end
645
- end
646
- if @deep==TEAM then t.open_team_repos(@config) end
647
- if @deep==ASSIG then o.open_assig(@config,@config["Assig"]) end
648
- end
649
-
650
- if opcd[0]=="issue" and opcd.size>1
651
- if @deep==ORGS_REPO || @deep==USER_REPO || @deep==TEAM_REPO
652
- r.show_issue(@client,@config,@deep,opcd[1])
653
- end
654
- end
655
-
656
- if opcd[0]=="cd" and opcd[1]!=".."
657
- if opcd[1]=="/" or opcd.size==1
658
- self.cdback(true)
659
- else
660
- if opcd[1]=="repo" and opcd.size>2
661
- self.set(opcd[2])
662
- else
663
- if opcd[1].include?("/")
664
- cdlist=opcd[1].split("/")
665
- cdlist.each do |i|
666
- opscript.push("cd #{i}")
667
- end
668
- else
669
- self.cd(opcd[1])
670
- end
671
- end
672
- end
673
- end
674
- if opcd[0]=="do" and opcd.size>1
675
- opscript=s.load_script(opcd[1])
676
- end
677
- if opcd[0]=="set"
678
- self.set(opcd[1])
679
- end
680
- if opcd[0]=="repos" and opcd.size==1
681
- self.repos(false)
682
- end
683
- if opcd[0]=="repos" and opcd.size>1 ##Busca con expresion regular, si no esta en la cache realiza la consulta
684
- if opcd[1]=="-all" || opcd[1]=="-a"
685
- self.repos(true)
686
- else
687
- case
688
- when @deep==USER
689
- if @repos_list.empty?
690
- r.show_repos(@client,@config,@deep,opcd[1])
691
- @repos_list=r.get_repos_list(@client,@config,@deep)
692
- else
693
- @sysbh.showcachelist(@repos_list,opcd[1])
694
- end
695
- when @deep==ORGS
696
- if @orgs_repos.empty?
697
- r.show_repos(@client,@config,@deep,opcd[1])
698
- @orgs_repos=r.get_repos_list(@client,@config,@deep)
699
- else
700
- @sysbh.showcachelist(@orgs_repos,opcd[1])
701
- end
702
- when @deep==TEAM
703
- if @teams_repos.empty?
704
- r.show_repos(@client,@config,@deep,opcd[1])
705
- @teams_repos=r.get_repos_list(@client,@config,@deep)
706
- else
707
- @sysbh.showcachelist(@teams_repos,opcd[1])
708
- end
709
- end
710
- end
711
- end
712
-
713
- if opcd[0]=="private" and opcd.size==2
714
- if opcd[1]=="true" || opcd[1]=="false"
715
- r.edit_repository(@client,@config,@deep,opcd[1])
716
- end
717
- end
718
-
719
- if opcd[0]=="people" and opcd[1]=="info"
720
- if opcd.size==2
721
- info_strm=o.show_people_info(@client,@config,nil)
722
- if info_strm!=nil then @sysbh.add_history_str(2,info_strm) end
723
- else
724
- if opcd[2].include?("/")
725
- o.search_rexp_people_info(@client,@config,opcd[2])
67
+ def run
68
+ puts @shell_enviroment.client.say('GitHub Education Shell')
69
+ sleep(1.5)
70
+ @shell_enviroment.client.say.clear
71
+ system('clear')
72
+
73
+ loop do
74
+ begin
75
+ input = Readline.readline(@shell_enviroment.prompt, true)
76
+ # handle ctrl-d (eof), equivalent to exit (saving configuration)
77
+ if input.nil?
78
+ @shell_enviroment.commands['exit'].call(nil)
79
+ exit!(0)
80
+ end
81
+ input = input.strip.split
82
+ command_name = input[0]
83
+ input.shift
84
+ command_params = input
85
+ unless command_name.to_s.empty?
86
+ if command_name.start_with?('!')
87
+ command_name = command_name.delete('!')
88
+ command_params.unshift(command_name)
89
+ @shell_enviroment.commands['bash'].call(command_params)
90
+ elsif @shell_enviroment.commands.key?(command_name)
91
+ result = @shell_enviroment.commands[command_name].call(command_params)
726
92
  else
727
- o.show_people_info(@client,@config,opcd[2])
93
+ puts Rainbow("-ghedsh: #{command_name}: command not found").yellow
728
94
  end
729
95
  end
96
+ rescue StandardError => e
97
+ puts e
730
98
  end
731
- if opcd[0]=="clone"
732
- if opcd.size==2
733
- r.clone_repo(@client,@config,opcd[1],@deep)
734
- end
735
- if opcd.size==1 && (@deep==USER_REPO || @deep==TEAM_REPO || @deep==ORGS_REPO)
736
- r.clone_repo(@client,@config,nil,@deep)
737
- end
738
- if opcd.size==1 && deep==ASSIG
739
- r.clone_repo(@client,@config,"/#{@config["Assig"]}/",@deep)
740
- puts "/#{@config["Assig"]}/"
741
- end
742
- end
743
- if op.match(/^!/)
744
- op=op.split("!")
745
- s.execute_bash(op[1])
746
- end
747
- if opcd[0]=="clone" and opcd.size>2
748
- #r.clone_repo(@client,@config,opcd[1])
749
- end
750
- if opcd[0]=="files"
751
- if opcd.size==1
752
- r.get_files(@client,@config,@repo_path,true,@deep)
753
- else
754
- r.get_files(@client,@config,opcd[1],true,@deep)
755
- end
756
- end
757
- if opcd[0]=="cat" and opcd.size>1
758
- r.cat_file(@client,@config,opcd[1],@deep)
759
- end
99
+ break if result == 0
760
100
  end
761
-
762
101
  end
763
-
764
102
  end