docker-template 0.4.0 → 0.5.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c9f3e9bddac3bae28544d5f0038392b1759cecc5
4
- data.tar.gz: 21e1d6d93297729b417254d0485993abb255eb72
3
+ metadata.gz: b075d40fa03bed4ef57a9a788c53c778a60cb053
4
+ data.tar.gz: b8183048b12f4547fd711e0e96ac08bc543e3cd5
5
5
  SHA512:
6
- metadata.gz: 229ccdf9256aafe1b25412b4e3822c4c4460f691963850370cb4216ae96091b0075911292d9f258879d8f750506ec062e2910500143e31acc7bb0c6ef4ebf259
7
- data.tar.gz: 02c5c493e25225d79aadfa50c8d8ad2622c01d2b898aa25890bb568ef883194a54ede235fb439cb430e3d619f194af3ca1c90fa5c7b686f3471610429ad87edc
6
+ metadata.gz: df02551d54168a59d5095d51f0a1f4763a07e4a16c953c40b3b4597c34941b03dc735451e043a30cd434acff0e6184e0cdcd7653b82492ad085bf31df4640f9e
7
+ data.tar.gz: 0fa1f9443e84aff442fe796df646ab06f44822ebbb1f4397d92b42988539c09b2a3ede58afa8f2bf56e2664cf993d1d51daebc285bc525aa5cc65c70b2827318
data/Rakefile CHANGED
@@ -41,13 +41,13 @@ module CompList
41
41
  def normalize_command(command)
42
42
  if command.is_a?(Array)
43
43
  then command.map do |key|
44
- key.gsub(
45
- /_/, "-"
44
+ key.tr(
45
+ "_", "-"
46
46
  )
47
47
  end
48
48
  else
49
- command.gsub(
50
- /_/, "-"
49
+ command.tr(
50
+ "_", "-"
51
51
  )
52
52
  end
53
53
  end
@@ -85,8 +85,7 @@ module CompList
85
85
  )}"
86
86
  end
87
87
 
88
- ary |= \
89
- opt.aliases
88
+ ary | opt.aliases
90
89
  end
91
90
  end
92
91
 
data/comp/list CHANGED
@@ -7,7 +7,6 @@
7
7
  # rubocop:disable Style/ElseAlignment
8
8
  # ----------------------------------------------------------------------------
9
9
 
10
-
11
10
  ARGV.shift
12
11
  require "pathutil"
13
12
  require "msgpack"
@@ -83,3 +83,13 @@ module Docker
83
83
  end
84
84
  end
85
85
  end
86
+
87
+ # ----------------------------------------------------------------------------
88
+ # Trick extras into merging array's into array's for us so users can inherit.
89
+ # ----------------------------------------------------------------------------
90
+
91
+ class Array
92
+ def deep_merge(new_)
93
+ self | new_
94
+ end
95
+ end
@@ -63,10 +63,13 @@ module Docker
63
63
  # ----------------------------------------------------------------------
64
64
 
65
65
  def aliased_img
66
- return unless alias?
67
- @aliased_img ||= Docker::Image.get(
68
- aliased_repo.to_s
69
- )
66
+ if alias?
67
+ then @aliased_img ||= begin
68
+ Docker::Image.get(
69
+ aliased_repo ? aliased_repo.to_s : aliased_tag
70
+ )
71
+ end
72
+ end
70
73
 
71
74
  rescue Docker::Error::NotFoundError
72
75
  if alias?
@@ -137,10 +140,19 @@ module Docker
137
140
  alias_setup
138
141
 
139
142
  if @repo.buildable?
140
- aliased = self.class.new(aliased_repo)
141
- aliased.build unless aliased_img
142
- Notify.alias(self)
143
+ if (repo = aliased_repo)
144
+ aliased = self.class.new(repo)
145
+ unless aliased_img
146
+ aliased.build
147
+ end
148
+
149
+ elsif !aliased_img
150
+ raise(
151
+ Error::ImageNotFound, aliased_tag
152
+ )
153
+ end
143
154
 
155
+ Notify.alias(self)
144
156
  aliased_img.tag(
145
157
  @repo.to_tag_h
146
158
  )
@@ -294,6 +306,7 @@ module Docker
294
306
 
295
307
  # ----------------------------------------------------------------------
296
308
 
