easyoperate 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +5 -0
- data/Manifest.txt +3 -1
- data/README.rdoc +1 -1
- data/bin/eo +10 -3
- data/lib/easyoperate.rb +1 -3
- data/lib/eo.rb +23 -43
- data/lib/eo/eo.rb +58 -38
- data/lib/eo/repository.rb +66 -0
- data/lib/eo/scm/git.rb +22 -0
- data/lib/eo/scm/svn.rb +22 -0
- metadata +6 -4
- data/lib/eo/scm.rb +0 -89
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
data/README.rdoc
CHANGED
@@ -17,7 +17,7 @@
|
|
17
17
|
# then copy autoload/rails.vim to ~/.vim/autoload/
|
18
18
|
# then copy plugin/rails.vim to ~/.vim/plugin/
|
19
19
|
|
20
|
-
scm: #
|
20
|
+
scm: # Default is git,your can define your scm-type in ~/.eo/scm
|
21
21
|
|
22
22
|
cmd: # Where you can define your methods
|
23
23
|
cp_autoload: `cp autoload/rails.vim ~/.vim/autoload/`
|
data/bin/eo
CHANGED
@@ -3,8 +3,15 @@
|
|
3
3
|
# Copyright (c) 2008. GPL3.
|
4
4
|
# Author: Jinzhu Zhang
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
|
7
|
+
require "easyoperate"
|
8
8
|
require "eo"
|
9
9
|
|
10
|
-
|
10
|
+
# easy debug
|
11
|
+
if ARGV.delete('-d')
|
12
|
+
['rubygems','ruby-debug'].each {|x| require x}
|
13
|
+
else
|
14
|
+
def debugger;end
|
15
|
+
end
|
16
|
+
|
17
|
+
Eo.execute(ARGV)
|
data/lib/easyoperate.rb
CHANGED
data/lib/eo.rb
CHANGED
@@ -1,49 +1,29 @@
|
|
1
|
-
%w(
|
1
|
+
%w(yaml eo/eo).each {|f| require f}
|
2
2
|
|
3
3
|
class Eo
|
4
4
|
|
5
|
-
def self.execute(
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
self.show(args)
|
28
|
-
end
|
29
|
-
|
30
|
-
opts.on("-c [ARGS]", "--choose","Choose Repository.") do |args|
|
31
|
-
self.choose(args)
|
32
|
-
end
|
33
|
-
|
34
|
-
opts.on("-i [ARGS]", "--init","Initialize Repository. <Regexp>") do |args|
|
35
|
-
self.init(args)
|
36
|
-
end
|
37
|
-
|
38
|
-
if arguments.empty?
|
39
|
-
self.run
|
40
|
-
else
|
41
|
-
begin
|
42
|
-
opts.parse!(arguments)
|
43
|
-
rescue OptionParser::InvalidOption
|
44
|
-
puts "\e[31m;(\tError\e[0m \n\tHelp?\t\e[33m$ eo -h \e[31m;)\e[0m"
|
45
|
-
end
|
46
|
-
end
|
5
|
+
def self.execute(args)
|
6
|
+
|
7
|
+
case args.first
|
8
|
+
when "-s" then self.show(args[1,args.size])
|
9
|
+
when "-c" then self.choose(args[1,args.size])
|
10
|
+
when "-i" then self.init(args[1,args.size])
|
11
|
+
when "-u" then self.update(args[1,args.size])
|
12
|
+
when "-t" then self.type
|
13
|
+
when "-v" then puts "\e[33mEo_oE : v" + Easyoperate::VERSION + "\e[0m"
|
14
|
+
when "-h" then
|
15
|
+
puts <<-DOC.gsub(/^(\s*\|)/,'')
|
16
|
+
|Usage: #{File.basename($0)} [options] [ARGS]
|
17
|
+
|
18
|
+
|Options are:
|
19
|
+
| -u Update Repository. <Regexp>
|
20
|
+
| -s Show All Repositories. <Regexp>
|
21
|
+
| -v Show version information.
|
22
|
+
| -c Choose Repository.
|
23
|
+
| -t Show All Support Scm
|
24
|
+
| -i Initialize Repository. <Regexp>
|
25
|
+
DOC
|
26
|
+
else self.run
|
47
27
|
end
|
48
28
|
end
|
49
29
|
end
|
data/lib/eo/eo.rb
CHANGED
@@ -1,17 +1,18 @@
|
|
1
|
-
require '
|
1
|
+
require File.join(File.dirname(__FILE__),'repository')
|
2
|
+
|
2
3
|
class Eo
|
3
|
-
|
4
|
+
Repos = Hash.new
|
4
5
|
|
5
6
|
Config_file = File.join("#{ENV['HOME']}",".eorc")
|
6
7
|
|
7
8
|
unless File.exist?(Config_file)
|
8
|
-
puts " \e[31m;(
|
9
|
+
puts " \e[31m;( No config file\e[0m \n\nExample Config file:\n\n"
|
9
10
|
puts File.read(File.join(File.dirname(__FILE__),'../../example/eorc'))
|
10
11
|
exit
|
11
12
|
end
|
12
13
|
|
13
|
-
YAML.load_file(Config_file).each_pair do |
|
14
|
-
|
14
|
+
YAML.load_file(Config_file).each_pair do |key,value|
|
15
|
+
Repos[key] = Repository.new(value.merge(:_name_ => key))
|
15
16
|
end
|
16
17
|
|
17
18
|
class << self
|
@@ -26,76 +27,92 @@ class Eo
|
|
26
27
|
when /C/i then choose(input[1])
|
27
28
|
when /U/i then update(input[1])
|
28
29
|
when /I/i then init(input[1])
|
29
|
-
when /
|
30
|
+
when /T/i then type
|
31
|
+
when /Q/i then exit
|
30
32
|
else help
|
31
33
|
end
|
32
34
|
end
|
33
35
|
end
|
34
36
|
|
35
37
|
def help
|
36
|
-
puts
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
38
|
+
puts <<-DOC.gsub(/^(\s*\|)/,'')
|
39
|
+
|Usage:
|
40
|
+
| S /args/ : Show matched repositories <Regexp>
|
41
|
+
| C /args/ : Choose One Repository <Regexp>
|
42
|
+
| U /args/ : Update matched Repository <Regexp>
|
43
|
+
| I /args/ : Initialize matched Repository <Regexp>
|
44
|
+
| T : Show All Support Scm
|
45
|
+
| Q : Quit
|
46
|
+
| H : Show this help message.
|
47
|
+
|e.g:\n \e[32m s v.*m\e[0m
|
48
|
+
DOC
|
49
|
+
end
|
50
|
+
|
51
|
+
def type
|
52
|
+
["#{ENV['HOME']}/.eo/scm/",File.join(File.dirname(__FILE__),'scm')].each do |x|
|
53
|
+
next if !File.exist?(x)
|
54
|
+
(@scm ||= []).concat(Dir.new(x).entries.reject {|i| i =~/^\.+$/})
|
55
|
+
end
|
56
|
+
|
57
|
+
puts "\e[33mAll Scm-type :\e[0m"
|
58
|
+
@scm.uniq.map do |x|
|
59
|
+
(@formated_scm ||= []) << File.basename(x,".rb")
|
60
|
+
end
|
61
|
+
format_display(@formated_scm)
|
44
62
|
end
|
45
63
|
|
46
64
|
def show(*args)
|
47
65
|
repos = pick(args,false)
|
48
66
|
puts "\e[33mAll Repo match < #{args} > :\e[0m"
|
49
|
-
repos
|
50
|
-
printf "\e[32m %-22s\e[0m" % [repos[x].rstrip]
|
51
|
-
printf("\n") if (x+1)%3==0
|
52
|
-
end
|
53
|
-
puts "\n" if repos.size%3 != 0
|
67
|
+
format_display(repos)
|
54
68
|
end
|
55
69
|
|
56
70
|
def choose(*args)
|
57
71
|
repos = pick(args)
|
58
|
-
|
72
|
+
|
73
|
+
if repos && repos = repos.to_s # Convert Array To String
|
59
74
|
return false unless exist_path(repos)
|
60
75
|
loop do
|
61
|
-
printf("\e[01;34m#{repos
|
76
|
+
printf("\e[01;34m#{repos} (h:help)>> \e[0m")
|
62
77
|
input = STDIN.gets.strip
|
63
78
|
break if input =~ /\A\s*q\s*\Z/
|
64
79
|
exit if input =~ /\A\s*Q\s*\Z/
|
65
|
-
|
80
|
+
Repos[repos].send(input) unless input.empty?
|
66
81
|
end
|
67
82
|
end
|
68
83
|
end
|
69
84
|
|
70
85
|
def init(*args)
|
71
86
|
repos = pick(args,false)
|
87
|
+
|
72
88
|
repos.each do |x|
|
73
|
-
if File.exist?(File.expand_path(
|
89
|
+
if File.exist?(File.expand_path(Repos[x].path))
|
74
90
|
puts "\e[32m %-18s: already Initialized\e[0m" % [x]
|
75
91
|
next
|
76
92
|
end
|
77
93
|
puts "\e[32m %-18s: Initializing\e[0m" % [x]
|
78
|
-
|
94
|
+
Repos[x].init
|
79
95
|
end
|
80
96
|
end
|
81
97
|
|
82
98
|
def update(*args)
|
83
99
|
repos = pick(args,false)
|
100
|
+
|
84
101
|
repos.each do |x|
|
85
|
-
puts "\e[32m Updating #{
|
102
|
+
puts "\e[32m Updating #{Repos[x].path}:\e[0m"
|
86
103
|
next if !exist_path(x)
|
87
|
-
|
104
|
+
Repos[x].update
|
88
105
|
end
|
89
106
|
end
|
90
107
|
|
91
108
|
protected
|
92
|
-
def pick(args,
|
93
|
-
repos =
|
94
|
-
if
|
109
|
+
def pick(args,single=true)
|
110
|
+
repos = Repos.keys.grep(/#{args}/)
|
111
|
+
if single
|
95
112
|
if repos.size == 1
|
96
113
|
return repos
|
97
114
|
elsif repos.empty?
|
98
|
-
printf("\e[
|
115
|
+
printf("\e[31mNo Result About < #{args} >.\n\e[0m")
|
99
116
|
return false
|
100
117
|
else
|
101
118
|
return choose_one(repos)
|
@@ -108,18 +125,14 @@ class Eo
|
|
108
125
|
def choose_one(args)
|
109
126
|
puts "\e[33mPlease Choose One of them : \e[0m"
|
110
127
|
|
111
|
-
args
|
112
|
-
printf "\e[32m%-2d\e[0m %-22s" % [x+1,args[x].rstrip]
|
113
|
-
printf "\n" if (x+1)%3 == 0
|
114
|
-
end
|
115
|
-
printf "\n" if args.size%3 != 0
|
128
|
+
format_display(args)
|
116
129
|
|
117
130
|
num = choose_range(args.size)
|
118
131
|
return num ? [args[num-1]] : false
|
119
132
|
end
|
120
133
|
|
121
134
|
def choose_range(size)
|
122
|
-
printf "\e[33mPlease Input A Valid Number (1
|
135
|
+
printf "\e[33mPlease Input A Valid Number (1-#{size}) (q:quit): \e[0m"
|
123
136
|
num = STDIN.gets
|
124
137
|
return false if num =~ /q/i
|
125
138
|
choosed_num = num.strip.empty? ? 1 : num.to_i
|
@@ -127,13 +140,20 @@ class Eo
|
|
127
140
|
end
|
128
141
|
|
129
142
|
def exist_path(repos)
|
130
|
-
if File.exist?(File.expand_path(
|
131
|
-
Dir.chdir(File.expand_path(
|
143
|
+
if File.exist?(File.expand_path(Repos[repos].path))
|
144
|
+
Dir.chdir(File.expand_path(Repos[repos].path))
|
132
145
|
else
|
133
146
|
puts "\n l.l,Have You init \e[33m#{repos}\e[0m Repository?\n\n"
|
134
147
|
return false
|
135
148
|
end
|
136
149
|
end
|
137
150
|
|
151
|
+
def format_display(args)
|
152
|
+
args.each_index do |x|
|
153
|
+
printf "\e[32m%-2d\e[0m %-22s" % [x+1,args[x].rstrip]
|
154
|
+
printf "\n" if (x+1)%3 == 0
|
155
|
+
end
|
156
|
+
puts "\n" if args.size%3 != 0
|
157
|
+
end
|
138
158
|
end
|
139
159
|
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
$LOAD_PATH.unshift("#{ENV['HOME']}/.eo/",File.join(File.dirname(__FILE__)))
|
2
|
+
|
3
|
+
class Repository
|
4
|
+
attr_accessor :repo,:path,:_name_,:autorun
|
5
|
+
|
6
|
+
def initialize(opt={})
|
7
|
+
|
8
|
+
['repo','path','_name_','autorun'].each do |x|
|
9
|
+
eval "self.#{x} = opt.delete('#{x}')"
|
10
|
+
end
|
11
|
+
|
12
|
+
begin
|
13
|
+
scm = opt['scm'] || 'git'
|
14
|
+
require "scm/#{scm.downcase}"
|
15
|
+
extend eval "Scm::#{scm.capitalize}"
|
16
|
+
rescue LoadError
|
17
|
+
puts <<-DOC.gsub(/^(\s*\|)/,'')
|
18
|
+
|\e[33m#{opt[:_name_]}\e[0m
|
19
|
+
| \e[31mSorry,doesn't support < #{scm} > now.\e[0m
|
20
|
+
| \e[31mYou can define your Scm-Type in ~/.eo/scm.\e[0m
|
21
|
+
DOC
|
22
|
+
exit 0
|
23
|
+
end
|
24
|
+
|
25
|
+
if opt['cmd'] # Define Your Methods
|
26
|
+
opt['cmd'].each do |key,value|
|
27
|
+
self.class.send(:define_method, key, lambda { eval(value) } )
|
28
|
+
(@defined_methods ||= [] ) << [key,value]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def help
|
34
|
+
if @defined_methods
|
35
|
+
printf("Your Defined Methods :\n")
|
36
|
+
@defined_methods.each do |x|
|
37
|
+
puts " %-18s: %s" % [x.first, x.last]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
puts <<-DOC.gsub(/^\s*\|/,'')
|
42
|
+
|Usage:
|
43
|
+
| update Update
|
44
|
+
| shell/sh Goto shell
|
45
|
+
| help/h Show this help message
|
46
|
+
| q Quit this shell
|
47
|
+
| Q Exit this program
|
48
|
+
| <Hash Method> Run
|
49
|
+
| <Your Method> Run.if undefined by above
|
50
|
+
| <Shell Command> Run.if undefined by above
|
51
|
+
|e.g:\n \e[32m pwd \e[0m => The repository's path
|
52
|
+
DOC
|
53
|
+
end
|
54
|
+
alias h help
|
55
|
+
|
56
|
+
def shell
|
57
|
+
system("sh")
|
58
|
+
end
|
59
|
+
alias sh shell
|
60
|
+
|
61
|
+
def method_missing(m,*args)
|
62
|
+
# method missing -> shell command
|
63
|
+
result = system(m.to_s + " " + args.join(' '))
|
64
|
+
puts "\e[31mlol, Some Wrong?\e[0m" unless result
|
65
|
+
end
|
66
|
+
end
|
data/lib/eo/scm/git.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module Scm
|
2
|
+
module Git
|
3
|
+
def init
|
4
|
+
system("git clone #{self.repo} #{self.path}")
|
5
|
+
end
|
6
|
+
|
7
|
+
def update
|
8
|
+
old_commit = now_commit
|
9
|
+
system("git pull")
|
10
|
+
new_commit = now_commit
|
11
|
+
if new_commit != old_commit && self.autorun
|
12
|
+
self.autorun.split(';').each do |x|
|
13
|
+
eval x
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def now_commit
|
19
|
+
return `git log --pretty=format:%H -1`
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/eo/scm/svn.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module Scm
|
2
|
+
module Svn
|
3
|
+
def init
|
4
|
+
system("svn co #{self.repo} #{self.path}")
|
5
|
+
end
|
6
|
+
|
7
|
+
def update
|
8
|
+
old_commit = now_commit
|
9
|
+
system("svn update")
|
10
|
+
new_commit = now_commit
|
11
|
+
if new_commit != old_commit && self.autorun
|
12
|
+
self.autorun.split(';').each do |x|
|
13
|
+
eval x
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def now_commit
|
19
|
+
return `svn -l 1 log -q | sed '1d;3d' | awk '{print $1}'`
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: easyoperate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jinzhu Zhang
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-12-
|
12
|
+
date: 2008-12-22 00:00:00 +08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 1.2.
|
23
|
+
version: 1.2.1
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: hoe
|
@@ -53,7 +53,9 @@ files:
|
|
53
53
|
- lib/easyoperate.rb
|
54
54
|
- lib/eo.rb
|
55
55
|
- lib/eo/eo.rb
|
56
|
-
- lib/eo/
|
56
|
+
- lib/eo/repository.rb
|
57
|
+
- lib/eo/scm/git.rb
|
58
|
+
- lib/eo/scm/svn.rb
|
57
59
|
- test/test_easyoperate.rb
|
58
60
|
- test/test_eo_cli.rb
|
59
61
|
- test/test_helper.rb
|
data/lib/eo/scm.rb
DELETED
@@ -1,89 +0,0 @@
|
|
1
|
-
class Scm < Hash
|
2
|
-
|
3
|
-
def help
|
4
|
-
if self['cmd'] && cmd = self['cmd'].keys
|
5
|
-
printf("Your Defined Methods :\n")
|
6
|
-
cmd.each_index do |x|
|
7
|
-
puts " %-18s: %s" % [cmd[x].rstrip,self['cmd'][cmd[x]]]
|
8
|
-
end
|
9
|
-
puts
|
10
|
-
end
|
11
|
-
|
12
|
-
puts "Usage: "
|
13
|
-
puts " %-18s: %s." % ["update","Update"]
|
14
|
-
puts " %-18s: %s." % ["shell/sh","Goto shell"]
|
15
|
-
puts " %-18s: %s." % ["help/h","Show this help message"]
|
16
|
-
puts " %-18s: %s." % ["q","Quit this shell"]
|
17
|
-
puts " %-18s: %s." % ["Q","Exit this program"]
|
18
|
-
puts " %-18s: %s." % ["<Hash Method>","Run"]
|
19
|
-
puts " %-18s: %s." % ["<Your Method>","Run.if undefined by above"]
|
20
|
-
puts " %-18s: %s." % ["<Shell Command>","Run.if undefined by above"]
|
21
|
-
puts "e.g:\n \e[32m pwd \e[0m => The repository's path"
|
22
|
-
|
23
|
-
end
|
24
|
-
alias h help
|
25
|
-
|
26
|
-
def update
|
27
|
-
old_commit = now_commit
|
28
|
-
scm_update
|
29
|
-
new_commit = now_commit
|
30
|
-
if new_commit != old_commit && self['autorun']
|
31
|
-
self['autorun'].split(';').each do |x|
|
32
|
-
eval x
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def shell
|
38
|
-
system("sh")
|
39
|
-
end
|
40
|
-
alias sh shell
|
41
|
-
|
42
|
-
def init
|
43
|
-
command = case self['scm']
|
44
|
-
when /svn/ then 'svn co'
|
45
|
-
when /git/ then 'git clone'
|
46
|
-
when nil then 'git clone'
|
47
|
-
end
|
48
|
-
if command
|
49
|
-
system("#{command} #{self['repo']} #{self['path']}")
|
50
|
-
else
|
51
|
-
puts "\e[31mSorry,Maybe doesn't support #{self['scm']} rightnow.\e[0m"
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def method_missing(m,*args)
|
56
|
-
m = m.to_s
|
57
|
-
methods = self['cmd'] ? self['cmd'].keys.grep(m) : []
|
58
|
-
|
59
|
-
if methods.size == 1
|
60
|
-
eval self['cmd'][m]
|
61
|
-
else
|
62
|
-
result = system(m + " " + args.join(' '))
|
63
|
-
puts "\e[31mlol, Some Wrong?\e[0m" unless result
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
protected
|
68
|
-
def scm
|
69
|
-
return 'git' if !Dir.entries('.').grep(".git").empty?
|
70
|
-
return 'svn' if !Dir.entries('.').grep(".svn").empty?
|
71
|
-
end
|
72
|
-
|
73
|
-
def scm_update
|
74
|
-
case scm
|
75
|
-
when /git/ then system("git pull")
|
76
|
-
when /svn/ then system("svn update")
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def now_commit
|
81
|
-
case scm
|
82
|
-
when /git/ then return `git log --pretty=format:%H -1`
|
83
|
-
when /svn/ then return `svn -l 1 log -q | grep "\w" | awk '{print $1}'`
|
84
|
-
else
|
85
|
-
puts "\e[31mSorry,Only Support SVN/GIT\e[0m"
|
86
|
-
exit
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|