utils 0.35.0 → 0.37.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '07918bacd055f0bbfac96cd115901ce36b656d9658477a07e11565562b73846e'
4
- data.tar.gz: 8016c94eabb23717b14548a2b334a5f2d047808157b803a23980d63a7270847b
3
+ metadata.gz: 97cf67a6009309a0e7568242eb255b1bc6a1749cfe03354429e800f5990a8570
4
+ data.tar.gz: '0538cf67ec12e9a1c1f33b829189d5af47ee1ad674396dd1518af711706fbe35'
5
5
  SHA512:
6
- metadata.gz: 1d903b3bf6fd56083203e63930036ed0950dbae533cb7560569c920f4d25ef2267aa12f5e35740f61c9210b9b3df7b94f35050895a0c91b34b02309963b4fac2
7
- data.tar.gz: c50f439ffe1168cda867f5470b39e9a642363861901f9371ace1eec95c45b7d2a6556c82b5d108582927cffec02ef405fa35f0b6f5e7a9f75382e91a8f87d72f
6
+ metadata.gz: e13d5840671a18702e4994f8c5743555b1eb7de5de86aa7e4c152ef6594c5b29ef9b8e02542d4a1687e4e570b56f44e12f93d88cba1ba6d2e84a49ad3265f874
7
+ data.tar.gz: 3af919524b67c462f6bc730681c8c1b5e06e97e066cd1422055054716e6fd5a020d7f49c4836c150a552d2017b7bea3ca3ff24ab6c41eaacb9408907dfd1cc84
data/bin/search CHANGED
@@ -7,6 +7,7 @@ require 'tins/xt'
7
7
  include Tins::GO
8
8
  require 'term/ansicolor'
9
9
  include Term::ANSIColor
10
+ require 'tempfile'
10
11
 
11
12
  def convert_ruby_to_vim_regexp(pattern)
12
13
  regexp = pattern.source.dup
@@ -18,14 +19,14 @@ end
18
19
  def read_line(path)
19
20
  filename, lineno = path.source_location
20
21
  line = File.open(filename) do |file|
21
- file.lazy.each_with_index.select { |l, n| n + 1 == lineno }.first&.first
22
+ file.lazy.each_with_index.select { |l, n| n + 1 == lineno }.first&.first
22
23
  end
23
24
  end
24
25
 
25
26
  def replace_line(path, new_line)
26
27
  filename, lineno = path.source_location
27
- File.secure_write filename do |output|
28
- File.open(filename) do |file|
28
+ Tempfile.open do |output|
29
+ File.open(filename, 'r+') do |file|
29
30
  file.each_with_index do |line, n|
30
31
  if n + 1 == lineno
31
32
  output.write new_line
@@ -33,6 +34,11 @@ def replace_line(path, new_line)
33
34
  output.write line
34
35
  end
35
36
  end
37
+ file.rewind
38
+ output.rewind
39
+ output.each do |line|
40
+ file.write line
41
+ end
36
42
  end
37
43
  end
38
44
  end
@@ -51,7 +57,7 @@ def replace_ask(editor, path, pattern, replace, all)
51
57
  replace_line path, new_line
52
58
  break true
53
59
  else
54
- print "Replace? (#{bold(?y)}/n/e/a) "
60
+ print "Replace? (#{bold(?y)}/n/e/a/q) "
55
61
  case answer = STDIN.gets.chomp
56
62
  when ?y, '', ?a
57
63
  new_line = line.gsub(pattern.matcher, replace)
@@ -59,6 +65,8 @@ def replace_ask(editor, path, pattern, replace, all)
59
65
  break answer == ?a
60
66
  when ?n
61
67
  break false
68
+ when ?q
69
+ throw :quit
62
70
  when ?e
63
71
  editor.edit(path.strip)
64
72
  break false
@@ -78,8 +86,10 @@ def edit_files(pattern, paths, pick: false, replace: nil)
78
86
  when replace
79
87
  editor.wait = true
80
88
  all = false
81
- for path in paths
82
- all |= replace_ask editor, path, pattern, replace, all
89
+ catch :quit do
90
+ for path in paths
91
+ all |= replace_ask editor, path, pattern, replace, all
92
+ end
83
93
  end
84
94
  when pick
85
95
  if paths.size > 1
