jgit 1.1

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.
@@ -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