jgit 1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 41efe60696295077934ab249e3496db6eb20ac28
4
+ data.tar.gz: aff667c4c33f6576b8c03dd257ef4fc584965af2
5
+ SHA512:
6
+ metadata.gz: 44416444d9f20fe31a685a08b9d4b802bbf772d18fe626feb117229e3153acb762d9e64f0317c4f479c6d46789330d4b81a7b8af5cb23b36555466c6421d0add
7
+ data.tar.gz: ede60888fd10f1f2284f4712e8dd6d395a6f25d06caef52409da8eebc58de0001d0658c344289a21e911e4c35579b38fe0a429f704238146ef6db6e520cf531f
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "jgit"
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
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ require 'thor'
3
+ require 'jgit'
4
+
5
+ Jgit::Project.start(ARGV)
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,218 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'jgit/common'
4
+ require 'jgit/group'
5
+ require 'jgit/desc'
6
+ require 'jgit/version'
7
+ require 'thor'
8
+
9
+ module Jgit
10
+
11
+ class Project < Thor
12
+
13
+ PROMPT_TASK = "key in project name:"
14
+
15
+ desc 'add <path> <name> [-g GROUP]', 'add new project'
16
+ method_option :group, :aliases => '-g', :desc => "group to operate"
17
+
18
+ def add(path = nil, name = nil)
19
+
20
+ group = get_group
21
+ path = prompt("key in project path:(empty for current dir)", Dir.pwd) if path.nil?
22
+ path = File.expand_path(path)
23
+ jexit "no such dir" unless File.directory?(path)
24
+
25
+ name = prompt("key in project name:(empty for current dir)", File.basename(Dir.getwd)) if name.nil?
26
+ data = list(false, group)
27
+ data[name] = path
28
+
29
+ save_data(project_path(group), data.to_json)
30
+
31
+ end
32
+
33
+ desc 'list [-g GROUP]', 'list all projects, alias: ls'
34
+ method_option :group, :aliases => '-g', :desc => "group to operate"
35
+ map ls: :list
36
+
37
+ def list(show = true, group = nil)
38
+
39
+ group = get_group(group)
40
+ data = load_obj(project_path(group), Hash)
41
+ if show
42
+ data.each do |key, val|
43
+ puts "#{key}: #{val}"
44
+ end
45
+ end
46
+ data
47
+
48
+ end
49
+
50
+ desc 'remove <name> [-g GROUP]', 'remove project, alias: rm'
51
+ method_option :group, :aliases => '-g', :desc => "group to operate"
52
+ map rm: :remove
53
+
54
+ def remove(name = nil)
55
+
56
+ group = get_group
57
+ if name.nil?
58
+ data = list(true, group)
59
+ name = prompt(PROMPT_TASK)
60
+ else
61
+ data = list(false, group)
62
+ end
63
+
64
+ if data.delete(name).nil?
65
+ jexit "no such project"
66
+ else
67
+ save_data(project_path(group), data.to_json)
68
+ end
69
+
70
+ end
71
+
72
+ desc 'rename <name> <new_name> [-g GROUP]', 'rename project, alias: rn'
73
+ method_option :group, :aliases => '-g', :desc => "group to operate"
74
+ map rn: :rename
75
+
76
+ def rename(name = nil, new_name = nil)
77
+
78
+ group = get_group
79
+ if name.nil?
80
+ data = list(true, group)
81
+ name = prompt(PROMPT_TASK)
82
+ else
83
+ data = list(false, group)
84
+ end
85
+
86
+ new_name = prompt("key in new project name:", File.basename(Dir.getwd)) if new_name.nil?
87
+ jexit "new_name exist" if data.include?(new_name)
88
+
89
+ result = data.delete(name)
90
+
91
+ if result.nil?
92
+ jexit "no such project"
93
+ else
94
+ data[new_name] = result
95
+ save_data(project_path(group), data.to_json)
96
+ end
97
+ end
98
+
99
+ desc 'commit [-g GROUP] [-p PROJECT]', 'git commit all file on given project'
100
+ method_option :group, :aliases => '-g', :desc => "group to operate"
101
+ method_option :project, :aliases => '-p', :desc => "project to operate"
102
+
103
+ def commit
104
+ exe "git add -A && git commit"
105
+ end
106
+
107
+ desc 'status [-g GROUP] [-p PROJECT]', 'git status on given project, alias: st'
108
+ method_option :group, :aliases => '-g', :desc => "group to operate"
109
+ method_option :project, :aliases => '-p', :desc => "project to operate"
110
+
111
+ def status
112
+ exe "git status"
113
+ end
114
+
115
+ desc 'fetch [-g GROUP] [-p PROJECT]', 'git fetch on given project'
116
+ method_option :group, :aliases => '-g', :desc => "group to operate"
117
+ method_option :project, :aliases => '-p', :desc => "project to operate"
118
+
119
+ def fetch
120
+ exe "git fetch"
121
+ end
122
+
123
+ desc 'pull [-g GROUP] [-p PROJECT]', 'git pull on given project'
124
+ method_option :group, :aliases => '-g', :desc => "group to operate"
125
+ method_option :project, :aliases => '-p', :desc => "project to operate"
126
+
127
+ def pull
128
+ exe "git pull"
129
+ end
130
+
131
+ desc 'diff [-g GROUP] [-p PROJECT]', 'git diff on given project'
132
+ method_option :group, :aliases => '-g', :desc => "group to operate"
133
+ method_option :project, :aliases => '-p', :desc => "project to operate"
134
+
135
+ def diff
136
+ exe "git diff ."
137
+ end
138
+
139
+ desc 'push [-g GROUP] [-p PROJECT]', 'git push on given project'
140
+ method_option :group, :aliases => '-g', :desc => "group to operate"
141
+ method_option :project, :aliases => '-p', :desc => "project to operate"
142
+
143
+ def push
144
+ exe "git push"
145
+ end
146
+
147
+ desc 'exe <command...> [-g GROUP] [-p PROJECT]', 'exec command on given project'
148
+ method_option :group, :aliases => '-g', :desc => "group to operate"
149
+ method_option :project, :aliases => '-p', :desc => "project to operate"
150
+
151
+ long_desc EXE_DESC
152
+
153
+ def exe(command)
154
+
155
+ list = list(false, get_group)
156
+
157
+ jexit "no project, use 'jgit add' to add project first" if list.empty?
158
+
159
+ list.each do |name, path|
160
+ if !options[:project].nil? && options[:project] != name
161
+ next
162
+ end
163
+ puts ""
164
+ puts " - Task:#{bold(name)}"
165
+ Dir.chdir(path)
166
+ system command
167
+ end
168
+ end
169
+
170
+ desc 'chgrp <name>', 'change default group'
171
+ map cg: :chgrp
172
+
173
+ def chgrp(name = nil)
174
+
175
+ group = Group.new
176
+ name = group.select_group(name)
177
+ data = group.list(false)
178
+
179
+ name = "" if name == "default"
180
+
181
+ if name.empty? || data.include?(name)
182
+ puts "switch to #{name} group"
183
+ save_data(CURRENT_GROUP, name)
184
+ else
185
+ jexit "no such group"
186
+ end
187
+ end
188
+
189
+ desc 'version', 'version of jgit, alias: -v'
190
+ map "-v" => :version
191
+ map "--version" => :version
192
+
193
+ def version
194
+ puts "jgit #{Jgit::VERSION} -- jgit is a git management tool in Ruby"
195
+ puts "visit https://github.com/Jintin/jgit for more information"
196
+ end
197
+
198
+ desc "group [COMMAND]", "group management"
199
+ subcommand "group", Group
200
+
201
+ no_commands do
202
+ def get_group(group = nil)
203
+ group = options[:group] if group.nil?
204
+ group = "" if group == "default"
205
+ group = get_current_group if group.nil?
206
+
207
+ group
208
+ end
209
+
210
+ end
211
+
212
+ end
213
+ end
214
+
215
+ if __FILE__ == $0
216
+ Jgit::Project.start(ARGV)
217
+ end
218
+
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'jgit/jutil'
4
+ require 'json'
5
+
6
+ FOLDER_PATH = "#{Dir.home}/.jgit"
7
+ GROUP_DATA = "#{FOLDER_PATH}/group.json"
8
+ CURRENT_GROUP = "#{FOLDER_PATH}/current.json"
9
+
10
+ def project_path(current = nil)
11
+ current = load_data(CURRENT_GROUP) if current.nil?
12
+ "#{FOLDER_PATH}/record_#{current}.json"
13
+ end
14
+
15
+ def get_current_group
16
+ if File.exists?(CURRENT_GROUP)
17
+ File.read(CURRENT_GROUP)
18
+ else
19
+ ""
20
+ end
21
+ end
22
+
23
+ def delete_file(file)
24
+ if File.exist?(file)
25
+ File.delete(file)
26
+ end
27
+ end
28
+
29
+ def save_data(path, data)
30
+ unless File.exist?(FOLDER_PATH)
31
+ FileUtils.mkdir_p(FOLDER_PATH)
32
+ end
33
+ File.open(path, 'w+') do |f|
34
+ f.write(data)
35
+ end
36
+ end
37
+
38
+ def load_data(path)
39
+ if File.exists?(path)
40
+ File.read(path)
41
+ else
42
+ ""
43
+ end
44
+ end
45
+
46
+ def load_obj(path, cls)
47
+ if File.exists?(path)
48
+ file = File.read(path)
49
+ JSON.parse(file)
50
+ else
51
+ cls.new
52
+ end
53
+ end
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ EXE_DESC = %{
4
+ `jgit exe` will execute command in every task
5
+
6
+ Example:
7
+
8
+ > $ jgit exe "git add ."
9
+
10
+ > $ jgit exe "mkdir temp"
11
+
12
+
13
+ }
@@ -0,0 +1,96 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'jgit/common'
4
+ require 'thor'
5
+
6
+ module Jgit
7
+ class Group < Thor
8
+
9
+ PROMPT_GROUP = "key in group name:"
10
+
11
+ desc 'add <name>', 'add new group'
12
+
13
+ def add(name = nil)
14
+
15
+ name = prompt(PROMPT_GROUP) if name.nil?
16
+ jexit "no such group" if name.empty?
17
+
18
+ data = list(false)
19
+ data.push(name) unless data.include?(name)
20
+ save_data(GROUP_DATA, data.to_json)
21
+
22
+ end
23
+
24
+ desc 'list', 'list group'
25
+ map ls: :list
26
+
27
+ def list(show = true)
28
+
29
+ current = load_data(CURRENT_GROUP)
30
+ current = "default" if current.empty?
31
+
32
+ data = load_obj(GROUP_DATA, Array)
33
+ data.unshift("default")
34
+
35
+ if show
36
+ data.each do |val|
37
+ puts (val == current ? "> " : " ") + val
38
+ end
39
+ end
40
+
41
+ data.delete("default")
42
+ data
43
+
44
+ end
45
+
46
+ desc 'remove <name>', 'remove group'
47
+ map rm: :remove
48
+
49
+ def remove(name)
50
+
51
+ name = select_group(name)
52
+ data = list(false)
53
+
54
+ if data.delete(name).nil?
55
+ jexit name == "default" ? "can't remove default group" : "no such group"
56
+ else
57
+ delete_file(CURRENT_GROUP) if name == load_data(CURRENT_GROUP)
58
+ delete_file(project_path(name))
59
+
60
+ save_data(GROUP_DATA, data.to_json)
61
+ end
62
+
63
+ end
64
+
65
+ desc 'rename <name> <new_name>', 'rename group'
66
+
67
+ def rename(name = nil, new_name = nil)
68
+
69
+ name = select_group(name)
70
+ data = list(false)
71
+
72
+ new_name = prompt("key in group name:") if new_name.nil?
73
+ jexit "new_name exist" if data.include?(new_name)
74
+
75
+ if data.delete(name).nil?
76
+ jexit "no such group"
77
+ else
78
+ save_data(CURRENT_GROUP, new_name) if name == load_data(CURRENT_GROUP)
79
+ data.push(new_name)
80
+ save_data(GROUP_DATA, data.to_json)
81
+ end
82
+
83
+ end
84
+
85
+ no_commands do
86
+ def select_group(name = nil)
87
+ if name.nil?
88
+ list
89
+ name = prompt(PROMPT_GROUP)
90
+ end
91
+ name
92
+ end
93
+ end
94
+
95
+ end
96
+ end
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ def prompt(args, default = "")
4
+
5
+ begin
6
+ puts(args)
7
+ print "> "
8
+ STDOUT.flush
9
+ text = STDIN.gets.chomp
10
+ rescue SystemExit, Interrupt
11
+ jexit
12
+ end
13
+
14
+ if text.empty?
15
+ default
16
+ else
17
+ text
18
+ end
19
+
20
+ end
21
+
22
+ def jexit(str = nil)
23
+ if str.nil?
24
+ puts "exit with 0"
25
+ else
26
+ puts str
27
+ end
28
+ exit
29
+ end
30
+
31
+ def bold(text)
32
+ "\033[1;4m#{text}\033[0m"
33
+ end
@@ -0,0 +1,3 @@
1
+ module Jgit
2
+ VERSION = "1.1"
3
+ end
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'minitest/autorun'
4
+ require 'jgit/common'
5
+ require 'jgit/group'
6
+ require 'jgit'
7
+
8
+ class GroupTest < Minitest::Test
9
+
10
+ def test_add
11
+
12
+ jgit = Jgit::Group.new
13
+ jgit.add("test")
14
+ data = jgit.list(false)
15
+ jgit.remove("test")
16
+ assert data.include?("test")
17
+
18
+ end
19
+
20
+ def test_remove
21
+
22
+ jgit = Jgit::Group.new
23
+ jgit.add("test")
24
+ data = jgit.list(false)
25
+ jgit.remove("test")
26
+ data2 = jgit.list(false)
27
+ assert data.include?("test") && !data2.include?("test")
28
+
29
+ end
30
+
31
+ def test_rename
32
+
33
+ jgit = Jgit::Group.new
34
+ jgit.add("test")
35
+ jgit.rename("test", "newtest")
36
+ data = jgit.list(false)
37
+ jgit.remove("newtest")
38
+ assert !data.include?("test") && data.include?("newtest")
39
+
40
+ end
41
+
42
+ def test_chgrp
43
+ task = Jgit::Project.new
44
+ group = Jgit::Group.new
45
+
46
+ current = load_data(CURRENT_GROUP)
47
+ group.add("test")
48
+ task.chgrp("test")
49
+ task.add(".", "test")
50
+ data = task.list(false)
51
+ task.remove("test")
52
+ task.chgrp(current)
53
+ data2 = task.list(false)
54
+ group.remove("test")
55
+ assert data.include?("test") && !data2.include?("test")
56
+
57
+ end
58
+
59
+ end
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'minitest/autorun'
4
+ require 'jgit/common'
5
+ require 'jgit'
6
+
7
+ class TaskTest < Minitest::Test
8
+
9
+ def test_add
10
+
11
+ jgit = Jgit::Project.new
12
+ jgit.add(".", "test")
13
+ data = jgit.list(false)
14
+ jgit.remove("test")
15
+ assert_equal File.expand_path("."), data["test"]
16
+ end
17
+
18
+ def test_remove
19
+
20
+ jgit = Jgit::Project.new
21
+ jgit.add(".", "test")
22
+ data = jgit.list(false)
23
+ jgit.remove("test")
24
+ data2 = jgit.list(false)
25
+ assert !data["test"].nil? && data2["test"].nil?
26
+
27
+ end
28
+
29
+ def test_rename
30
+
31
+ jgit = Jgit::Project.new
32
+ jgit.add(".", "test")
33
+ jgit.rename("test", "newtest")
34
+ data = jgit.list(false)
35
+ jgit.remove("newtest")
36
+ assert data["test"].nil? && !data["newtest"].nil?
37
+
38
+ end
39
+
40
+ end
metadata ADDED
@@ -0,0 +1,115 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jgit
3
+ version: !ruby/object:Gem::Version
4
+ version: '1.1'
5
+ platform: ruby
6
+ authors:
7
+ - jintin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-12-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 5.8.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 5.8.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: thor
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
+ description: Jgit is a tool to help you manage multiple separate git-base project
70
+ in local file system.
71
+ email:
72
+ - jintinapps@gmail.com
73
+ executables:
74
+ - jgit
75
+ extensions: []
76
+ extra_rdoc_files: []
77
+ files:
78
+ - bin/console
79
+ - bin/jgit
80
+ - bin/setup
81
+ - lib/jgit.rb
82
+ - lib/jgit/common.rb
83
+ - lib/jgit/desc.rb
84
+ - lib/jgit/group.rb
85
+ - lib/jgit/jutil.rb
86
+ - lib/jgit/version.rb
87
+ - test/group_test.rb
88
+ - test/task_test.rb
89
+ homepage: https://github.com/Jintin/jgit
90
+ licenses:
91
+ - MIT
92
+ metadata: {}
93
+ post_install_message:
94
+ rdoc_options: []
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ requirements: []
108
+ rubyforge_project:
109
+ rubygems_version: 2.4.5.1
110
+ signing_key:
111
+ specification_version: 4
112
+ summary: git management tool
113
+ test_files:
114
+ - test/group_test.rb
115
+ - test/task_test.rb