data/bin/sync_dir ADDED
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pathname'
4
+ require 'tins/xt'
5
+ require 'fileutils'
6
+ include FileUtils::Verbose
7
+
8
+ def local_path(path)
9
+ Pathname.new(path).expand_path.relative_path_from(
10
+ Pathname.new(?.).expand_path
11
+ ).to_s
12
+ end
13
+
14
+ def diff_dir
15
+ `diff -rq #{$src.inspect} #{$dst.inspect}`
16
+ end
17
+
18
+ def ask?(prompt:)
19
+ print prompt
20
+ answer = gets.chomp
21
+ end
22
+
23
+ $src = ARGV.shift or fail "need source directory as first argument"
24
+ $src = local_path $src
25
+ $dst = ARGV.shift || ?.
26
+ $dst = local_path $dst
27
+
28
+ puts diff_dir
29
+
30
+ diff_dir.each_line do |line|
31
+ case line
32
+ when /^Only in (.*?): (.*?)$/
33
+ sd = local_path($1)
34
+ s = local_path(File.join(sd, $2))
35
+ dd = [ $src, $dst ].find { _1 != sd }
36
+ d = local_path(File.join(dd, $2))
37
+ if File.file?(s) and File.ascii?(s)
38
+ puts File.read(s)
39
+ end
40
+ puts " Only found in #{s.inspect} ".center(Tins::Terminal.cols, ?*)
41
+ puts <<~end
42
+ (C)opy #{s.inspect} to #{d.inspect}
43
+ (E)dit #{s.inspect}
44
+ (D)elete #{s.inspect}
45
+ (S)kip
46
+ end
47
+ case ask?(prompt: 'action? ')
48
+ when /\Ac/i
49
+ cp s, d
50
+ when /\Ae/i
51
+ system "vim #{s.inspect}"
52
+ redo
53
+ when /\Ad/i
54
+ rm s
55
+ end
56
+ when /^Files (.*?) and (.*?) differ$/
57
+ s = local_path($1)
58
+ d = local_path($2)
59
+ puts `diff --color=always -u #{s.inspect} #{d.inspect}`
60
+ puts " Difference found #{s.inspect} #{d.inspect} ".center(Tins::Terminal.cols, ?*)
61
+ puts <<~end
62
+ (V)imdiff
63
+ (S)kip
64
+ end
65
+ ask?(prompt: 'action? ') =~ /\Av/i or next
66
+ system "vimdiff #{s.inspect} #{d.inspect}"
67
+ end
68
+ rescue Interrupt
69
+ exit
70
+ end
data/lib/utils/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Utils
2
2
  # Utils version
3
- VERSION = '0.35.0'
3
+ VERSION = '0.37.0'
4
4
  VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
data/utils.gemspec CHANGED
@@ -1,19 +1,19 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: utils 0.35.0 ruby lib
2
+ # stub: utils 0.37.0 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "utils".freeze
6
- s.version = "0.35.0"
6
+ s.version = "0.37.0"
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
10
10
  s.authors = ["Florian Frank".freeze]
11
- s.date = "2023-03-01"
11
+ s.date = "2023-08-11"
12
12
  s.description = "This ruby gem provides some useful command line utilities".freeze
13
13
  s.email = "flori@ping.de".freeze
14
- s.executables = ["ascii7".freeze, "blameline".freeze, "check-yaml".freeze, "classify".freeze, "create_cstags".freeze, "create_tags".freeze, "discover".freeze, "edit".freeze, "edit_wait".freeze, "enum".freeze, "fix-brew".freeze, "git-empty".freeze, "git-versions".freeze, "irb_connect".freeze, "json_check".freeze, "long_lines".freeze, "myex".freeze, "number_files".freeze, "on_change".freeze, "path".freeze, "probe".freeze, "rd2md".freeze, "search".freeze, "sedit".freeze, "serve".freeze, "ssh-tunnel".freeze, "strip_spaces".freeze, "untest".freeze, "utils-utilsrc".freeze, "vcf2alias".freeze]
14
+ s.executables = ["ascii7".freeze, "blameline".freeze, "check-yaml".freeze, "classify".freeze, "create_cstags".freeze, "create_tags".freeze, "discover".freeze, "edit".freeze, "edit_wait".freeze, "enum".freeze, "fix-brew".freeze, "git-empty".freeze, "git-versions".freeze, "irb_connect".freeze, "json_check".freeze, "long_lines".freeze, "myex".freeze, "number_files".freeze, "on_change".freeze, "path".freeze, "probe".freeze, "rd2md".freeze, "search".freeze, "sedit".freeze, "serve".freeze, "ssh-tunnel".freeze, "strip_spaces".freeze, "sync_dir".freeze, "untest".freeze, "utils-utilsrc".freeze, "vcf2alias".freeze]
15
15
  s.extra_rdoc_files = ["README.md".freeze, "lib/utils.rb".freeze, "lib/utils/config_file.rb".freeze, "lib/utils/editor.rb".freeze, "lib/utils/file_xt.rb".freeze, "lib/utils/finder.rb".freeze, "lib/utils/grepper.rb".freeze, "lib/utils/irb.rb".freeze, "lib/utils/irb/service.rb".freeze, "lib/utils/line_blamer.rb".freeze, "lib/utils/line_formatter.rb".freeze, "lib/utils/md5.rb".freeze, "lib/utils/patterns.rb".freeze, "lib/utils/probe_server.rb".freeze, "lib/utils/ssh_tunnel_specification.rb".freeze, "lib/utils/version.rb".freeze, "lib/utils/xt/source_location_extension.rb".freeze]
