utils 0.22.1 → 0.24.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: 1467f044dbcbbbc4a271c12d9075aba3eb03f4fef444418eaf03f730450b894d
4
- data.tar.gz: 9955f17eaeddfed9d6130dfe6805f78bebb5265cab3d0597afd4d31e49e91663
3
+ metadata.gz: 93c2b093fc90b31c8fa1688487e2d9661fc31bcb33b8e21c73f1e21b55cccf40
4
+ data.tar.gz: 3b3089d78b393d59e40fbb98b0391c4aae02e0e0ceabf0c0dfd76258e6174d65
5
5
  SHA512:
6
- metadata.gz: a8fee251d57b62a6d255342bc73585256d25dbbf955e9c029c9a600ea2b3a0d419868cb9e652311ee95bcec13c73b0a18298b1f1de930e80b27937fb56b710a8
7
- data.tar.gz: 91747c469da5305344b8b914d79065406bb650a7c3cb786fe87052b69f1164cb01b44d63a194cede1331e39ae6ea74246802208dbd866b805ade8812ac0cd1d0
6
+ metadata.gz: f656d22fa84b868c1eee192610127164aed173d340e50e47f9583faab065e822826d417fcf1ed103f0dc84678849940acf55878458f4181198d702ed765eef58
7
+ data.tar.gz: 49313b75f55b653a495138f829708431ebefe4cbe8b29991c5c0524f6fb2fc4749cf5647c2aa6be5fb183821e3a0487da7ea10280b30f4088b763aa283dfefd5
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.22.1
1
+ 0.24.0
data/bin/all_images ADDED
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/env ruby
2
+ # Configure like so:
3
+ # dockerfile: |-
4
+ # RUN apk add --no-cache build-base git
5
+ # RUN gem install gem_hadar bundler
6
+ #
7
+ # script: &script |-
8
+ # ruby -v
9
+ # rake test
10
+ #
11
+ # images:
12
+ # ruby:3.0-alpine: *script
13
+ # ruby:2.7-alpine: *script
14
+ # ruby:2.6-alpine: *script
15
+ # ruby:2.5-alpine: *script
16
+ # ruby:2.4-alpine: *script
17
+ # ruby:2.3-alpine: *script
18
+
19
+ require 'yaml'
20
+ require 'tmpdir'
21
+ require 'fileutils'
22
+ include FileUtils
23
+
24
+ alias sh system
25
+ dockerfile: |-
26
+ RUN apk add --no-cache build-base git
27
+ RUN gem install gem_hadar bundler
28
+
29
+ script: &script |-
30
+ ruby -v
31
+ rake test
32
+
33
+ images:
34
+ ruby:3.0-alpine: *script
35
+ ruby:2.7-alpine: *script
36
+ ruby:2.6-alpine: *script
37
+ ruby:2.5-alpine: *script
38
+ ruby:2.4-alpine: *script
39
+ ruby:2.3-alpine: *script
40
+
41
+ def provide_image(image, dockerfile)
42
+ tag = "all_images/#{image}"
43
+ sh "docker pull '#{image}'"
44
+ build_dir = File.join(Dir.tmpdir, 'build')
45
+ mkdir_p build_dir
46
+ cd build_dir do
47
+ File.open('Dockerfile', 'w') do |t|
48
+ t.puts <<~end
49
+ FROM #{image}
50
+
51
+ WORKDIR /work
52
+
53
+ #{dockerfile}
54
+ end
55
+ end
56
+ sh "docker build -t '#{tag}' ."
57
+ end
58
+ tag
59
+ ensure
60
+ rm_rf File.join(Dir.tmpdir, 'build')
61
+ end
62
+
63
+ def red(string)
64
+ "\e[31m#{string}\e[0m"
65
+ end
66
+
67
+ def green(string)
68
+ "\e[32m#{string}\e[0m"
69
+ end
70
+
71
+ config = YAML.load_file(ARGV.shift || '.all_images.yml')
72
+ dockerfile = config['dockerfile'].to_s
73
+ Array(config['images']).each do |image, script|
74
+ tag = provide_image image, dockerfile
75
+ if sh "docker run --name all_images -v `pwd`:/work '#{tag}' sh -c '#{script}'"
76
+ puts green('SUCCESS')
77
+ else
78
+ puts red('FAILURE')
79
+ end
80
+ ensure
81
+ sh 'docker rm -f all_images >/dev/null'
82
+ end
data/bin/fix-brew ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env bash
2
+
3
+ PREFIX=$(brew --prefix)
4
+ sudo chgrp -R brew $PREFIX
5
+ sudo chmod -R g+w $PREFIX
data/bin/irb_connect CHANGED
@@ -14,8 +14,7 @@ Options are
14
14
 
