pjam 0.1.0 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/bin/pjam +148 -41
  2. metadata +4 -5
data/bin/pjam CHANGED
@@ -8,37 +8,108 @@ include Term::ANSIColor
8
8
 
9
9
  opts = Trollop::options do
10
10
 
11
- version "pjam 0.0.1 (c) 2013 Alexey Melezhik / melezhik@gmail.com"
11
+ version "pjam 0.1.3 (c) 2013 Alexey Melezhik / melezhik@gmail.com"
12
12
  banner <<-EOS
13
- smart glue between pinto and your scm.
13
+ Pjam is a tool which enables automatic creation of perl applications distribution archives from source code using pinto
14
14
 
15
15
  Usage:
16
16
  pjam [options]
17
17
  where [options] are:
18
18
  EOS
19
19
 
20
- opt :p, "path to project", :type => :string
20
+ opt :p, "path to project root directory", :type => :string
21
+ opt :wd, "add dependencies for development", :default => false
22
+ opt :c, "path to pjam configuration file, should be relative to project root directory", :type => :string
21
23
  opt :skip_pinto, "skip pinto phase, only do distibution phase", :default => false
22
- opt :no_color, "do not colour output", :default => false
24
+ opt :update, "update distibution archive if it alerady exists in repository", :default => true
25
+ opt :dry_run, "run in dry-run mode; only upcoming changes will be shown, no action will be taken", :default => false
26
+ opt :no_color, "disable colour output", :default => false
23
27
  opt :no_misc, "do not add miscellaneous prerequisites", :default => false
24
28
  opt :only, "only add given source(s). multiple sources are separated by comma", :type => :string, :default => nil
25
29
  opt :only_pinto, "only do pinto phase, skip distribution phase", :default => false
30
+ opt :env, "set environmental varibales. use format env='a=1 b=2 c=3'", :type => :string, :default => nil
31
+
26
32
  end
27
33
 
28
34
  version_postfix = `date +-rev-%Y-%B-%d-%H-%M`.chomp!
29
35
 
36
+ if opts[:p].nil?
37
+ project_id = Dir.pwd
38
+ else
39
+ project_id = "#{Dir.pwd}/#{opts[:p]}"
40
+ end
41
+
42
+ wd_flag = ( opts[:wd] == true ) ? "--wd" : ""
43
+
44
+ local_lib = "#{project_id}/cpanlib"
45
+
46
+ if ((opts.has_key? :c) and (! opts[:c].nil? ))
47
+ config_path = "#{project_id}/#{opts[:c]}"
48
+ else
49
+ config_path = "#{project_id}/pjam.json"
50
+ end
51
+
52
+ env_string_arr = ['export PINTO_DEBUG=0']
53
+
54
+ unless opts[:env].nil?
55
+ opts[:env].split(' ').each do |ch|
56
+ env_string_arr << "export #{ch}"
57
+ end
58
+ end
59
+
60
+ env_string = env_string_arr.join ' && '
61
+
30
62
 
31
63
  if opts[:no_color] == true
32
- puts "generated version postfix: #{version_postfix}"
64
+ puts "path to pjam configuration file: #{config_path}"
33
65
  else
34
- puts dark { yellow { bold { "generated version postfix: #{version_postfix}" } } }
66
+ puts dark { green { bold { "path to pjam configuration file: #{config_path}" } } }
35
67
  end
36
68
 
37
- project_id = "#{Dir.pwd}/#{opts[:p]}"
38
- local_lib = "#{project_id}/cpanlib"
69
+ config = JSON.parse(File.read(config_path))
39
70
 
40
- if (opts[:p].nil? || opts[:p].empty?)
41
- Trollop::die :p, "must be set"
71
+ if config.has_key? 'repository'
72
+ repo_root = "-r #{config['repository']}"
73
+ else
74
+ repo_root = "-r #{ENV['PINTO_REPOSITORY_ROOT']}"
75
+ end
76
+
77
+ if opts[:no_color] == true
78
+ puts "pinto repository root: #{repo_root}"
79
+ else
80
+ puts dark { green { bold { "pinto repository root: #{repo_root}" } } }
81
+ end
82
+
83
+ if config.has_key? 'override'
84
+ override = config['override']
85
+ else
86
+ override = true
87
+ end
88
+
89
+ if opts[:no_color] == true
90
+ puts "override mode: #{override}"
91
+ else
92
+ puts dark { cyan { bold { "override mode: #{override}" } } }
93
+ end
94
+
95
+ sources_list = []
96
+ only_list = []
97
+ if opts[:only].nil?
98
+ sources_list = config['sources']
99
+ else
100
+ p_only = opts[:only].split(' ')
101
+ only_list = p_only
102
+ sources_list = config['sources'].select {|i| p_only.include? i }
103
+ end
104
+
105
+ compile_list = []
106
+ compile_list_pp = {}
107
+
108
+
109
+ if opts[:no_color] == true
110
+ puts "generated version postfix: #{version_postfix}"
111
+ else
112
+ puts dark { yellow { bold { "generated version postfix: #{version_postfix}" } } }
42
113
  end
