pjam 0.1.0 → 0.1.3

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