15
15
  -e CODE CODE is execute on the remote irb
16
16
  -l PATH load file PATH into remote irb context
17
- -r HOSTNAME name of the remote host (defaults to #{Utils::IRB::Service.hostname})
18
- -p PORTNUMBER number of the remote port (defaults to #{Utils::IRB::Service.port})
17
+ -u URL druby url to connect to
19
18
  -h display this help
20
19
 
21
20
  Version is #{File.basename($0)} #{Utils::VERSION}.
@@ -24,10 +23,10 @@ Version is #{File.basename($0)} #{Utils::VERSION}.
24
23
  end
25
24
 
26
25
 
27
- $opts = go 'e:r:p:l:h'
26
+ $opts = go 'e:u:l:h'
28
27
  $opts[?h] and usage
29
28
 
30
- proxy = Utils::IRB::Service.connect($opts[?r], $opts[?p])
29
+ proxy = Utils::IRB::Service.connect($opts[?u])
31
30
  case
32
31
  when load_path = $opts[?l]
33
32
  proxy.load(load_path)
data/bin/path CHANGED
@@ -35,4 +35,4 @@ end
35
35
 
36
36
  path.uniq!
37
37
 
38
- puts "#{'export ' if $opt[?e]}PATH=#{path * path_separator}"
38
+ puts "#{'export ' if $opts[?e]}PATH=#{path * path_separator}"
data/lib/utils/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Utils
2
2
  # Utils version
3
- VERSION = '0.22.1'
3
+ VERSION = '0.24.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,22 +1,22 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: utils 0.22.1 ruby lib
2
+ # stub: utils 0.24.0 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "utils".freeze
6
- s.version = "0.22.1"
6
+ s.version = "0.24.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 = "2020-02-11"
11
+ s.date = "2021-12-27"
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 = ["discover".freeze, "classify".freeze, "sedit".freeze, "irb_connect".freeze, "ascii7".freeze, "path".freeze, "enum".freeze, "unquarantine_apps".freeze, "ssh-tunnel".freeze, "xmp".freeze, "brakeman2err".freeze, "search".freeze, "chroot-exec".freeze, "edit".freeze, "tmproc".freeze, "json_check".freeze, "edit_wait".freeze, "errf".freeze, "untest".freeze, "blameline".freeze, "remote_copy".freeze, "git-empty".freeze, "create_cstags".freeze, "vacuum_firefox_sqlite".freeze, "same_files".freeze, "chroot-libs".freeze, "git-versions".freeze, "strip_spaces".freeze, "number_files".freeze, "rssr".freeze, "serve".freeze, "vcf2alias".freeze, "on_change".freeze, "utils-utilsrc".freeze, "myex".freeze, "long_lines".freeze, "dialog-pick".freeze, "probe".freeze, "create_tags".freeze]
14
+ s.executables = ["all_images".freeze, "ascii7".freeze, "blameline".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, "search".freeze, "sedit".freeze, "serve".freeze, "ssh-tunnel".freeze, "strip_spaces".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 = [".gitignore".freeze, "COPYING".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/ascii7".freeze, "bin/blameline".freeze, "bin/brakeman2err".freeze, "bin/chroot-exec".freeze, "bin/chroot-libs".freeze, "bin/classify".freeze, "bin/create_cstags".freeze, "bin/create_tags".freeze, "bin/dialog-pick".freeze, "bin/discover".freeze, "bin/edit".freeze, "bin/edit_wait".freeze, "bin/enum".freeze, "bin/errf".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/remote_copy".freeze, "bin/rssr".freeze, "bin/same_files".freeze, "bin/search".freeze, "bin/sedit".freeze, "bin/serve".freeze, "bin/ssh-tunnel".freeze, "bin/strip_spaces".freeze, "bin/tmproc".freeze, "bin/unquarantine_apps".freeze, "bin/untest".freeze, "bin/utils-utilsrc".freeze, "bin/vacuum_firefox_sqlite".freeze, "bin/vcf2alias".freeze, "bin/xmp".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 = [".gitignore".freeze, "COPYING".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/all_images".freeze, "bin/ascii7".freeze, "bin/blameline".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/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]
17
17
  s.homepage = "http://github.com/flori/utils".freeze
18
18
  s.rdoc_options = ["--title".freeze, "Utils - Some useful command line utilities".freeze, "--main".freeze, "README.md".freeze]
19
- s.rubygems_version = "3.1.2".freeze
19
+ s.rubygems_version = "3.2.22".freeze
20
20
  s.summary = "Some useful command line utilities".freeze
21
21
 
22
22
  if s.respond_to? :specification_version then
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.22.1
4
+ version: 0.24.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-11 00:00:00.000000000 Z
11
+ date: 2021-12-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gem_hadar
@@ -111,45 +111,35 @@ dependencies:
111
111
  description: This ruby gem provides some useful command line utilities
112
112
  email: flori@ping.de
113
113
  executables:
114
- - discover
115
- - classify
116
- - sedit
117
- - irb_connect
114
+ - all_images
118
115
  - ascii7
119
- - path
120
- - enum
121
- - unquarantine_apps
122
- - ssh-tunnel
123
- - xmp
124
- - brakeman2err
125
- - search
126
- - chroot-exec
116
+ - blameline
117
+ - classify
118
+ - create_cstags
119
+ - create_tags
120
+ - discover
127
121
  - edit
128
- - tmproc
129
- - json_check
130
122
  - edit_wait
131
- - errf
132
- - untest
133
- - blameline
134
- - remote_copy
123
+ - enum
124
+ - fix-brew
135
125
  - git-empty
136
- - create_cstags
137
- - vacuum_firefox_sqlite
138
- - same_files
139
- - chroot-libs
140
126
  - git-versions
141
- - strip_spaces
127
+ - irb_connect
128
+ - json_check
129
+ - long_lines
130
+ - myex
142
131
  - number_files
143
- - rssr
144
- - serve
145
- - vcf2alias
146
132
  - on_change
147
- - utils-utilsrc
148
- - myex
149
- - long_lines
150
- - dialog-pick
133
+ - path
151
134
  - probe
152
- - create_tags
135
+ - search
136
+ - sedit
137
+ - serve
138
+ - ssh-tunnel
139
+ - strip_spaces
140
+ - untest
141
+ - utils-utilsrc
142
+ - vcf2alias
153
143
  extensions: []
154
144
  extra_rdoc_files:
155
145
  - README.md
@@ -176,20 +166,17 @@ files:
176
166
  - README.md
177
167
  - Rakefile
178
168
  - VERSION
169
+ - bin/all_images
179
170
  - bin/ascii7
180
171
  - bin/blameline
181
- - bin/brakeman2err
182
- - bin/chroot-exec
183
- - bin/chroot-libs
184
172
  - bin/classify
185
173
  - bin/create_cstags
186
174
  - bin/create_tags
187
- - bin/dialog-pick
188
175
  - bin/discover
189
176
  - bin/edit
190
177
  - bin/edit_wait
191
178
  - bin/enum
192
- - bin/errf
179
+ - bin/fix-brew
193
180
  - bin/git-empty
194
181
  - bin/git-versions
195
182
  - bin/irb_connect
@@ -200,21 +187,14 @@ files:
200
187
  - bin/on_change
201
188
  - bin/path
202
189
  - bin/probe
203
- - bin/remote_copy
204
- - bin/rssr
205
- - bin/same_files
206
190
  - bin/search
207
191
  - bin/sedit
208
192
  - bin/serve
209
193
  - bin/ssh-tunnel
210
194
  - bin/strip_spaces
211
- - bin/tmproc
212
- - bin/unquarantine_apps
213
195
  - bin/untest
214
196
  - bin/utils-utilsrc
215
- - bin/vacuum_firefox_sqlite
216
197
  - bin/vcf2alias
217
- - bin/xmp
218
198
  - lib/utils.rb
219
199
  - lib/utils/config_file.rb
220
200
  - lib/utils/editor.rb
@@ -235,7 +215,7 @@ files:
235
215
  homepage: http://github.com/flori/utils
236
216
  licenses: []
237
217
  metadata: {}
238
- post_install_message:
218
+ post_install_message:
239
219
  rdoc_options:
240
220
  - "--title"
241
221
  - Utils - Some useful command line utilities
@@ -254,8 +234,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
254
234
  - !ruby/object:Gem::Version
255
235
  version: '0'
256
236
  requirements: []
257
- rubygems_version: 3.1.2
258
- signing_key:
237
+ rubygems_version: 3.2.22
238
+ signing_key:
259
239
  specification_version: 4
260
240
  summary: Some useful command line utilities
261
241
  test_files: []
data/bin/brakeman2err DELETED
@@ -1,33 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'utils'
4
- require 'json'
5
- require 'tins/xt'
6
- require 'tins/go'
7
- include Tins::GO
8
- require 'infobar'
9
-
10
- opts = go 'ce'
11
- if opts[?c]
12
- brakeman = `bundle exec which brakeman`.full? or fail "cannot find brakeman in path"
13
- Infobar.busy(label: 'Computing brakeman results') do
14
- system 'bundle exec brakeman -q -i config/brakeman.yml -o .brakeman.json 2>/dev/null' or fail "calling brakeman failed"
15
- end
16
- else
17
- results = JSON File.read('.brakeman.json'), object_class: JSON::GenericObject
18
- if opts[?e]
19
- puts "Found #{results.errors.size} errors and #{results.warnings.size} warnings.",
20
- "_" * 80
21
- for error in results.errors
22
- puts error.location, "Error #{error.error.inspect}"
23
- end
24
- else
25
- puts "Found #{results.warnings.size} warnings.", "_" * 80
26
- end
27
- for warning in results.warnings
28
- puts "#{warning.file}:#{warning.line}",
29
- "#{warning.warning_type} (#{warning.confidence}) #{warning.message.inspect}",
30
- warning.code, "See: #{warning.link}"
31
- end
32
-
33
- end
data/bin/chroot-exec DELETED
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'fileutils'
4
- include FileUtils
5
-
6
- dir = ARGV.shift or fail 'require directory to chroot into'
7
- prg = ARGV.shift || '/bin/bash'
8
- system "mount -t proc none #{dir}/proc"
9
- system "mount -o bind /dev #{dir}/dev"
10
- File.exist?(resolv = "#{dir}/etc/resolv.conf") and
11
- cp resolv, resolv + '.bak'
12
- cp '/etc/resolv.conf', resolv
13
- system "chroot #{dir} #{prg}"
14
- system "umount #{dir}/proc"
15
- system "umount #{dir}/dev"
data/bin/chroot-libs DELETED
@@ -1,26 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'fileutils'
4
- include FileUtils::Verbose
5
-
6
- msg = "Usage: #$0 EXECUTABLE DIR [LIB ..]"
7
- executable = ARGV.shift or fail msg
8
- dir = ARGV.shift or fail msg
9
- dir = File.expand_path dir
10
- mkdir_p dir
11
-
12
- unless executable.start_with? '/'
13
- executable = `which #{executable}`.chomp
14
- end
15
- libs = `ldd #{executable}`.gsub(/^(?:.*?\s+=>\s+|\s+)(.*?)\(.*/, '\1').lines.grep(/\S/).map { |x| x.strip }
16
- libs.concat ARGV
17
- cd dir do
18
- cp executable, File.basename(executable)
19
- for l in libs
20
- begin
21
- cp l, File.basename(l)
22
- rescue Errno::ENOENT => e
23
- warn "Caught #{e.class}: #{e}"
24
- end
25
- end
26
- end
data/bin/dialog-pick DELETED
@@ -1,11 +0,0 @@
1
- #!/bin/bash
2
-
3
- text=${1:-Pick}
4
- tags=`cat`
5
- lines=$(tput lines)
6
- columns=$(tput cols)
7
-
8
- result=$(dialog --no-items --menu "$text" $((lines - 5)) $((columns - 5)) $((lines - 10)) $tags 2>&1 1>/dev/tty)
9
- exitcode=$?
10
- echo $result
11
- exit $exitcode
data/bin/errf DELETED
@@ -1,32 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'term/ansicolor'
4
-
5
- class String
6
- include Term::ANSIColor
7
- end
8
-
9
- file = ARGV.shift
10
- name = ARGV.shift
11
- ENV['RUBYOPT'] = "#{ENV['RUBYOPT']} -Iext:lib:test:tests"
12
-
13
- STDOUT.sync = true
14
- begin
15
- output =
16
- if name
17
- IO.popen("testrb -p '' -n #{name} #{file}", 'r')
18
- else
19
- IO.popen("testrb -p '' #{file}", 'r')
20
- end
21
- until output.eof?
22
- line = output.readline.uncolored
23
- new_line = line.chomp
24
- if new_line.sub!(%r(^(?:\s|[\/\[])*([^:]+):(\d+):(.*))) { "#$1:#$2:#$3" }
25
- puts new_line
26
- else
27
- puts line
28
- end
29
- end
30
- ensure
31
- output and output.close
32
- end
data/bin/remote_copy DELETED
@@ -1,13 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'socket'
4
-
5
- copy_remote_host_port = ENV['COPY_REMOTE_HOST_PORT'] and
6
- copy_remote_host_port =~ /\A([^:]+):([^:]+)\z/ or
7
- fail "environment variable COPY_REMOTE_HOST_PORT of form host:port required"
8
- copy_remote_host, copy_remote_port = $1, $2
9
-
10
- clipboard = TCPSocket.new(copy_remote_host, copy_remote_port)
11
- until STDIN.eof?
12
- clipboard.write STDIN.read(1 << 16)
13
- end
data/bin/rssr DELETED
@@ -1,37 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'rss'
4
- require 'tins'
5
- require 'open-uri'
6
- require 'term/ansicolor'
7
-
8
-
9
- class String
10
- include Term::ANSIColor
11
-
12
- def wrap(cols: Tins::Terminal.cols)
13
- split(?\n).each do |line|
14
- line.size > cols and line.gsub!(/(.{1,#{cols}})(\s+|$)/, "\\1\n")
15
- line.strip!
16
- end * ?\n
17
- end
18
- end
19
-
20
- IO.popen(ENV.fetch('PAGER', `which less`.chomp << ' -r'), 'w') do |pager|
21
- url = ARGV.shift
22
- open(url) do |rss|
23
- feed = RSS::Parser.parse(rss)
24
- pager.puts "Feed: #{feed.channel.title}",
25
- ?– * Tins::Terminal.cols
26
- feed.items.sort_by { |item| -item.date.to_f }.each do |item|
27
- pager.puts(
28
- "Title: #{item.title.bright_blue}",
29
- "Link: #{item.link.red}",
30
- "Date: #{item.date.strftime('%FT%T%z')}",
31
- "",
32
- item.description.wrap.chomp.white,
33
- ?– * Tins::Terminal.cols
34
- )
35
- end
36
- end
37
- end
data/bin/same_files DELETED
@@ -1,38 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'utils'
4
- require 'tins/find'
5
- include Utils::MD5
6
-
7
- def find_same(*paths)
8
- files = Hash.new { |h,k| h[k] = {} }
9
- Tins::Find.find(*paths) do |filename|
10
- file_stat = File.stat(filename)
11
- if file_stat.file?
12
- size = file_stat.size
13
- $DEBUG and warn "Encountered '#{filename}' (#{size} bytes)."
14
- files[size][filename] = true
15
- end
16
- end
17
-
18
- files = files.inject({}) do |h, (_,fs)|
19
- keys = fs.keys
20
- if keys.size >= 2
21
- keys.each { |k| h[k] = true }
22
- end
23
- h
24
- end.keys
25
-
26
- md5s = Hash.new { |h,k| h[k] = [] }
27
- for filename in files
28
- md5sum = md5 filename
29
- md5s[md5sum] << filename
30
- end
31
- files = md5s.values
32
- files.reject! { |fs| fs.size < 2 }
33
- files
34
- end
35
-
36
- puts find_same(*ARGV).map { |fs| [ fs.size, fs ] }.sort.map { |c, fs|
37
- "#{c}\t#{fs.sort.map { |f| "'#{f}'" } * "\t"}"
38
- }
data/bin/tmproc DELETED
@@ -1,21 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'yaml'
4
- require 'tins'
5
-
6
- filename = ARGV.shift || 'Procfile'
7
- procfile = YAML.load_file(filename)
8
-
9
- unless ENV['TMUX']
10
- name = File.basename(Dir.pwd)
11
- exec 'tmux', 'new-session', '-s', name, '-n', ?s, '-A', $0, filename
12
- end
13
-
14
- tmux_pane = ENV.fetch('TMUX_PANE')
15
- lines = Tins::Terminal.lines
16
-
17
- procfile.each_value do |process|
18
- system "(tmux select-pane -t #{tmux_pane} \\; split-window -l #{lines / procfile.size} #{process}) &"
19
- end
20
-
21
- exec 'tmux', 'new-window', '-n', 'e', 'edit', ?;, 'split-window', '-h', 'bundle', 'exec', 'probe', '-l'
@@ -1,13 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'fileutils'
4
- include FileUtils::Verbose
5
-
6
- prefix = ARGV.shift || ''
7
- directory = File.join(prefix, 'Applications')
8
- if File.directory?(directory)
9
- cd directory do
10
- STDERR.puts 'xattr -rd com.apple.quarantine'
11
- system 'xattr -rd com.apple.quarantine'
12
- end
13
- end
@@ -1,23 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'fileutils'
4
- include FileUtils
5
-
6
- case `uname -s`.chomp
7
- when 'Darwin'
8
- profiles="#{ENV['HOME']}/Library/Application Support/Firefox/Profiles"
9
- else
10
- profiles="#{ENV['HOME']}/.mozilla/firefox"
11
- end
12
-
13
- cd profiles do
14
- for p in Dir['*.default']
15
- cd p do
16
- for db in Dir['*.sqlite']
17
- print "Vacuuming #{db}..."
18
- system "sqlite3 #{db} VACUUM"
19
- puts "done."
20
- end
21
- end
22
- end
23
- end
data/bin/xmp DELETED
@@ -1,74 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'open3'
3
-
4
- class String
5
- unless method_defined?(:lines)
6
- def lines
7
- self
8
- end
9
- end
10
- end
11
-
12
- MARKER = "!XMP#{Time.new.to_i}_#{rand(1000000)}!"
13
- XMPRE = Regexp.new("^" + Regexp.escape(MARKER) + '\[([0-9]+)\] => (.*)')
14
- VAR = "_xmp_#{Time.new.to_i}_#{rand(1000000)}"
15
- WARNING_RE = /-:([0-9]+): warning: (.*)/
16
- interpreter = ARGV
17
- interpreter << 'ruby' << '-w' if interpreter.empty?
18
-
19
- IO.popen(interpreter.first, 'w') do |script|
20
- script.write <<-TEST
21
- begin
22
- require 'rubygems'
23
- rescue LoadError
24
- exit 1
25
- end
26
- exit 0
27
- TEST
28
- end
29
- if $?.exitstatus == 1
30
- ENV['RUBYOPT'] = ENV['RUBYOPT'].gsub(/-rr?ubygems/i, '')
31
- end
32
- code = STDIN.read
33
-
34
- idx = 0
35
- newcode = code.gsub(/^(.*) # =>.*/) do |l|
36
- expr = $1
37
- (/^\s*#/ =~ l) ? l :
38
- %!((#{VAR} = (#{expr}); $stderr.puts("#{MARKER}[#{idx+=1}] => " + #{VAR}.inspect) || #{VAR}))!
39
- end
40
- stdin, stdout, stderr = Open3::popen3(*interpreter)
41
- stdin.puts newcode
42
- stdin.close
43
- output = stderr.readlines
44
-
45
- results = Hash.new{|h,k| h[k] = []}
46
- output.grep(XMPRE).each do |line|
47
- result_id, result = XMPRE.match(line).captures
48
- results[result_id.to_i] << result
49
- end
50
-
51
- idx = 0
52
- annotated = code.gsub(/^(.*) # =>.*/) do |l|
53
- expr = $1
54
- (/^\s*#/ =~ l) ? l : "#{expr} # => " + (results[idx+=1] || []).join(", ")
55
- end.gsub(/ # !>.*/, '').gsub(/# (>>|~>)[^\n]*\n/m, "");
56
-
57
- warnings = {}
58
- output.join.lines.grep(WARNING_RE).map do |x|
59
- md = WARNING_RE.match(x)
60
- warnings[md[1].to_i] = md[2]
61
- end
62
- idx = 0
63
- annotated = annotated.lines.map do |line|
64
- w = warnings[idx+=1]
65
- w ? (line.chomp + " # !> #{w}") : line
66
- end
67
- puts annotated
68
- output.reject!{|x| /^-:[0-9]+: warning/.match(x)}
69
- if exception = /^-:[0-9]+:.*/m.match(output.join)
70
- puts exception[0].map{|line| "# ~> " + line }
71
- end
72
- if (s = stdout.read) != ""
73
- puts "# >> #{s.inspect}"
74
- end