43
114
 
44
115
 
@@ -48,16 +119,36 @@ else
48
119
  color_flag = ''
49
120
  end
50
121
 
51
- config = JSON.parse(File.read("#{project_id}/pjam.json"))
52
-
53
122
  misc_modules = []
54
123
 
55
- if config.has_key? 'modules' and opts[:no_misc] == false and opts[:skip_pinto] == false
124
+ if opts[:dry_run] == true
125
+ if opts[:no_color] == true
126
+ puts "dry-run mode is enabled; only upcoming changes will be shown; no action will be taken"
127
+ else
128
+ puts dark { magenta { bold { "dry-run mode is enabled; only upcoming changes will be shown; no action will be taken" } } }
129
+ end
130
+
131
+ sources_list.each do |src|
132
+ cmd = "cd #{project_id}/#{src} && svn log -r BASE:HEAD --verbose . > dry-run.log"
133
+ st = system(cmd) == true or raise "failed do cmd: #{cmd}"
134
+
135
+ if opts[:no_color] == true
136
+ puts "upcoming changes for #{src}:"
137
+ else
138
+ puts dark { magenta { bold { "upcoming changes for source #{src}:" } } }
139
+ end
140
+
141
+ puts File.read("#{project_id}/#{src}/dry-run.log")
142
+ end
143
+ exit(0)
144
+ end
145
+
146
+ if config.has_key? 'modules' and opts[:no_misc] == false
56
147
 
57
148
  if opts[:no_color] == true
58
- puts "pulling / compiling misc modules"
149
+ puts "pull misc modules to pinto repository"
59
150
  else
60
- puts dark { blue { bold { "pulling / compiling misc modules" } } }
151
+ puts dark { blue { bold { "pull misc modules to pinto repository" } } }
61
152
  end
62
153
 
63
154
  config['modules'].each do |m|
@@ -67,7 +158,7 @@ if config.has_key? 'modules' and opts[:no_misc] == false and opts[:skip_pinto] =
67
158
  else
68
159
  puts dark { magenta { bold { "pull #{m}" } } }
69
160
  end
70
- cmd ="pinto pull -s #{config['stack']} -v --use-default-message #{m} #{color_flag}"
161
+ cmd ="pinto #{repo_root} pull -s #{config['stack']} -v #{wd_flag} --use-default-message #{m} #{color_flag}"
71
162
  system(cmd) == true or raise "failed do cmd: #{cmd}"
72
163
 
73
164
  misc_modules << m
@@ -75,18 +166,6 @@ if config.has_key? 'modules' and opts[:no_misc] == false and opts[:skip_pinto] =
75
166
  end
76
167
  end
77
168
 
78
- sources_list = []
79
- only_list = []
80
- if opts[:only].nil?
81
- sources_list = config['sources']
82
- else
83
- p_only = opts[:only].split(/\s+/)
84
- only_list = p_only
85
- sources_list = config['sources'].select {|i| p_only.include? i }
86
- end
87
-
88
- compile_list = []
89
- compile_list_pp = {}
90
169
 
91
170
  sources_list.each do |src|
92
171
 
@@ -107,16 +186,34 @@ sources_list.each do |src|
107
186
  else
108
187
 
109
188
  if opts[:no_color] == true
110
- puts "add #{src} [#{distro_name}] to pinto"
189
+ puts "add source #{src} [#{distro_name}] to pinto"
111
190
  else
112
- puts dark { magenta { bold { "add #{src} [#{distro_name}] to pinto" } } }
191
+ puts dark { magenta { bold { "add source #{src} [#{distro_name}] to pinto" } } }
113
192
  end
114
193
 
115
- cmd ="cd #{project_id}/#{src} && pinto delete -v PINTO/#{distro_name} #{color_flag}"
116
- system(cmd) == true
194
+ if opts[:update] == false
195
+ if ((system("cd #{project_id}/#{src} && pinto #{repo_root} list -D #{distro_name} --no-color | grep PINTO/#{distro_name}")) == true)
196
+ if opts[:no_color] == true
197
+ puts "[#{distro_name}] already in pinto; skip update due to --no-update is enabled"
198
+ else
199
+ puts dark { blue { bold { "[#{distro_name}] already in pinto; skip update due to --no-update is enabled" } } }
200
+ end
201
+ update_distro = false
202
+ else
203
+ update_distro = true
204
+ end
205
+ else
206
+ update_distro = true
207
+ end
117
208
 
118
- cmd ="cd #{project_id}/#{src} && pinto add -s #{config['stack']} -v --use-default-message #{distro_name} #{color_flag}"
119
- system(cmd) == true or raise "failed do cmd: #{cmd}"
209
+ if update_distro == true
210
+ unless override == false
211
+ cmd ="cd #{project_id}/#{src} && pinto #{repo_root} delete -v PINTO/#{distro_name} #{color_flag}"
212
+ system(cmd) == true
213
+ end
214
+ cmd ="cd #{project_id}/#{src} && pinto #{repo_root} add -s #{config['stack']} -v #{wd_flag} --use-default-message #{distro_name} #{color_flag}"
215
+ system(cmd) == true or raise "failed do cmd: #{cmd}"
216
+ end
120
217
 
