tolvmxfs/lib/to_lvm_xfs/exts.rb

130 lines
2.3 KiB
Ruby
Raw Normal View History

2018-04-25 16:49:07 +02:00
require 'pathname'
class Pathname
2019-10-26 12:28:17 +02:00
def +@
expand_path.to_s
end
2018-04-25 16:49:07 +02:00
def chdir &exe
Dir.chdir self.to_s, &exe
end
alias cd chdir
# copies content of src in self as destination
def copy src, **opts
FileUtils.copy_file src.to_s, self.to_s, **opts
end
2020-03-25 15:20:06 +01:00
alias link make_link
alias symlink make_symlink
2019-10-26 12:28:17 +02:00
2020-03-25 15:20:06 +01:00
def replace_i &e
changed = false
2018-04-25 16:49:07 +02:00
open 'r+' do |f|
2020-03-25 15:20:06 +01:00
old = f.readlines
2018-04-25 16:49:07 +02:00
f.pos = 0
2020-03-25 15:20:06 +01:00
lines = yield f
changed = lines != old
if changed
f.truncate 0
f.pos = 0
f.puts lines
end
2018-04-25 16:49:07 +02:00
end
2020-03-25 15:20:06 +01:00
not changed
2018-04-25 16:49:07 +02:00
end
2019-10-26 12:28:17 +02:00
def sed_i **replaces, &e
2020-03-25 15:20:06 +01:00
changed = false
2019-10-26 12:28:17 +02:00
open 'r+' do |f|
2020-03-25 15:20:06 +01:00
lines =
f.each_line.flat_map do |l|
yield( l.chomp, replaces).tap {|r| changed = true unless l == r }
end
changed = true unless replaces.empty?
if changed
f.truncate 0
f.pos = 0
f.puts lines
replaces.each {|_,rls| f.puts rls }
end
2019-10-26 12:28:17 +02:00
end
2020-03-25 15:20:06 +01:00
not changed
2019-10-26 12:28:17 +02:00
end
end
2020-03-25 15:20:06 +01:00
2019-10-26 12:28:17 +02:00
class XPathname < Pathname
%i[/ + join].each do |meth|
define_method meth do |*n|
XPathname.new "#{super *n}"
end
end
2020-03-25 15:20:06 +01:00
%i[unlink read mkdir mkpath].each do |meth|
define_method meth do
2019-10-26 12:28:17 +02:00
STDERR.puts "\e[1;36m#{meth} \e[1;35m#{self}\e[0m"
2020-03-25 15:20:06 +01:00
super()
2019-10-26 12:28:17 +02:00
end
end
%i[replace_i sed_i].each do |meth|
2020-03-25 15:20:06 +01:00
define_method meth do |*a, **o, &e|
STDERR.print "\e[1;36mpatching \e[1;35m#{self}\e[0m"
begin
r = super *a, **o, &e
STDERR.puts "\r\e[#{r ? "1;32" : "33"}mpatching \e[1;35m#{self}\e[0m"
rescue Object
STDERR.puts "\r\e[1;31mpatching \e[1;35m#{self}\e[0m"
raise
end
r
2019-10-26 12:28:17 +02:00
end
end
2020-03-25 15:20:06 +01:00
def rename dest
STDERR.puts "\e[1;36mrename \e[1;35m#{self}\e[0m -> \e[1;35m#{dest}\e[0m"
super dest
2019-10-26 12:28:17 +02:00
end
2020-03-25 15:20:06 +01:00
def move src
STDERR.puts "\e[1;36mmove \e[1;35m#{self}\e[0m <- \e[1;35m#{dest}\e[0m"
super src
2019-10-26 12:28:17 +02:00
end
2020-03-25 15:20:06 +01:00
def copy src, **opts
STDERR.puts "\e[1;36mcopy \e[1;35m#{self}\e[0m <- \e[1;35m#{src}\e[0m"
super src, **opts
end
%i[link symlink].each do |meth|
define_method meth do |dest|
STDERR.puts "\e[1;36m#{meth} \e[1;35m#{self}\e[0m -> \e[1;35m#{dest}\e[0m"
super dest
2019-10-26 12:28:17 +02:00
end
end
2020-03-25 15:20:06 +01:00
alias link make_link
alias symlink make_symlink
2019-10-26 12:28:17 +02:00
%i[write].each do |meth|
2020-03-25 15:20:06 +01:00
define_method meth do |*a, **o, &e|
2019-10-26 12:28:17 +02:00
STDERR.puts "\e[1;36m#{meth} \e[1;35m#{self}\e[0m \e[1;35m#{a[0][0...128].inspect}\e[0m"
super *a, &e
end
end
2018-04-25 16:49:07 +02:00
end
class Symbol
alias +@ to_s
def -@
:"-#{self}"
end
end
class File
def reset
f.truncate 0
f.pos = 0
end
end