309
+ rb_delegate :aliased_tag, :to => "repo.metadata"
297
310
  rb_delegate :aliased_repo, {
298
311
  :to => :repo, :alias_of => :aliased
299
312
  }
@@ -14,22 +14,25 @@ module Docker
14
14
  # ----------------------------------------------------------------------
15
15
 
16
16
  def context(builder, context)
17
- if builder.alias? && builder.aliased_repo.cache_dir.exist?
18
- parent_cache_dir = builder.aliased_repo.cache_dir
19
- $stderr.puts Simple::Ansi.yellow("Copying #{builder.aliased_repo} context to #{builder.repo}")
20
- cache_dir = builder.repo.cache_dir
17
+ builder.repo.cache_dir.rm_rf
18
+ $stderr.puts Simple::Ansi.yellow(format("Copying context for %s", builder.repo))
19
+ cache_dir = builder.repo.cache_dir
20
+ cache_dir.parent.mkdir_p
21
21
 
22
- parent_cache_dir.cp_r(cache_dir.tap(
23
- &:rm_rf
24
- ))
25
- elsif context
26
- builder.repo.cache_dir.rm_rf
27
- $stderr.puts Simple::Ansi.yellow("Copying context for #{builder.repo}")
28
- cache_dir = builder.repo.cache_dir
29
- cache_dir.parent.mkdir_p
22
+ readme(builder)
23
+ context.cp_r(cache_dir.tap(
24
+ &:rm_rf
25
+ ))
26
+ end
27
+
28
+ # ----------------------------------------------------------------------
29
+ # rubocop:disable Metrics/LineLength
30
+ # ----------------------------------------------------------------------
30
31
 
