forked from torquebox/torquebox
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Rakefile
133 lines (119 loc) · 2.92 KB
/
Rakefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
require 'highline'
require 'open3'
ROOT_REPOSITORY=File.dirname( __FILE__ )
task 'init' do
run( "git submodule update --init" )
end
task 'dev-init'=>[ 'init' ] do
each_repository( :up ) do
run "git checkout master"
end
end
task 'add-commit-remotes' do
each_repository do |repo|
run( 'git remote show origin -n' ) do |stdout|
lines = stdout.readlines
url_line = lines[1].strip
remote_name, remote_url = url_line.split
remote_url.strip!
github_regexp = %r(^git(@|://)github\.com(:|/)(torquebox/torquebox.*))
if ( remote_url =~ github_regexp )
`git remote show commit 2>&1 > /dev/null`
if ( $? != 0 )
tail = $3
if ( remote_url =~ /[email protected]/ )
run( "git remote add commit #{remote_url}", true, true )
else
pushable_url = "[email protected]:#{tail}"
run( "git remote add commit #{pushable_url}", true, true )
end
else
puts "remote 'commit' already exists, skipping"
end
end
end
end
end
task 'remove-tag' do
input = HighLine.new
tag_name = input.ask( "Remove what tag?" ).strip
puts "removing #{tag_name}"
each_repository do
run "git tag -d #{tag_name}", true, true
run "git push commit :#{tag_name}"
end
end
task 'commit-all' do
script = []
each_repository( :up ) do
script << "pushd #{Dir.pwd} && ( git commit -a || [ $? -eq 1 ] ) && popd"
end
puts script.join( " && \\\n " )
end
task 'push-all' do
each_repository( :up ) do
run "git push commit HEAD:master"
end
end
task 'status-all' do
each_repository( :up ) do
run "git status", true, true
end
end
task 'log-from' do
each_repository( :up ) do
run "git log #{ENV['FROM']}..HEAD"
end
end
def run(cmd,actually_run=true, ignore_exit=false, &block)
cmd.strip!
if ( $last_announced_dir != Dir.pwd )
$last_announced_dir = Dir.pwd
end
puts "execute [#{cmd}]"
if ( ! actually_run )
return
end
Open3.popen3( cmd ) do |stdin, stdout, stderr|
stdout_thread = Thread.new {
if ( block )
block.call( stdout )
else
while ( ! stdout.eof? )
puts stdout.readline
end
end
}
stderr_thread = Thread.new {
while ( !stderr.eof? )
puts stderr.readline
end
}
stdin.close()
stdout_thread.join
stderr_thread.join
end
return if ignore_exit
raise "Command failure, see output" if $? != 0
end
def each_repository(mode=:down,path=ROOT_REPOSITORY,&block)
Dir.chdir( path ) do
if ( mode == :down )
if ( File.exist?( '.git' ) )
puts "(in #{Dir.pwd})"
block.call
end
end
Dir['*'].each do |entry|
if ( File.directory?( entry ) && entry != 'target')
each_repository( mode, entry, &block )
end
end
if ( mode == :up )
if ( File.exist?( '.git' ) )
puts "(in #{Dir.pwd})"
block.call
end
end
end
end