121
218
  compile_list << distro_name
122
219
  compile_list_pp[distro_name] = src
@@ -125,6 +222,15 @@ sources_list.each do |src|
125
222
 
126
223
  end
127
224
 
225
+ if opts[:no_color] == true
226
+ puts "update packages list file"
227
+ else
228
+ puts dark { magenta { bold { "update packages list file" } } }
229
+ end
230
+
231
+ cmd = "pinto #{repo_root} list -s #{config['stack']} --format %a/%f --no-color | sort | uniq > #{project_id}/packages.txt"
232
+ system(cmd) == true or raise "failed do cmd: #{cmd}"
233
+
128
234
  unless opts[:only_pinto] == true
129
235
 
130
236
  misc_modules.each do |m|
@@ -135,7 +241,7 @@ unless opts[:only_pinto] == true
135
241
  puts green { bold { "compile #{m}" } }
136
242
  end
137
243
 
138
- cmd = "pinto install -s #{config['stack']} -l #{local_lib} -o 'v' #{m} #{color_flag}"
244
+ cmd = "#{env_string} && pinto #{repo_root} install -s #{config['stack']} -l #{local_lib} -o 'q' #{m} #{color_flag}"
139
245
  system(cmd) == true or raise "failed do cmd: #{cmd}"
140
246
  end
141
247
 
@@ -148,7 +254,7 @@ unless opts[:only_pinto] == true
148
254
  puts green { bold { "compile #{compile_list_pp[d]} [#{d}]" } }
149
255
  end
150
256
 
151
- cmd = "pinto install -s #{config['stack']} -l #{local_lib} -o 'q' PINTO/#{d} #{color_flag}"
257
+ cmd = "#{env_string} && pinto #{repo_root} install -s #{config['stack']} -l #{local_lib} -o 'q' PINTO/#{d} #{color_flag}"
152
258
  system(cmd) == true or raise "failed do cmd: #{cmd}"
153
259
 
154
260
  end
@@ -156,9 +262,9 @@ unless opts[:only_pinto] == true
156
262
  if only_list.empty? or only_list.include? config['application']
157
263
 
158
264
  if opts[:no_color] == true
159
- puts "make distributive from #{config['application']}"
265
+ puts "make distributive from source #{config['application']}"
160
266
  else
161
- puts yellow { bold { "make distributive from #{config['application']}" } }
267
+ puts yellow { bold { "make distributive from source #{config['application']}" } }
162
268
  end
163
269
 
164
270
  cmd = "export version_postfix='#{version_postfix}' && cd #{project_id}/#{config['application']} && rm -rf cpanlib && mkdir cpanlib/ && cp -r #{local_lib}/* cpanlib/ && rm -rf *.gz && ./Build realclean --quiet 1>/dev/null && perl Build.PL --quiet 1>/dev/null 2>module_build.err.log && ./Build manifest --quiet 2>/dev/null 1>/dev/null && ./Build dist --quiet 1>/dev/null && ln -fs `ls #{project_id}/#{config['application']}/*.gz` #{project_id}/current.tar.gz && echo -n `ls *.gz` > #{project_id}/current.txt"
@@ -167,14 +273,15 @@ unless opts[:only_pinto] == true
167
273
 
168
274
 
169
275
  if opts[:no_color] == true
170
- puts "testing #{config['application']}"
276
+ puts "testing source #{config['application']}"
171
277
  else
172
- puts cyan { bold { "testing #{config['application']}" } }
278
+ puts cyan { bold { "testing source #{config['application']}" } }
173
279
  end
174
280
 
175
- cmd = "cd #{project_id} && pinto install -s #{config['stack']} -l #{local_lib} -o 'test-only' PINTO/`cat current.txt` #{color_flag}"
281
+ cmd = "cd #{project_id} && #{env_string} && pinto #{repo_root} install -s #{config['stack']} -l #{local_lib} -o 'test-only' PINTO/`cat current.txt` #{color_flag}"
176
282
  system(cmd) == true or raise "failed do cmd: #{cmd}"
177
283
 
178
284
  end
179
285
 
180
286
  end
287
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pjam
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-23 00:00:00.000000000 Z
12
+ date: 2013-12-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -75,9 +75,8 @@ dependencies:
75
75
  - - ! '>='
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0'
78
- description: Pjam is glue between pinto and your scm. In other words pjam is a wrapper
79
- around pinto client to create distribution archive of perl applications from source
80
- code using pinto.
78
+ description: Pjam is a tool which enables automatic creation of perl applications
79
+ distribution archives from source code using pinto
81
80
  email: melezhik@gmail.com
82
81
  executables:
83
82
  - pjam