popo 0.1.4 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/envy +63 -10
- data/lib/popo/constants.rb +1 -0
- data/lib/popo/git_utils.rb +26 -0
- data/lib/popo/runner.rb +27 -3
- data/lib/popo/sync.rb +20 -16
- data/lib/popo/version.rb +1 -1
- data/script/envyrc +1 -1
- metadata +8 -9
- data/script/envy +0 -24
data/bin/envy
CHANGED
@@ -1,16 +1,69 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
require 'optparse'
|
2
3
|
require 'yaml'
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
ENVYRC = File.expand_path(
|
5
|
+
module Popo
|
6
|
+
class Envy
|
7
|
+
POPO_CONFIG_FILE = 'popo.yml'
|
8
|
+
ENVYRC_FILE = 'envyrc'
|
9
|
+
BASH_PATH = `which bash`.strip
|
10
|
+
ENVY_CMD = `which env`.strip
|
11
|
+
ENVYRC = File.expand_path("../../script/#{ENVYRC_FILE}", __FILE__)
|
11
12
|
|
12
|
-
|
13
|
+
def self.boot(args)
|
14
|
+
options = {}
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
+
optparse = OptionParser.new do |opts|
|
17
|
+
opts.on('-C', '--chdir DIRECTORY', 'Changed to a given directory') do |d|
|
18
|
+
options[:directory] = d
|
19
|
+
end
|
20
|
+
end
|
16
21
|
|
22
|
+
optparse.parse!
|
23
|
+
|
24
|
+
self.new(args, options)
|
25
|
+
end
|
26
|
+
|
27
|
+
def initialize(args, options)
|
28
|
+
@root_path = args.shift
|
29
|
+
@options = options
|
30
|
+
@commands = []
|
31
|
+
|
32
|
+
# set commands
|
33
|
+
args.each do |a|
|
34
|
+
@commands << a
|
35
|
+
end
|
36
|
+
|
37
|
+
config_file = File.join(@root_path, POPO_CONFIG_FILE)
|
38
|
+
|
39
|
+
if File.exists?(config_file)
|
40
|
+
cfg = YAML.load_file(config_file)
|
41
|
+
@popo_path = cfg['path']
|
42
|
+
@popo_target = cfg['target']
|
43
|
+
else
|
44
|
+
raise "#{config_file} doesn't exist!"
|
45
|
+
end
|
46
|
+
|
47
|
+
if !@options[:directory].nil?
|
48
|
+
@directory = File.join(@popo_path, @options[:directory])
|
49
|
+
else
|
50
|
+
@directory = ''
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def run!
|
55
|
+
cmd = "#{ENVY_CMD} popo_path=#{@popo_path} \
|
56
|
+
popo_target=#{@popo_target} #{BASH_PATH} \
|
57
|
+
-c 'source #{ENVYRC}; #{@commands.join(' ')}'"
|
58
|
+
|
59
|
+
if @directory.empty?
|
60
|
+
`#{cmd}`
|
61
|
+
else
|
62
|
+
Dir.chdir(@directory) { `#{cmd}` }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
Popo::Envy.boot(ARGV).run!
|
69
|
+
exit $?.exitstatus
|
data/lib/popo/constants.rb
CHANGED
data/lib/popo/git_utils.rb
CHANGED
@@ -54,6 +54,32 @@ module Popo
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
57
|
+
|
58
|
+
def self.branch_diff(cwd, branches = ['master', 'development'])
|
59
|
+
if is_git?(cwd)
|
60
|
+
diff_msg = `#{GIT_CMD} log --abbrev-commit --format=short \
|
61
|
+
origin/#{branches[0]}..origin/#{branches[1]}`
|
62
|
+
|
63
|
+
parsed = diff_msg.scan(/(commit [0-9a-f]+)\n+(.*?)\n+(.*?)(?:\n|$)/)
|
64
|
+
|
65
|
+
puts "Commits in #{branches[0]} not found in #{branches[1]}"
|
66
|
+
|
67
|
+
parsed.each do |p|
|
68
|
+
commit_id = p[0].gsub(/commit/,'').strip
|
69
|
+
author = p[1].scan(/Author: (.*) <.*>/)
|
70
|
+
commit_msg = p[2].strip
|
71
|
+
|
72
|
+
Utils.say "#{commit_id} \<#{author}\> #{commit_msg}"
|
73
|
+
end
|
74
|
+
else
|
75
|
+
raise "#{cwd} is not a git repo!"
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.is_git?(cwd)
|
81
|
+
File.exists?(File.join(cwd, '.git'))
|
82
|
+
end
|
57
83
|
end
|
58
84
|
end
|
59
85
|
|
data/lib/popo/runner.rb
CHANGED
@@ -3,9 +3,10 @@ module Popo
|
|
3
3
|
include Constants
|
4
4
|
|
5
5
|
def self.boot(args)
|
6
|
-
Popo::Constants.const_set("BASH_CMD", `which bash`.strip)
|
7
|
-
Popo::Constants.const_set("
|
8
|
-
Popo::Constants.const_set("
|
6
|
+
Popo::Constants.const_set("BASH_CMD", `which bash 2>/dev/null`.strip)
|
7
|
+
Popo::Constants.const_set("ZSH_CMD", `which zsh 2>/dev/null`.strip)
|
8
|
+
Popo::Constants.const_set("ENV_CMD", `which env 2>/dev/null`.strip)
|
9
|
+
Popo::Constants.const_set("GIT_CMD", `which git 2>/dev/null`.strip)
|
9
10
|
|
10
11
|
self.new(args)
|
11
12
|
end
|
@@ -129,6 +130,10 @@ module Popo
|
|
129
130
|
puts "Pushing!"
|
130
131
|
when 'bash'
|
131
132
|
bash!
|
133
|
+
when 'zsh'
|
134
|
+
zsh!
|
135
|
+
when 'diff'
|
136
|
+
GitUtils.branch_diff(Dir.pwd)
|
132
137
|
else
|
133
138
|
puts "I don't know what to do."
|
134
139
|
end
|
@@ -152,6 +157,25 @@ module Popo
|
|
152
157
|
end
|
153
158
|
end
|
154
159
|
|
160
|
+
def zsh!
|
161
|
+
if Utils.has_popo_config?(Dir.pwd)
|
162
|
+
|
163
|
+
zdotdir = File.join(Dir.pwd, POPO_WORK_PATH, 'script')
|
164
|
+
target = POPO_CONFIG['target']
|
165
|
+
path = POPO_CONFIG['path']
|
166
|
+
location = POPO_CONFIG['location']
|
167
|
+
|
168
|
+
zshcmd = "%s popo_target=%s popo_path=%s \
|
169
|
+
popo_location=%s ZDOTDIR=%s\
|
170
|
+
%s" \
|
171
|
+
% [ENV_CMD, target, path, location, zdotdir, ZSH_CMD]
|
172
|
+
|
173
|
+
exec(zshcmd)
|
174
|
+
else
|
175
|
+
raise "#{POPO_YML_FILE} not found or it may be wrong!"
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
155
179
|
def get_config!
|
156
180
|
if File.exist?(File.join(ENV['HOME'], ".#{DEFAULT_CONFIG_FILE}"))
|
157
181
|
config_file_path = File.join(ENV['HOME'], ".#{DEFAULT_CONFIG_FILE}")
|
data/lib/popo/sync.rb
CHANGED
@@ -12,24 +12,26 @@ module Popo
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def gather
|
15
|
-
|
16
|
-
if repo =~ /\//
|
17
|
-
r = repo.split('/')
|
18
|
-
@info[:parent], @info[:name] = r
|
19
|
-
@info[:key] = [@info[:parent], @info[:name]].join('.')
|
20
|
-
@info[:path] = File.join(@app_root, @info[:parent], @info[:name])
|
15
|
+
trap("INT") { exit -1 }
|
21
16
|
|
22
|
-
|
17
|
+
if !@repos.empty?
|
18
|
+
@repos.each do |repo|
|
19
|
+
if repo =~ /\//
|
20
|
+
r = repo.split('/')
|
21
|
+
@info[:parent], @info[:name] = r
|
22
|
+
@info[:key] = [@info[:parent], @info[:name]].join('.')
|
23
|
+
@info[:path] = File.join(@app_root, @info[:parent], @info[:name])
|
23
24
|
|
24
|
-
|
25
|
-
else
|
26
|
-
gather_many(repo)
|
27
|
-
end
|
28
|
-
end
|
25
|
+
get_repo_values(@info[:key])
|
29
26
|
|
30
|
-
|
31
|
-
|
32
|
-
|
27
|
+
clone_or_update
|
28
|
+
else
|
29
|
+
gather_many(repo)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
else
|
33
|
+
if @cwd == @app_root
|
34
|
+
popo_folders = @db.get(POPO_DIRECTORY_KEY).split(',')
|
33
35
|
popo_folders.each { |p| gather_many(p) }
|
34
36
|
else
|
35
37
|
repo = File.basename(@cwd)
|
@@ -41,7 +43,9 @@ module Popo
|
|
41
43
|
def gather_many(repo)
|
42
44
|
children = @db.get_children(repo)
|
43
45
|
|
44
|
-
|
46
|
+
if children.empty?
|
47
|
+
raise "No values for parent key \'#{repo}\'."
|
48
|
+
end
|
45
49
|
|
46
50
|
children.each do |c|
|
47
51
|
@info[:key] = [repo, c].join('.')
|
data/lib/popo/version.rb
CHANGED
data/script/envyrc
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: popo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-02-07 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sequel
|
16
|
-
requirement: &
|
16
|
+
requirement: &6695400 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *6695400
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: sqlite3
|
27
|
-
requirement: &
|
27
|
+
requirement: &6694780 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *6694780
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: cableguy
|
38
|
-
requirement: &
|
38
|
+
requirement: &6692780 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *6692780
|
47
47
|
description: Ruby and rails repo tool
|
48
48
|
email:
|
49
49
|
- poymode@gmail.com
|
@@ -75,7 +75,6 @@ files:
|
|
75
75
|
- lib/templates/envy.yml
|
76
76
|
- popo.gemspec
|
77
77
|
- script/Rakefile
|
78
|
-
- script/envy
|
79
78
|
- script/envyrc
|
80
79
|
- script/poporc
|
81
80
|
- targets/beta.rb
|
data/script/envy
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'yaml'
|
3
|
-
|
4
|
-
ROOT_PATH = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
5
|
-
BASH_PATH = `which bash`.strip
|
6
|
-
ENV_PATH = `which env`.strip
|
7
|
-
|
8
|
-
env_config_file = File.join(ROOT_PATH, 'config/envy.yml')
|
9
|
-
|
10
|
-
if File.exists? env_config_file
|
11
|
-
env_conf = YAML.load_file(env_config_file)
|
12
|
-
popo_path = env_conf['popo_path']
|
13
|
-
popo_target = env_conf['popo_target']
|
14
|
-
envyrc = "#{ROOT_PATH}/#{env_conf['envyrc_path']}"
|
15
|
-
else
|
16
|
-
puts "envyrc file not found. Byebye!"
|
17
|
-
exit
|
18
|
-
end
|
19
|
-
|
20
|
-
cmd = ARGV.join(' ')
|
21
|
-
|
22
|
-
finale = "#{ENV_PATH} popo_path=#{popo_path} popo_target=#{popo_target} #{BASH_PATH} -c 'source #{envyrc}; cd #{popo_path}; #{cmd}'"
|
23
|
-
system(finale)
|
24
|
-
exit $?.exitstatus
|