xlogin 0.15.5 → 0.16.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
  SHA256:
3
- metadata.gz: 72f04ff3e418dcd7b8498dad0913266a091e9775da6f3cbe620d8d5525a02fbf
4
- data.tar.gz: 933cc35fcf553e81df5d21505fdd7489579fe3aae38928ee7e0b91c3266fc559
3
+ metadata.gz: aae85b41321af336f469aa967987f88912d22087748c6b646adb699688c0b17f
4
+ data.tar.gz: 26dcf9ed1c173bc43d247ab1a1339c8df0586c9734ea0679f5dd5e7fd70bd83a
5
5
  SHA512:
6
- metadata.gz: bb94c967fffcf04d61b0fe387d9ce56c40cbb6e0d62e89f8af93eec4b3c6eb49371b3a053691938a0a55a2d546e553c894e60b0843db1eb7c9119910c7dbcc60
7
- data.tar.gz: 590da1a22f0e5d7b3b4022719716d05b98ad9105d1ce13fbf4399be64be961ee7b5308b446be2afaae1b73733000c729bf1ca49e0f0631ca4b0236b72beebc11
6
+ metadata.gz: f7eeeecc2b10c5bb0a6bbca0ba80a7b71611cb04733d59271370641930c391aa604bdd06ca96cfbbfad05b32a745d62869688a3e703330a1742f7bab5df5c59c
7
+ data.tar.gz: a27419c164f9387f8633fa7610c7507d5febd8f9ae1d1d3eb77bf2ab6b04a96133c83e40265192927432b92994c02c3c8386b1088882fc5679041aea9d6f9134
data/lib/xlogin.rb CHANGED
@@ -21,14 +21,14 @@ module Xlogin
21
21
  end
22
22
 
23
23
  class << self
24
- def list(*patterns)
25
- factory.list_hostinfo(*patterns)
26
- end
27
-
28
24
  def find(*patterns)
29
25
  list(*patterns).first
30
26
  end
31
27
 
28
+ def list(*patterns)
29
+ factory.list_hostinfo(*patterns)
30
+ end
31
+
32
32
  def get(args, **opts, &block)
33
33
  session = case args
34
34
  when Hash then factory.build(**args.merge(**opts))
@@ -26,14 +26,14 @@ module Xlogin
26
26
  end
27
27
 
28
28
  def list_hostinfo(*patterns)
29
- patterns = patterns.flat_map{ |e| e.split(/\s+/) }.compact
29
+ patterns = patterns.compact.flat_map{ |e| e.split(/\s+/) }
30
30
  return @inventory.values if patterns.empty?
31
31
 
32
32
  values1 = patterns.map do |pattern|
33
33
  values2 = pattern.split(',').map do |entry|
34
34
  key, val = entry.to_s.split(':')
35
35
  key, val = 'name', key if val.nil?
36
- @inventory.values.select{ |e| File.fnmatch(val, e[key.to_sym]) }
36
+ @inventory.values.select{ |e| File.fnmatch(val, e[key.to_sym], File::FNM_EXTGLOB) }
37
37
  end
38
38
  values2.reduce(&:&) || []
39
39
  end
@@ -78,41 +78,36 @@ module Xlogin
78
78
 
79
79
  def run_task
80
80
  buffer = StringIO.new
81
- loggers = []
82
- loggers << log if log
83
- loggers << $stdout if !silent && !Rake.application.options.always_multitask
84
- loggers << buffer
81
+ loggers = [buffer]
82
+ loggers << log if log
83
+ loggers << STDOUT if !silent && !Rake.application.options.always_multitask
85
84
 
86
85
  session = Xlogin.get(name, log: loggers, timeout: timeout)
86
+ instance_exec(session, &@runner)
87
87
 
88
- @runner.call(session)
89
- $stdout.print log_text(buffer.string) if !silent && Rake.application.options.always_multitask
90
-
88
+ print(buffer.string) if !silent && Rake.application.options.always_multitask
91
89
  return true
