dle 0.1.0 → 0.1.1
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 +4 -4
- data/VERSION +1 -1
- data/bin/dle +6 -1
- data/lib/dle.rb +4 -1
- data/lib/dle/application.rb +6 -1
- data/lib/dle/application/dispatch.rb +43 -7
- data/lib/dle/filesystem.rb +9 -3
- data/lib/dle/helpers.rb +19 -0
- data/lib/dle/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4e369f0d5b31fd3d9ae966eb044321f9a48a3b2
|
4
|
+
data.tar.gz: 785f54970608d82c8c443059a3fc85214caeb83e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 826305d9aafac83e780768cfa73bdf98b7f16ebae0e67a368e9715cb92d13205d240b6df3cb9273cbb24215f864afc1acc48b0182daae0e70fef8495c20242e7
|
7
|
+
data.tar.gz: 933374bee70087e1b3fa5292916f2d8d520aff847613fc72638b1d0643a7930652e7972e45099d645135c895f323b72057c05aa765b86d2538430712dae8a3df
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/bin/dle
CHANGED
data/lib/dle.rb
CHANGED
@@ -3,8 +3,10 @@ require "yaml"
|
|
3
3
|
require "find"
|
4
4
|
require "optparse"
|
5
5
|
require "securerandom"
|
6
|
+
require "ostruct"
|
7
|
+
require "tempfile"
|
8
|
+
begin ; require "pry" ; rescue LoadError ; end
|
6
9
|
|
7
|
-
require "pry"
|
8
10
|
require "active_support/core_ext/object/blank"
|
9
11
|
require "active_support/core_ext/object/try"
|
10
12
|
|
@@ -21,4 +23,5 @@ require "dle/application"
|
|
21
23
|
|
22
24
|
module Dle
|
23
25
|
ROOT = Pathname.new(File.expand_path("../..", __FILE__))
|
26
|
+
BASH_ENABLED = "#{ENV["SHELL"]}".downcase["bash"]
|
24
27
|
end
|
data/lib/dle/application.rb
CHANGED
@@ -8,6 +8,7 @@ module Dle
|
|
8
8
|
class Application
|
9
9
|
attr_reader :opts
|
10
10
|
include Dispatch
|
11
|
+
include Helpers
|
11
12
|
|
12
13
|
# =========
|
13
14
|
# = Setup =
|
@@ -16,7 +17,11 @@ module Dle
|
|
16
17
|
new(*a) do |app|
|
17
18
|
app.parse_params
|
18
19
|
app.log "core ready"
|
19
|
-
|
20
|
+
begin
|
21
|
+
app.dispatch
|
22
|
+
rescue Interrupt
|
23
|
+
app.abort("Interrupted", 1)
|
24
|
+
end
|
20
25
|
end
|
21
26
|
end
|
22
27
|
|
@@ -69,7 +69,7 @@ module Dle
|
|
69
69
|
base_dir = ARGV[0].present? ? File.expand_path(ARGV[0].to_s) : ARGV[0].to_s
|
70
70
|
if !FileTest.directory?(base_dir)
|
71
71
|
if base_dir.present?
|
72
|
-
abort c(ARGV[0].to_s, :magenta) << c(" is not a valid directory!", :red)
|
72
|
+
abort c(ARGV[0].to_s, :magenta) << c(" is not a valid directory!", :red), 1
|
73
73
|
else
|
74
74
|
dispatch(:help)
|
75
75
|
abort "Please provide a base directory.", 1
|
@@ -78,8 +78,21 @@ module Dle
|
|
78
78
|
|
79
79
|
# index filesystem
|
80
80
|
log("index #{c base_dir, :magenta}")
|
81
|
-
|
81
|
+
logger.ensure_prefix c("[index]\t", :magenta) do
|
82
|
+
@fs = Filesystem.new(base_dir, dotfiles: @opts[:dotfiles])
|
83
|
+
|
84
|
+
notifier do
|
85
|
+
loop do
|
86
|
+
logger.raw("\033]0;#{human_number @fs.index.count} nodes indexed\007", :print) if BASH_ENABLED
|
87
|
+
sleep 1
|
88
|
+
end
|
89
|
+
end.perform do
|
90
|
+
@fs.reindex!
|
91
|
+
@fs.opts[:verbose] = false
|
92
|
+
end
|
93
|
+
end
|
82
94
|
abort("Base directory is empty or not readable", 1) if @fs.index.empty?
|
95
|
+
log("indexed #{c "#{human_number @fs.index.count} nodes", :magenta}") if @fs.index.count > 1000
|
83
96
|
|
84
97
|
file = "#{Dir.tmpdir}/#{SecureRandom.urlsafe_base64}"
|
85
98
|
begin
|
@@ -87,6 +100,7 @@ module Dle
|
|
87
100
|
if @opts[:input_file]
|
88
101
|
ifile = File.expand_path(@opts[:input_file])
|
89
102
|
if FileTest.file?(ifile) && FileTest.readable?(ifile)
|
103
|
+
log "processing file..."
|
90
104
|
@dlfile = DlFile.parse(ifile)
|
91
105
|
else
|
92
106
|
abort "Input file not readable: " << c(ifile, :magenta)
|
@@ -94,10 +108,16 @@ module Dle
|
|
94
108
|
else
|
95
109
|
FileUtils.mkdir_p(File.dirname(file)) if !FileTest.exist?(File.dirname(file))
|
96
110
|
if !FileTest.exist?(file) || File.read(file).strip.empty?
|
97
|
-
|
111
|
+
notifier do
|
112
|
+
sleep 3
|
113
|
+
log "writing result list to file..."
|
114
|
+
end.perform do
|
115
|
+
File.open(file, "w") {|f| f.write @fs.to_dlfile }
|
116
|
+
end
|
98
117
|
end
|
99
118
|
log "open list for editing..."
|
100
119
|
open_editor(file)
|
120
|
+
log "processing file..."
|
101
121
|
@dlfile = DlFile.parse(file)
|
102
122
|
end
|
103
123
|
|
@@ -138,12 +158,28 @@ module Dle
|
|
138
158
|
|
139
159
|
# apply changes
|
140
160
|
log "#{@opts[:simulate] ? "Simulating" : "Applying"} changes..."
|
141
|
-
@delta.
|
142
|
-
|
143
|
-
|
144
|
-
|
161
|
+
total_actions = @delta.map{|_, nodes| nodes.count }.inject(&:+)
|
162
|
+
actions_performed = 0
|
163
|
+
begin
|
164
|
+
notifier do
|
165
|
+
loop do
|
166
|
+
if BASH_ENABLED
|
167
|
+
logger.raw("\033]0;#{@opts[:simulate] ? "Simulated" : "Peformed"} #{human_number actions_performed}/#{human_number total_actions} changes\007", :print)
|
168
|
+
end
|
169
|
+
sleep 1
|
170
|
+
end
|
171
|
+
end.perform do
|
172
|
+
@delta.each do |action, snodes|
|
173
|
+
logger.ensure_prefix c("[apply-#{action}]\t", :magenta) do
|
174
|
+
snodes.each do |snode|
|
175
|
+
actions_performed += 1
|
176
|
+
Filesystem::Destructive.new(self, action, @fs, snode).perform
|
177
|
+
end
|
178
|
+
end
|
145
179
|
end
|
146
180
|
end
|
181
|
+
ensure
|
182
|
+
log "#{@opts[:simulate] ? "Simulated" : "Peformed"} #{human_number actions_performed} changes..."
|
147
183
|
end
|
148
184
|
end
|
149
185
|
end
|
data/lib/dle/filesystem.rb
CHANGED
@@ -23,8 +23,8 @@ module Dle
|
|
23
23
|
def initialize base_dir, opts = {}
|
24
24
|
raise ArgumentError, "#{base_dir} is not a directory" unless FileTest.directory?(base_dir)
|
25
25
|
@base_dir = File.expand_path(base_dir).freeze
|
26
|
-
@opts = { dotfiles: true }.merge(opts)
|
27
|
-
|
26
|
+
@opts = { dotfiles: true, verbose: true }.merge(opts)
|
27
|
+
@index = {}
|
28
28
|
end
|
29
29
|
|
30
30
|
def reindex!
|
@@ -103,7 +103,13 @@ module Dle
|
|
103
103
|
protected
|
104
104
|
|
105
105
|
def index_node path
|
106
|
-
|
106
|
+
begin
|
107
|
+
Node.new(self, path).tap{|node| @index[node.inode] = node }
|
108
|
+
rescue Errno::EPERM
|
109
|
+
warn "Operation not permitted - #{path}" if @opts[:verbose]
|
110
|
+
rescue Errno::ENOENT
|
111
|
+
warn "No such file or directory (broken symlink?) - #{path}" if @opts[:verbose]
|
112
|
+
end
|
107
113
|
end
|
108
114
|
end
|
109
115
|
end
|
data/lib/dle/helpers.rb
CHANGED
@@ -12,6 +12,25 @@ module Dle
|
|
12
12
|
((s > 9 || s.modulo(1) < 0.1 ? '%d' : '%.1f') % s) + ' ' + BYTE_UNITS[i]
|
13
13
|
end
|
14
14
|
|
15
|
+
def human_number(n)
|
16
|
+
n.to_s.reverse.gsub(/...(?=.)/,'\&,').reverse
|
17
|
+
end
|
18
|
+
|
19
|
+
def notifier &block
|
20
|
+
OpenStruct.new.tap do |o|
|
21
|
+
o.callback = block
|
22
|
+
|
23
|
+
def o.perform &block
|
24
|
+
t = Thread.new(&callback)
|
25
|
+
begin
|
26
|
+
block.call(t)
|
27
|
+
ensure
|
28
|
+
t.kill
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
15
34
|
def render_table table, headers = []
|
16
35
|
[].tap do |r|
|
17
36
|
col_sizes = table.map{|col| col.map(&:to_s).map(&:length).max }
|
data/lib/dle/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sven Pachnit
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-04-
|
11
|
+
date: 2014-04-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pry
|