31
- readme(builder)
32
- context.cp_r(cache_dir.tap(
32
+ def aliased_context(builder)
33
+ if builder.aliased_repo.cache_dir.exist?
34
+ $stderr.puts Simple::Ansi.yellow(format("Copying %s context to %s", builder.aliased_repo, builder.repo))
35
+ builder.aliased_repo.cache_dir.cp_r(builder.repo.cache_dir.tap(
33
36
  &:rm_rf
34
37
  ))
35
38
  end
@@ -38,13 +41,18 @@ module Docker
38
41
  # ----------------------------------------------------------------------
39
42
  # Cleanup the context caches, removing the caches we no longer need.
40
43
  # ----------------------------------------------------------------------
44
+ # rubocop:enable Metrics/LineLength
45
+ # ----------------------------------------------------------------------
41
46
 
42
47
  def cleanup(repo)
43
- repo.cache_dir.parent.children.each do |file|
44
- unless repo.metadata.tags.include?(file.basename)
45
- $stdout.puts Simple::Ansi.yellow("Removing %s." % [
48
+ cache_dir = repo.cache_dir.parent
49
+
50
+ if repo.cacheable? && cache_dir.exist?
51
+ then cache_dir.children.each do |file|
52
+ next unless repo.metadata.tags.include?(file.basename)
53
+ $stdout.puts Simple::Ansi.yellow(format("Removing %s.",
46
54
  file.relative_path_from(Template.root)
47
- ])
55
+ ))
48
56
 
49
57
  file.rm_rf
50
58
  end
@@ -28,9 +28,9 @@ module Docker
28
28
  # ----------------------------------------------------------------------
29
29
 
30
30
  def build(*args)
31
- repos = nil; with_profiling do
32
- repos = Parser.new(args, options).parse.tap { |o| o.map( \
33
- &:build) }.uniq(&:name).map(&:clean)
31
+ with_profiling do
32
+ Parser.new(args, options).parse.tap { |o| o.map(&:build) } \
33
+ .uniq(&:name).map(&:clean)
34
34
  end
35
35
 
36
36
  rescue Docker::Template::Error::StandardError => e
@@ -46,11 +46,13 @@ module Docker
46
46
  option :grep, :type => :boolean, :desc => "Make --only a Regexp search."
47
47
  option :only, :type => :string, :desc => "Only a specific repo."
48
48
 
49
+ # ----------------------------------------------------------------------
50
+ # rubocop:disable Metrics/AbcSize
49
51
  # ----------------------------------------------------------------------
50
52
 
51
53
  def list
52
54
  Parser.new([], {}).parse.each do |repo|
53
- repo_s = repo_s = repo.to_s.gsub(/^[^\/]+\//, "")
55
+ repo_s = repo.to_s.gsub(/^[^\/]+\//, "")
54
56
  next unless (only.is_a?(Regexp) && repo_s =~ only) \
55
57
  || (only && repo_s == only) || !only
56
58
 
@@ -58,12 +60,10 @@ module Docker
58
60
  $stderr.print " -> ", repo.aliased.to_s, "\n" if repo.alias?
59
61
  $stderr.puts unless repo.alias?
60
62
  end
61
- rescue Docker::Template::Error::StandardError => e
62
- $stderr.puts Simple::Ansi.red(e.message)
63
- exit e.respond_to?(:status) \
64
- ? e.status : 1
65
63
  end
66
64
 
65
+ # ----------------------------------------------------------------------
66
+ # rubocop:enable Metrics/AbcSize
67
67
  # ----------------------------------------------------------------------
68
68
 
69
69
  no_tasks do
@@ -94,6 +94,7 @@ module Docker
94
94
  MemoryProfiler.report(:top => 10_240) { yield }.pretty_print({\
95
95
  :to_file => "mem.txt"
96
96
  })
97
+
97
98
  rescue LoadError
98
99
  $stderr.puts "The gem 'memory_profiler' wasn't found."
99
100
  $stderr.puts "You can install it with `gem install memory_profiler'"
@@ -15,8 +15,8 @@ module Docker
15
15
 
16
16
  class PlaceHolderError < StandardError
17
17
  def initialize(error)
18
- super "PLACEHOLDER ERROR: %s" % (
19
- error
18
+ super format(
19
+ "PLACEHOLDER ERROR: %s", error
20
20
  )
21
21
  end
22
22
  end
@@ -74,16 +74,6 @@ module Docker
74
74
 
75
75
  # ----------------------------------------------------------------------
76
76
 
77
- class NoHookExists < StandardError
78
- def initialize(base, point)
79
- super "Unknown hook base '#{base}' or hook point '#{
80
- point
81
- }'"
82
- end
83
- end
84
-
85
- # ----------------------------------------------------------------------
86
-
87
77
  class NoRootMetadata < StandardError
88
78
  def initialize
89
79
  super "Metadata without the root flag must provide the root_metadata."
@@ -124,6 +114,16 @@ module Docker
124
114
  }"
125
115
  end
126
116
  end
117
+
118
+ # ----------------------------------------------------------------------
119
+
120
+ class ImageNotFound < StandardError
121
+ def initialize(image)
122
+ super "Unable to find the image #{
123
+ image
124
+ }"
125
+ end
126
+ end
127
127
  end
128
128
  end
129
129
  end
@@ -60,6 +60,8 @@ module Docker
60
60
  # })
61
61
  # ```
62
62
  # ----------------------------------------------------------------------
63
+ # rubocop:disable Metrics/AbcSize
64
+ # ----------------------------------------------------------------------
63
65
 
64
66
  def initialize(overrides, root: nil)
65
67
  if root.is_a?(self.class)
@@ -89,6 +91,8 @@ module Docker
89
91
  end
90
92
  end
91
93
 
94
+ # ----------------------------------------------------------------------
95
+ # rubocop:enable Metrics/AbcSize
92
96
  # ----------------------------------------------------------------------
93
97
 
94
98
  def _shas
@@ -128,12 +132,13 @@ module Docker
128
132
  end
129
133
  end
130
134
 
131
- true
132
135
  else
133
- @data.include?(
136
+ return @data.include?(
134
137
  val
135
138
  )
136
139
  end
140
+
141
+ true
137
142
  end
138
143
 
139
144
  # ----------------------------------------------------------------------
@@ -257,6 +262,9 @@ module Docker
257
262
  # --------------------------------------------------------------------
258
263
  # Fallback, determining which route is the best. Tag > Group > All.
259
264
  # --------------------------------------------------------------------
265
+ # rubocop:disable Metrics/CyclomaticComplexity
266
+ # rubocop:disable Metrics/PerceivedComplexity
267
+ # ----------------------------------------------------------------------
260
268
 
261
269
  def fallback(group: current_group, tag: current_tag, query_data: @data)
262
270
  if query_data.is_a?(self.class)
@@ -277,6 +285,9 @@ module Docker
277
285
  end
278
286
 
279
287
  # --------------------------------------------------------------------
288
+ # rubocop:enable Metrics/CyclomaticComplexity
289
+ # rubocop:enable Metrics/PerceivedComplexity
290
+ # ----------------------------------------------------------------------
280
291
 
281
292
  def for_all(query_data: @data)
282
293
  if query_data.is_a?(self.class)
@@ -430,6 +441,9 @@ module Docker
430
441
  end
431
442
  end
432
443
 
444
+ # ----------------------------------------------------------------------
445
+ # rubocop:disable Metrics/CyclomaticComplexity
446
+ # rubocop:disable Metrics/PerceivedComplexity
433
447
  # ----------------------------------------------------------------------
434
448
 
435
449
  def to_a(raw: false, shell: false)
@@ -450,11 +464,16 @@ module Docker
450
464
  end
451
465
  end
452
466
 
467
+ # ----------------------------------------------------------------------
468
+ # rubocop:eanble Metrics/CyclomaticComplexity
469
+ # rubocop:eanble Metrics/PerceivedComplexity
453
470
  # ----------------------------------------------------------------------
454
471
  # Convert a `Metadata' into a normal hash. If `self' is queryable then
455
472
  # we go and start merging values smartly. This means that we will merge
456
473
  # all the arrays into one another and we will merge hashes into hashes.
457
474
  # ----------------------------------------------------------------------
475
+ # rubocop:disable Metrics/AbcSize
476
+ # ----------------------------------------------------------------------
458
477
 
459
478
  def to_h(raw: false)
460
479
  return @data.to_h if raw || !queryable? || !mergeable_hash?
@@ -487,6 +506,8 @@ module Docker
487
506
  end
488
507
  end
489
508
 
509
+ # ----------------------------------------------------------------------
510
+ # rubocop:enable Metrics/AbcSize
490
511
  # ----------------------------------------------------------------------
491
512
 
492
513
  def mergeable_hash?(key = nil)
@@ -564,7 +585,7 @@ module Docker
564
585
 
565
586
  private
566
587
  def string_wrapper(obj, shell: false)
567
- return obj if obj == true || obj == false || obj.nil?
588
+ return obj if obj == true || obj == false || obj.nil?
568
589
  return obj.to_s(:shell => shell) if obj.is_a?(self.class)
569
590
  !obj.is_a?(Array) ? obj.to_s : obj.join(
570
591
  "\s"
@@ -37,9 +37,9 @@ module Docker
37
37
 
38
38
  private
39
39
  def cache_context
40
- if @repo.cacheable?
41
- Cache.context self, @context
42
- end
40
+ return unless @repo.cacheable?
41
+ return Cache.aliased_context(self) if alias?
42
+ Cache.context(self, @context)
43
43
  end
44
44
  end
45
45
  end
@@ -25,7 +25,7 @@ module Docker
25
25
 
26
26
  def alias(builder)
27
27
  repo = builder.repo
28
- aliased_repo = builder.aliased_repo
28
+ aliased_repo = builder.aliased_repo || builder.aliased_tag
29
29
  msg = Simple::Ansi.green("Aliasing #{repo} -> #{aliased_repo}")
30
30
  $stderr.puts msg
31
31
  end
@@ -32,6 +32,8 @@ module Docker
32
32
  then raise Error::RepoNotFound
33
33
  end
34
34
 
35
+ # ----------------------------------------------------------------------
36
+ # rubocop:disable Metrics/AbcSize
35
37
  # ----------------------------------------------------------------------
36
38
 
37
39
  def parse
@@ -42,14 +44,21 @@ module Docker
42
44
  }
43
45
 
44
46
  all.each do |v|
45
- hash = to_repo_hash(v)
47
+ hash = self.class.to_repo_hash(
48
+ v
49
+ )
50
+
46
51
  if hash.empty?
47
- raise Docker::Template::Error::BadRepoName, v
52
+ raise(Docker::Template::Error::BadRepoName,
53
+ v
54
+ )
48
55
 
49
56
  else
50
57
  Repo.new(hash, @argv).to_repos.each do |r|
51
- r.alias?? repos[:aliases] << r : r.builder.scratch?? \
52
- repos[:scratch] << r : repos[:simple] << r
58
+ r.alias?? repos[:aliases] << r : \
59
+ if r.builder.scratch?
60
+ repos[:scratch] << r else repos[:simple] << r
61
+ end
53
62
  end
54
63
  end
55
64
  end
@@ -59,10 +68,11 @@ module Docker
59
68
  )
60
69
  end
61
70
 
71
+ # ----------------------------------------------------------------------
72
+ # rubocop:enable Metrics/AbcSize
62
73
  # ----------------------------------------------------------------------
63
74
 
64
- private
65
- def to_repo_hash(val)
75
+ def self.to_repo_hash(val)
66
76
  data = val.split(SPLIT_REGEXP)
67
77
 
68
78
  return "name" => data[0] if data.one?
@@ -72,6 +82,15 @@ module Docker
72
82
 
73
83
  {}
74
84
  end
85
+
86
+ # ----------------------------------------------------------------------
87
+
88
+ def self.full_name?(val)
89
+ parsed = to_repo_hash(val)
90
+ parsed.key?("name") && (parsed.key?("user") || parsed.key?(
91
+ "tag"
92
+ ))
93
+ end
75
94
  end
76
95
  end
77
96
  end
@@ -13,7 +13,12 @@ module Docker
13
13
 
14
14
  def initialize(*hashes)
15
15
  @base_meta = hashes.compact.reduce(:deep_merge).freeze
16
- raise Error::RepoNotFound, name unless root.exist?
16
+
17
+ unless root.exist?
18
+ raise(
19
+ Error::RepoNotFound, name
20
+ )
21
+ end
17
22
  end
18
23
 
19
24
  # ----------------------------------------------------------------------
@@ -21,9 +26,10 @@ module Docker
21
26
  # ----------------------------------------------------------------------
22
27
 
23
28
  def pushable?
24
- (metadata["push"] || metadata["push_only"]) && !metadata[
25
- "cache_only"
26
- ]
29
+ (metadata["push"] || metadata["push_only"]) &&
30
+ !metadata["cache_only"] && !metadata[
31
+ "clean_only"
32
+ ]
27
33
  end
28
34
 
29
35
  # ----------------------------------------------------------------------
@@ -31,9 +37,10 @@ module Docker
31
37
  # ----------------------------------------------------------------------
32
38
 
33
39
  def cacheable?
34
- (metadata["cache"] || metadata["cache_only"]) && !metadata[
35
- "push_only"
36
- ]
40
+ (metadata["cache"] || metadata["cache_only"]) &&
41
+ !metadata[
42
+ "push_only"
43
+ ]
37
44
  end
38
45
 
39
46
  # ----------------------------------------------------------------------
@@ -41,9 +48,10 @@ module Docker
41
48
  # ----------------------------------------------------------------------
42
49
 
43
50
  def buildable?
44
- !metadata["push_only"] && !metadata["cache_only"] && !metadata[
45
- "clean_only"
46
- ]
51
+ !metadata["push_only"] && !metadata["cache_only"] &&
52
+ !metadata[
53
+ "clean_only"
54
+ ]
47
55
  end
48
56
 
49
57
  # ----------------------------------------------------------------------
@@ -52,11 +60,25 @@ module Docker
52
60
  # ----------------------------------------------------------------------
53
61
 
54
62
  def aliased
55
- if alias?
63
+ full = Parser.full_name?(
64
+ metadata.aliased_tag
65
+ )
66
+
67
+ if alias? && full
68
+ self.class.new(to_h.merge(Parser.to_repo_hash(
69
+ metadata.aliased_tag
70
+ )))
71
+
72
+ elsif alias?
56
73
  self.class.new(to_h.merge({
57
74
  "tag" => metadata.aliased_tag
58
75
  }))
59
76
  end
77
+
78
+ rescue Error::RepoNotFound => e
79
+ unless full
80
+ raise e
81
+ end
60
82
  end
61
83
 
62
84
  # ----------------------------------------------------------------------
@@ -6,6 +6,6 @@
6
6
 
7
7
  module Docker
8
8
  module Template
9
- VERSION = "0.4.0"
9
+ VERSION = "0.5.0"
10
10
  end
11
11
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docker-template
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordon Bedwell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-14 00:00:00.000000000 Z
11
+ date: 2016-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor