zold 0.15.0 → 0.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/bin/zold +9 -6
- data/features/gem_package.feature +1 -1
- data/features/step_definitions/steps.rb +2 -2
- data/fixtures/merge/into-no-wallet/assert.rb +1 -1
- data/fixtures/merge/random-expenses/assert.rb +1 -1
- data/fixtures/merge/simple-case/assert.rb +1 -1
- data/lib/zold/age.rb +16 -8
- data/lib/zold/amount.rb +4 -2
- data/lib/zold/cached_wallets.rb +5 -6
- data/lib/zold/commands/clean.rb +15 -8
- data/lib/zold/commands/diff.rb +3 -3
- data/lib/zold/commands/fetch.rb +4 -4
- data/lib/zold/commands/list.rb +5 -4
- data/lib/zold/commands/merge.rb +2 -1
- data/lib/zold/commands/node.rb +14 -12
- data/lib/zold/commands/propagate.rb +2 -2
- data/lib/zold/commands/push.rb +3 -3
- data/lib/zold/commands/remove.rb +4 -1
- data/lib/zold/commands/routines/reconnect.rb +1 -0
- data/lib/zold/copies.rb +13 -14
- data/lib/zold/dir_items.rb +44 -0
- data/lib/zold/head.rb +1 -1
- data/lib/zold/key.rb +2 -2
- data/lib/zold/log.rb +2 -0
- data/lib/zold/node/async_entrance.rb +38 -28
- data/lib/zold/node/entrance.rb +4 -11
- data/lib/zold/node/farm.rb +9 -9
- data/lib/zold/node/front.rb +40 -25
- data/lib/zold/node/nodup_entrance.rb +4 -4
- data/lib/zold/node/safe_entrance.rb +2 -2
- data/lib/zold/node/spread_entrance.rb +5 -9
- data/lib/zold/node/sync_entrance.rb +2 -23
- data/lib/zold/patch.rb +2 -2
- data/lib/zold/remotes.rb +10 -6
- data/lib/zold/sync_wallets.rb +3 -22
- data/lib/zold/tree_wallets.rb +11 -6
- data/lib/zold/txns.rb +1 -1
- data/lib/zold/version.rb +1 -1
- data/lib/zold/wallet.rb +14 -5
- data/lib/zold/wallets.rb +5 -4
- data/test/commands/routines/test_spread.rb +1 -1
- data/test/commands/test_alias.rb +4 -4
- data/test/commands/test_clean.rb +14 -1
- data/test/commands/test_create.rb +2 -2
- data/test/commands/test_diff.rb +5 -5
- data/test/commands/test_fetch.rb +2 -2
- data/test/commands/test_merge.rb +19 -19
- data/test/commands/test_node.rb +1 -1
- data/test/commands/test_pay.rb +7 -6
- data/test/commands/test_propagate.rb +2 -1
- data/test/commands/test_pull.rb +1 -1
- data/test/commands/test_push.rb +1 -1
- data/test/commands/test_remove.rb +57 -0
- data/test/commands/test_taxes.rb +1 -1
- data/test/fake_home.rb +11 -8
- data/test/node/fake_node.rb +2 -2
- data/test/node/test_async_entrance.rb +24 -8
- data/test/node/test_emission.rb +2 -2
- data/test/node/test_entrance.rb +8 -6
- data/test/node/test_farm.rb +1 -1
- data/test/node/test_front.rb +42 -33
- data/test/node/test_nodup_entrance.rb +2 -2
- data/test/node/test_safe_entrance.rb +5 -5
- data/test/node/test_spread_entrance.rb +3 -3
- data/test/node/test_sync_entrance.rb +1 -1
- data/test/test__helper.rb +3 -29
- data/test/test_cached_wallets.rb +1 -1
- data/test/test_copies.rb +4 -2
- data/test/test_dir_items.rb +88 -0
- data/test/test_key.rb +2 -2
- data/test/test_log.rb +38 -0
- data/test/test_patch.rb +11 -11
- data/test/test_prefixes.rb +1 -1
- data/test/test_remotes.rb +12 -6
- data/test/test_sync_wallets.rb +6 -6
- data/test/test_tax.rb +4 -4
- data/test/test_tree_wallets.rb +16 -2
- data/test/test_wallet.rb +26 -26
- data/test/test_wallets.rb +5 -2
- data/test/test_zold.rb +2 -2
- data/test/upgrades/test_protocol_up.rb +1 -1
- data/upgrades/move_wallets_into_tree.rb +1 -1
- data/upgrades/protocol_up.rb +3 -3
- data/upgrades/rename_foreign_wallets.rb +1 -1
- data/zold.gemspec +27 -25
- metadata +91 -56
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a80f542fc3561bcd48d5f02f31630a14ca52ff17beda6ec8bda6460ca85fd54a
|
4
|
+
data.tar.gz: 258cf2d603a886678b3947e28a23bee64d6d57cc6e41cea9a1a9c21f7b18c054
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e64a730a188c183fd1a477900907f54fc0c3acb52db6f9c4c0dc88d70a700f762866fbc130e92cd6b782e6cfea04eb6f9e8f01f97ce1e7a0ba2e09212590bdae
|
7
|
+
data.tar.gz: f70009e27da61954ee250f107e3ddff12977f572e27dd4bf37c28ea20877b1adf36c5162bd0a5ba5169097a33e56712f13e04db6d14973fc219942e0fd85c39c
|
data/.gitignore
CHANGED
data/bin/zold
CHANGED
@@ -57,7 +57,7 @@ args = []
|
|
57
57
|
unless ENV['RACK_ENV'] == 'test' || ARGV.find { |a| a == '--ignore-global-config' }
|
58
58
|
config = File.expand_path('~/.zold')
|
59
59
|
if File.exist?(config)
|
60
|
-
body =
|
60
|
+
body = IO.read(config)
|
61
61
|
extra = body.split(/[\r\n]+/).map(&:strip)
|
62
62
|
args += extra
|
63
63
|
log.debug("Found #{body.split(/\n/).length} lines in #{config}")
|
@@ -144,10 +144,11 @@ Available options:"
|
|
144
144
|
args << '--help' if opts.help?
|
145
145
|
args << "--network=#{opts['network']}"
|
146
146
|
|
147
|
-
|
148
|
-
|
147
|
+
home = File.expand_path(opts[:home])
|
148
|
+
FileUtils.mkdir_p(home)
|
149
|
+
Dir.chdir(home)
|
149
150
|
|
150
|
-
zoldata = File.
|
151
|
+
zoldata = File.join(home, '.zoldata')
|
151
152
|
|
152
153
|
unless opts['skip-upgrades']
|
153
154
|
Zold::Upgrades.new(Zold::VersionFile.new(File.join(zoldata, 'version')), 'upgrades').run
|
@@ -170,9 +171,11 @@ Available options:"
|
|
170
171
|
Zold::CachedWallets.new(
|
171
172
|
command == 'node' ? Zold::TreeWallets.new('.') : Zold::Wallets.new('.')
|
172
173
|
),
|
173
|
-
|
174
|
+
log: log
|
174
175
|
)
|
175
|
-
|
176
|
+
fremotes = File.join(zoldata, 'remotes')
|
177
|
+
remotes = Zold::Remotes.new(file: fremotes, network: opts['network'])
|
178
|
+
remotes.defaults unless File.exist?(fremotes)
|
176
179
|
copies = File.join(zoldata, 'copies')
|
177
180
|
|
178
181
|
log.debug("Network: #{opts['network']}")
|
@@ -10,7 +10,7 @@ Feature: Gem Package
|
|
10
10
|
require 'rubygems'
|
11
11
|
spec = Gem::Specification::load('./spec.rb')
|
12
12
|
if spec.executables.empty?
|
13
|
-
fail 'no executables: ' +
|
13
|
+
fail 'no executables: ' + IO.read('./spec.rb')
|
14
14
|
end
|
15
15
|
"""
|
16
16
|
When I run bash with:
|
@@ -40,14 +40,14 @@ After do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
When(%r{^I run ([a-z/-]+) with "([^"]*)"$}) do |cmd, args|
|
43
|
-
home = File.join(File.dirname(__FILE__), '../..')
|
43
|
+
home = File.expand_path(File.join(File.dirname(__FILE__), '../..'))
|
44
44
|
@stdout = `ruby -I#{home}/lib #{home}/#{cmd} #{args} 2>&1`
|
45
45
|
@exitstatus = $CHILD_STATUS.exitstatus
|
46
46
|
end
|
47
47
|
|
48
48
|
When(/^I run bash with:$/) do |text|
|
49
49
|
FileUtils.copy_entry(@cwd, File.join(@dir, 'zold'))
|
50
|
-
|
50
|
+
IO.write('run.sh', text)
|
51
51
|
@stdout = `/bin/bash run.sh 2>&1`
|
52
52
|
@exitstatus = $CHILD_STATUS.exitstatus
|
53
53
|
end
|
data/lib/zold/age.rb
CHANGED
@@ -21,6 +21,7 @@
|
|
21
21
|
# SOFTWARE.
|
22
22
|
|
23
23
|
require 'time'
|
24
|
+
require 'rainbow'
|
24
25
|
|
25
26
|
# Age in seconds.
|
26
27
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
@@ -29,22 +30,29 @@ require 'time'
|
|
29
30
|
module Zold
|
30
31
|
# Age
|
31
32
|
class Age
|
32
|
-
def initialize(time)
|
33
|
+
def initialize(time, limit: nil)
|
33
34
|
@time = time.nil? || time.is_a?(Time) ? time : Time.parse(time)
|
35
|
+
@limit = limit
|
34
36
|
end
|
35
37
|
|
36
38
|
def to_s
|
37
39
|
return '?' if @time.nil?
|
38
40
|
sec = Time.now - @time
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
"#{sec.round(2)}s"
|
43
|
-
elsif sec < 60 * 60
|
44
|
-
"#{(sec / 60).round}m"
|
41
|
+
txt = text(sec)
|
42
|
+
if !@limit.nil? && sec > @limit
|
43
|
+
Rainbow(txt).red
|
45
44
|
else
|
46
|
-
|
45
|
+
txt
|
47
46
|
end
|
48
47
|
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def text(sec)
|
52
|
+
return "#{(sec * 1000).round}ms" if sec < 1
|
53
|
+
return "#{sec.round(2)}s" if sec < 60
|
54
|
+
return "#{(sec / 60).round}m" if sec < 60 * 60
|
55
|
+
"#{(sec / 3600).round}h"
|
56
|
+
end
|
49
57
|
end
|
50
58
|
end
|
data/lib/zold/amount.rb
CHANGED
data/lib/zold/cached_wallets.rb
CHANGED
@@ -50,12 +50,11 @@ module Zold
|
|
50
50
|
|
51
51
|
def find(id)
|
52
52
|
@wallets.find(id) do |wallet|
|
53
|
-
|
54
|
-
@
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
)
|
53
|
+
w = @mutex.synchronize do
|
54
|
+
@cache[id] = wallet unless @cache[id]
|
55
|
+
@cache[id]
|
56
|
+
end
|
57
|
+
yield w
|
59
58
|
end
|
60
59
|
end
|
61
60
|
end
|
data/lib/zold/commands/clean.rb
CHANGED
@@ -23,6 +23,7 @@
|
|
23
23
|
require 'uri'
|
24
24
|
require 'json'
|
25
25
|
require 'time'
|
26
|
+
require 'futex'
|
26
27
|
require 'slop'
|
27
28
|
require 'rainbow'
|
28
29
|
require_relative 'args'
|
@@ -54,17 +55,23 @@ Available options:"
|
|
54
55
|
end
|
55
56
|
mine = Args.new(opts, @log).take || return
|
56
57
|
(mine.empty? ? @wallets.all : mine.map { |i| Id.new(i) }).each do |id|
|
57
|
-
clean(Copies.new(File.join(@copies, id), log: @log), opts)
|
58
|
+
clean(id, Copies.new(File.join(@copies, id), log: @log), opts)
|
58
59
|
end
|
59
60
|
end
|
60
61
|
|
61
|
-
def clean(cps, _)
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
#{
|
62
|
+
def clean(id, cps, _)
|
63
|
+
Futex.new(File.join(@copies, "#{id}-clean"), log: @log).open do
|
64
|
+
start = Time.now
|
65
|
+
deleted = cps.clean
|
66
|
+
@log.debug(
|
67
|
+
"#{deleted} expired local copies removed for #{cps} \
|
68
|
+
in #{Age.new(start, limit: 0.01)}, #{cps.all.count} left:\n" +
|
69
|
+
cps.all.map do |c|
|
70
|
+
wallet = Wallet.new(c[:path])
|
71
|
+
" #{c[:name]}: #{c[:score]} #{wallet.balance}/#{wallet.txns.count}t/\
|
72
|
+
#{wallet.digest[0, 6]}/#{Size.new(File.size(c[:path]))}/#{Age.new(File.mtime(c[:path]))}"
|
73
|
+
end.join("\n")
|
74
|
+
)
|
68
75
|
end
|
69
76
|
end
|
70
77
|
end
|
data/lib/zold/commands/diff.rb
CHANGED
@@ -67,12 +67,12 @@ Available options:"
|
|
67
67
|
patch.join(Wallet.new(c[:path]))
|
68
68
|
end
|
69
69
|
before = @wallets.find(id) do |wallet|
|
70
|
-
|
70
|
+
IO.read(wallet.path)
|
71
71
|
end
|
72
72
|
after = ''
|
73
|
-
Tempfile.open(['', Wallet::
|
73
|
+
Tempfile.open(['', Wallet::EXT]) do |f|
|
74
74
|
patch.save(f.path, overwrite: true)
|
75
|
-
after =
|
75
|
+
after = IO.read(f)
|
76
76
|
end
|
77
77
|
diff = Diffy::Diff.new(before, after, context: 0).to_s(:color)
|
78
78
|
@log.info(diff)
|
data/lib/zold/commands/fetch.rb
CHANGED
@@ -113,9 +113,9 @@ Available options:"
|
|
113
113
|
r.assert_valid_score(score)
|
114
114
|
r.assert_score_ownership(score)
|
115
115
|
r.assert_score_strength(score) unless opts['ignore-score-weakness']
|
116
|
-
Tempfile.open(['', Wallet::
|
116
|
+
Tempfile.open(['', Wallet::EXT]) do |f|
|
117
117
|
body = json['body']
|
118
|
-
|
118
|
+
IO.write(f, body)
|
119
119
|
wallet = Wallet.new(f.path)
|
120
120
|
wallet.refurbish
|
121
121
|
if wallet.protocol != Zold::PROTOCOL
|
@@ -127,10 +127,10 @@ Available options:"
|
|
127
127
|
if wallet.balance.negative? && !wallet.root?
|
128
128
|
raise "The balance of #{id} is #{wallet.balance} and it's not a root wallet"
|
129
129
|
end
|
130
|
-
copy = cps.add(
|
130
|
+
copy = cps.add(IO.read(f), score.host, score.port, score.value)
|
131
131
|
@log.info("#{r} returned #{Size.new(body.length)}/#{wallet.balance}/#{wallet.txns.count}t/\
|
132
132
|
#{digest(json)}/#{Age.new(json['mtime'])}/#{json['copies']}c \
|
133
|
-
as copy #{copy} of #{id} in #{Age.new(start)}: #{Rainbow(score.value).green} (#{json['version']})")
|
133
|
+
as copy #{copy} of #{id} in #{Age.new(start, limit: 4)}: #{Rainbow(score.value).green} (#{json['version']})")
|
134
134
|
end
|
135
135
|
score.value
|
136
136
|
end
|
data/lib/zold/commands/list.rb
CHANGED
@@ -37,10 +37,11 @@ module Zold
|
|
37
37
|
|
38
38
|
def run(_ = [])
|
39
39
|
@wallets.all.each do |id|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
40
|
+
@wallets.find(id) do |wallet|
|
41
|
+
msg = "#{id}: #{wallet.balance}/#{wallet.txns.count}t"
|
42
|
+
msg += " (net:#{wallet.network})" if wallet.network != Wallet::MAIN_NETWORK
|
43
|
+
@log.info(msg)
|
44
|
+
end
|
44
45
|
end
|
45
46
|
end
|
46
47
|
end
|
data/lib/zold/commands/merge.rb
CHANGED
@@ -85,9 +85,10 @@ Available options:"
|
|
85
85
|
@log.debug("Local copy of #{id} is absent, nothing to merge")
|
86
86
|
end
|
87
87
|
modified = patch.save(wallet.path, overwrite: true)
|
88
|
+
wallet.flush
|
88
89
|
if modified
|
89
90
|
@log.info("#{cps.count} copies with the total score of #{score} successfully merged \
|
90
|
-
into #{wallet.id}/#{wallet.balance}/#{wallet.txns.count}t in #{Age.new(start)}")
|
91
|
+
into #{wallet.id}/#{wallet.balance}/#{wallet.txns.count}t in #{Age.new(start, limit: 0.1 + cps.count * 0.01)}")
|
91
92
|
else
|
92
93
|
@log.info("Nothing changed in #{wallet.id} after merge of #{cps.count} copies")
|
93
94
|
end
|
data/lib/zold/commands/node.rb
CHANGED
@@ -153,13 +153,14 @@ module Zold
|
|
153
153
|
raise '--invoice is mandatory' unless opts['invoice']
|
154
154
|
if opts['nohup']
|
155
155
|
pid = nohup(opts)
|
156
|
-
|
156
|
+
IO.write(opts['save-pid'], pid) if opts['save-pid']
|
157
157
|
@log.debug("Process ID #{pid} saved into \"#{opts['save-pid']}\"")
|
158
158
|
@log.info(pid)
|
159
159
|
return
|
160
160
|
end
|
161
161
|
@log = Trace.new(@log, opts['trace-length'])
|
162
162
|
Front.set(:log, @log)
|
163
|
+
Front.set(:logger, @log)
|
163
164
|
Front.set(:trace, @log)
|
164
165
|
Front.set(:nohup_log, opts['nohup-log']) if opts['nohup-log']
|
165
166
|
Front.set(:version, opts['expose-version'])
|
@@ -168,9 +169,10 @@ module Zold
|
|
168
169
|
Front.set(:halt, opts['halt-code'])
|
169
170
|
Front.set(:disable_push, opts['disable-push'])
|
170
171
|
Front.set(:disable_fetch, opts['disable-fetch'])
|
171
|
-
|
172
|
+
home = File.expand_path(opts['home'])
|
173
|
+
Front.set(:home, home)
|
172
174
|
@log.info("Time: #{Time.now.utc.iso8601}")
|
173
|
-
@log.info("Home directory: #{
|
175
|
+
@log.info("Home directory: #{home}")
|
174
176
|
@log.info("Ruby version: #{RUBY_VERSION}")
|
175
177
|
@log.info("Zold gem version: #{Zold::VERSION}")
|
176
178
|
@log.info("Zold protocol version: #{Zold::PROTOCOL}")
|
@@ -189,7 +191,7 @@ module Zold
|
|
189
191
|
AccessLog: []
|
190
192
|
)
|
191
193
|
if opts['standalone']
|
192
|
-
@remotes = Zold::Remotes::Empty.new
|
194
|
+
@remotes = Zold::Remotes::Empty.new
|
193
195
|
@log.info('Running in standalone mode! (will never talk to other remotes)')
|
194
196
|
elsif @remotes.exists?(host, port)
|
195
197
|
Zold::Remote.new(remotes: @remotes).run(['remote', 'remove', host, port.to_s])
|
@@ -201,7 +203,7 @@ module Zold
|
|
201
203
|
Front.set(:remotes, @remotes)
|
202
204
|
Front.set(:copies, @copies)
|
203
205
|
Front.set(:address, address)
|
204
|
-
Front.set(:root,
|
206
|
+
Front.set(:root, home)
|
205
207
|
Front.set(:dump_errors, opts['dump-errors'])
|
206
208
|
Front.set(:port, opts['bind-port'])
|
207
209
|
Front.set(:reboot, !opts['never-reboot'])
|
@@ -227,21 +229,21 @@ module Zold
|
|
227
229
|
@remotes, @copies, address,
|
228
230
|
log: @log, network: opts['network']
|
229
231
|
),
|
230
|
-
File.join(
|
232
|
+
File.join(home, '.zoldata/sync-entrance'),
|
231
233
|
log: @log
|
232
234
|
),
|
233
235
|
@wallets, @remotes, address,
|
234
236
|
log: @log,
|
235
237
|
ignore_score_weakeness: opts['ignore-score-weakness']
|
236
238
|
),
|
237
|
-
File.join(
|
239
|
+
File.join(home, '.zoldata/async-entrance'), log: @log
|
238
240
|
),
|
239
241
|
@wallets
|
240
242
|
),
|
241
243
|
network: opts['network']
|
242
244
|
).start do |entrance|
|
243
245
|
Front.set(:entrance, entrance)
|
244
|
-
Farm.new(invoice, File.join(
|
246
|
+
Farm.new(invoice, File.join(home, 'farm'), log: @log)
|
245
247
|
.start(host, opts[:port], threads: opts[:threads], strength: opts[:strength]) do |farm|
|
246
248
|
Front.set(:farm, farm)
|
247
249
|
metronome(farm, opts).start do |metronome|
|
@@ -383,19 +385,19 @@ module Zold
|
|
383
385
|
end
|
384
386
|
|
385
387
|
def info(msg)
|
386
|
-
@log.debug(
|
388
|
+
@log.debug("WEBRICK #{msg}")
|
387
389
|
end
|
388
390
|
|
389
391
|
def debug(msg)
|
390
392
|
# nothing
|
391
393
|
end
|
392
394
|
|
393
|
-
def error(
|
394
|
-
@log.error(
|
395
|
+
def error(ex)
|
396
|
+
@log.error("WEBRICK #{Backtrace.new(ex)}")
|
395
397
|
end
|
396
398
|
|
397
399
|
def fatal(msg)
|
398
|
-
@log.error(
|
400
|
+
@log.error("WEBRICK #{msg}")
|
399
401
|
end
|
400
402
|
|
401
403
|
def debug?
|
@@ -91,8 +91,8 @@ Available options:"
|
|
91
91
|
end
|
92
92
|
end
|
93
93
|
modified.uniq!
|
94
|
-
@log.debug("Wallet #{id} propagated successfully, #{total} txns
|
95
|
-
#{modified.count} wallets affected")
|
94
|
+
@log.debug("Wallet #{id} propagated successfully, #{total} txns \
|
95
|
+
in #{Age.new(start, limit: 20 + total * 0.005)}, #{modified.count} wallets affected")
|
96
96
|
modified
|
97
97
|
end
|
98
98
|
end
|
data/lib/zold/commands/push.rb
CHANGED
@@ -89,14 +89,14 @@ total score for #{id} is #{total}")
|
|
89
89
|
start = Time.now
|
90
90
|
content = @wallets.find(id) do |wallet|
|
91
91
|
raise "The wallet #{id} is absent" unless wallet.exists?
|
92
|
-
|
92
|
+
IO.read(wallet.path)
|
93
93
|
end
|
94
94
|
uri = "/wallet/#{id}"
|
95
95
|
response = r.http(uri).put(content)
|
96
96
|
@wallets.find(id) do |wallet|
|
97
97
|
if response.code == '304'
|
98
98
|
@log.info("#{r}: same version #{Size.new(content.length)}/#{wallet.txns.count}t \
|
99
|
-
of #{wallet.id} there, in #{Age.new(start)}")
|
99
|
+
of #{wallet.id} there, in #{Age.new(start, limit: 0.5)}")
|
100
100
|
return 0
|
101
101
|
end
|
102
102
|
r.assert_code(200, response)
|
@@ -106,7 +106,7 @@ of #{wallet.id} there, in #{Age.new(start)}")
|
|
106
106
|
r.assert_score_ownership(score)
|
107
107
|
r.assert_score_strength(score) unless opts['ignore-score-weakness']
|
108
108
|
@log.info("#{r} accepted #{Size.new(content.length)}/#{wallet.digest[0, 6]}/#{wallet.txns.count}t \
|
109
|
-
of #{wallet.id} in #{Age.new(start)}: #{Rainbow(score.value).green} (#{json['version']})")
|
109
|
+
of #{wallet.id} in #{Age.new(start, limit: 4)}: #{Rainbow(score.value).green} (#{json['version']})")
|
110
110
|
score.value
|
111
111
|
end
|
112
112
|
end
|
data/lib/zold/commands/remove.rb
CHANGED
@@ -50,7 +50,10 @@ Available options:"
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def remove(id, _)
|
53
|
-
@wallets.find(id)
|
53
|
+
@wallets.find(id) do |w|
|
54
|
+
raise "Wallet #{id} doesn't exist in #{w.path}" unless w.exists?
|
55
|
+
File.delete(w.path)
|
56
|
+
end
|
54
57
|
@log.info("Wallet #{id} removed")
|
55
58
|
end
|
56
59
|
end
|