92
90
  rescue => e
93
91
  RakeTask.shutdown! if fail_on_error
94
92
 
95
- session.comment(e.to_s, lf: false, color: :red) if session
96
- if Rake.application.options.always_multitask && !buffer.string.empty?
97
- $stderr.print log_text(buffer.string + "\n").colorize(color: :red)
98
- end
99
-
93
+ session.log_message(e.to_s.colorize(color: :red)) if session
94
+ print(buffer.string + "\n", color: :red) if Rake.application.options.always_multitask
100
95
  return false
101
96
  ensure
102
97
  session.close rescue nil
103
98
  end
104
99
 
105
- def log_text(text)
106
- text.lines.map{ |line| "#{Time.now.iso8601} #{name}\t|#{line.gsub(/^.*\r/, '')}" }.join
100
+ def puts(text, **opt)
101
+ print(text + "\n", **opt)
107
102
  end
108
103
 
109
- end
110
-
111
- module SessionModule
104
+ def print(text, **opt)
105
+ return if text.empty?
112
106
 
113
- def comment(line, lf: true, **color)
114
- write_log(line.chomp.colorize({color: :light_white}.merge(**color)))
115
- cmd('') if lf
107
+ text = text.gsub("\r", '')
108
+ text = text.lines.map{ |line| "#{name}\t|#{line}" }.join if Rake.application.options.always_multitask
109
+ text = text.colorize(**opt)
110
+ $stdout.print(text)
116
111
  end
117
112
 
118
113
  end
@@ -43,7 +43,10 @@ module Xlogin
43
43
 
44
44
  super(args)
45
45
  rescue => e
46
- retry unless (num_try += 1) > (@config.retry || 0)
46
+ unless (num_try += 1) > (@config.retry || 0)
47
+ sleep 2.0 ** (num_try)
48
+ retry
49
+ end
47
50
  raise e
48
51
  end
49
52
  end
@@ -81,7 +84,7 @@ module Xlogin
81
84
  return waitfor(prompt_pattern) if args.empty?
82
85
 
83
86
  line = super(*args) do |recv|
84
- write_log(recv)
87
+ log_message(recv)
85
88
  block.call(recv) if block
86
89
  end
87
90
 
@@ -120,11 +123,11 @@ module Xlogin
120
123
  end
121
124
  end
122
125
 
123
- private
124
- def write_log(text)
126
+ def log_message(text)
125
127
  @loggers.each{ |_, logger| logger.syswrite(text) if logger }
126
128
  end
127
129
 
130
+ private
128
131
  def build_log(log)
129
132
  case log
130
133
  when String
@@ -25,7 +25,7 @@ module Xlogin
25
25
  session = deq
26
26
  Thread.handle_interrupt(Exception => :immediate){ yield session }
27
27
  ensure
28
- enq session
28
+ enq session if session
29
29
  end
30
30
 
31
31
  def close
@@ -38,8 +38,9 @@ module Xlogin
38
38
  def deq
39
39
  @mutex.synchronize do
40
40
  if @queue.empty? && @count < @size
41
+ session = Xlogin.get(@args, **@opts)
41
42
  @count += 1
42
- return Xlogin.get(@args, **@opts)
43
+ return session
43
44
  end
44
45
  end
45
46
 
data/lib/xlogin/telnet.rb CHANGED
@@ -38,7 +38,7 @@ module Xlogin
38
38
  @sock.syswrite(bs)
39
39
  when @sock
40
40
  begin
41
- write_log(fh.readpartial(1024))
41
+ log_message(fh.readpartial(1024))
42
42
  rescue Errno::EAGAIN
43
43
  retry
44
44
  end
@@ -1,3 +1,3 @@
1
1
  module Xlogin
2
- VERSION = "0.15.5"
2
+ VERSION = "0.16.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xlogin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.5
4
+ version: 0.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - haccht
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-21 00:00:00.000000000 Z
11
+ date: 2021-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: net-telnet