16
- s.files = [".github/dependabot.yml".freeze, ".github/workflows/codeql-analysis.yml".freeze, "COPYING".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "bin/ascii7".freeze, "bin/blameline".freeze, "bin/check-yaml".freeze, "bin/classify".freeze, "bin/create_cstags".freeze, "bin/create_tags".freeze, "bin/discover".freeze, "bin/edit".freeze, "bin/edit_wait".freeze, "bin/enum".freeze, "bin/fix-brew".freeze, "bin/git-empty".freeze, "bin/git-versions".freeze, "bin/irb_connect".freeze, "bin/json_check".freeze, "bin/long_lines".freeze, "bin/myex".freeze, "bin/number_files".freeze, "bin/on_change".freeze, "bin/path".freeze, "bin/probe".freeze, "bin/rd2md".freeze, "bin/search".freeze, "bin/sedit".freeze, "bin/serve".freeze, "bin/ssh-tunnel".freeze, "bin/strip_spaces".freeze, "bin/untest".freeze, "bin/utils-utilsrc".freeze, "bin/vcf2alias".freeze, "lib/utils.rb".freeze, "lib/utils/config_file.rb".freeze, "lib/utils/editor.rb".freeze, "lib/utils/file_xt.rb".freeze, "lib/utils/finder.rb".freeze, "lib/utils/grepper.rb".freeze, "lib/utils/irb.rb".freeze, "lib/utils/irb/service.rb".freeze, "lib/utils/line_blamer.rb".freeze, "lib/utils/line_formatter.rb".freeze, "lib/utils/md5.rb".freeze, "lib/utils/patterns.rb".freeze, "lib/utils/probe_server.rb".freeze, "lib/utils/ssh_tunnel_specification.rb".freeze, "lib/utils/version.rb".freeze, "lib/utils/xt/source_location_extension.rb".freeze, "utils.gemspec".freeze]
16
+ s.files = [".github/dependabot.yml".freeze, ".github/workflows/codeql-analysis.yml".freeze, "COPYING".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "bin/ascii7".freeze, "bin/blameline".freeze, "bin/check-yaml".freeze, "bin/classify".freeze, "bin/create_cstags".freeze, "bin/create_tags".freeze, "bin/discover".freeze, "bin/edit".freeze, "bin/edit_wait".freeze, "bin/enum".freeze, "bin/fix-brew".freeze, "bin/git-empty".freeze, "bin/git-versions".freeze, "bin/irb_connect".freeze, "bin/json_check".freeze, "bin/long_lines".freeze, "bin/myex".freeze, "bin/number_files".freeze, "bin/on_change".freeze, "bin/path".freeze, "bin/probe".freeze, "bin/rd2md".freeze, "bin/search".freeze, "bin/sedit".freeze, "bin/serve".freeze, "bin/ssh-tunnel".freeze, "bin/strip_spaces".freeze, "bin/sync_dir".freeze, "bin/untest".freeze, "bin/utils-utilsrc".freeze, "bin/vcf2alias".freeze, "lib/utils.rb".freeze, "lib/utils/config_file.rb".freeze, "lib/utils/editor.rb".freeze, "lib/utils/file_xt.rb".freeze, "lib/utils/finder.rb".freeze, "lib/utils/grepper.rb".freeze, "lib/utils/irb.rb".freeze, "lib/utils/irb/service.rb".freeze, "lib/utils/line_blamer.rb".freeze, "lib/utils/line_formatter.rb".freeze, "lib/utils/md5.rb".freeze, "lib/utils/patterns.rb".freeze, "lib/utils/probe_server.rb".freeze, "lib/utils/ssh_tunnel_specification.rb".freeze, "lib/utils/version.rb".freeze, "lib/utils/xt/source_location_extension.rb".freeze, "utils.gemspec".freeze]
17
17
  s.homepage = "http://github.com/flori/utils".freeze
18
18
  s.licenses = ["GPL-2.0".freeze]
19
19
  s.rdoc_options = ["--title".freeze, "Utils - Some useful command line utilities".freeze, "--main".freeze, "README.md".freeze]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.35.0
4
+ version: 0.37.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-01 00:00:00.000000000 Z
11
+ date: 2023-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gem_hadar
@@ -166,6 +166,7 @@ executables:
166
166
  - serve
167
167
  - ssh-tunnel
168
168
  - strip_spaces
169
+ - sync_dir
169
170
  - untest
170
171
  - utils-utilsrc
171
172
  - vcf2alias
@@ -222,6 +223,7 @@ files:
222
223
  - bin/serve
223
224
  - bin/ssh-tunnel
224
225
  - bin/strip_spaces
226
+ - bin/sync_dir
225
227
  - bin/untest
226
228
  - bin/utils-utilsrc
227
229
  - bin/vcf2alias