file-tail 1.0.4 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -1,3 +1,7 @@
1
+ 2010-03-25 * 1.0.5 * Added rtail executable, a nice app to supervise logfiles
2
+ and logdirs.
3
+ * Disabled creation of gem spec file.
4
+ * Cleaned up documentation a bit.
1
5
  2009-08-21 * 1.0.4 * Fixed the threaded tests for Ruby 1.9.
2
6
  * Create a gem spec file.
3
7
  * Some cleanup.
data/README CHANGED
@@ -1,7 +1,25 @@
1
- Installation
2
- ============
1
+ == Description
3
2
 
4
- Just type into the command line as root:
3
+ This is a small ruby library that allows it to "tail" files in Ruby, including
4
+ following a file, that still is growing like the unix command 'tail -f' can.
5
+
6
+ == Download
7
+
8
+ The latest version of <b>File::Tail</b> (file-tail) can be found at
9
+
10
+ http://www.ping.de/~flori
11
+
12
+ Online Documentation should be located at
13
+
14
+ http://flori.github.com/file-tail
15
+
16
+ == Installation
17
+
18
+ To install file-tail via its gem type:
19
+
20
+ # gem install file-tail
21
+
22
+ To install from the source repository, just type into the command line as root:
5
23
 
6
24
  # rake install
7
25
 
@@ -9,8 +27,34 @@ or
9
27
 
10
28
  # ruby install.rb
11
29
 
12
- Documentation
13
- =============
30
+ == Usage
31
+
32
+ File::Tail is a module in the File class. A lightweight class interface for
33
+ logfiles can be seen under File::Tail::Logfile.
34
+
35
+ Direct extension of File objects with File::Tail works like that:
36
+ File.open(filename) do |log|
37
+ log.extend(File::Tail)
38
+ log.interval = 10
39
+ log.backward(10)
40
+ log.tail { |line| puts line }
41
+ end
42
+
43
+ It's also possible to mix File::Tail in your own File classes
44
+ (see also File::Tail::Logfile):
45
+ class MyFile < File
46
+ include File::Tail
47
+ end
48
+ log = MyFile.new("myfile")
49
+ log.interval = 10
50
+ log.backward(10)
51
+ log.tail { |line| print line }
52
+
53
+ The forward/backward method returns self, so it's possible to chain
54
+ methods together like that:
55
+ log.backward(10).tail { |line| puts line }
56
+
57
+ == Documentation
14
58
 
15
59
  To create the documentation of this module, type
16
60
 
@@ -26,13 +70,12 @@ In the examples direcotry is a small example of tail and
26
70
  pager program that use this module. You also may want look
27
71
  at the end of file/tail.rb for a little example.
28
72
 
29
- Author
30
- ======
31
-
32
- Florian Frank <flori@ping.de>
73
+ == Author
33
74
 
34
- License
35
- =======
75
+ Florian Frank mailto:flori@ping.de
36
76
 
37
- GNU General Public License (GPL), Version 2
77
+ == License
38
78
 
79
+ This is free software; you can redistribute it and/or modify it under
80
+ the terms of the GNU General Public License Version 2 as published by
81
+ the Free Software Foundation: http://www.gnu.org/copyleft/gpl.html
data/Rakefile CHANGED
@@ -34,38 +34,30 @@ task :coverage do
34
34
  end
35
35
 
36
36
  if defined? Gem
37
- spec_src =<<GEM
38
- # -*- encoding: utf-8 -*-
39
- Gem::Specification.new do |s|
40
- s.name = '#{PKG_NAME}'
41
- s.version = '#{PKG_VERSION}'
42
- s.summary = "File::Tail for Ruby"
43
- s.description = "Library to tail files in Ruby"
44
-
45
- s.files = #{PKG_FILES.to_a.sort.inspect}
46
-
47
- s.require_path = 'lib'
48
-
49
- s.has_rdoc = true
50
- s.rdoc_options << '--main' << 'doc-main.txt'
51
- s.extra_rdoc_files << 'doc-main.txt'
52
- s.test_files << 'tests/test_file-tail.rb'
53
-
54
- s.author = "Florian Frank"
55
- s.email = "flori@ping.de"
56
- s.homepage = "http://#{PKG_NAME}.rubyforge.org"
57
- s.rubyforge_project = "#{PKG_NAME}"
58
- end
59
- GEM
37
+ spec = Gem::Specification.new do |s|
38
+ s.name = PKG_NAME
39
+ s.version = PKG_VERSION
40
+ s.summary = "File::Tail for Ruby"
41
+ s.description = "Library to tail files in Ruby"
42
+
43
+ s.executables = 'rtail'
44
+ s.files = PKG_FILES
45
+
46
+ s.require_path = 'lib'
47
+
48
+ s.add_dependency 'spruz', '>=0.1.0'
49
+
50
+ s.has_rdoc = true
51
+ s.rdoc_options << '--main' << 'README' << '--title' << 'File::Tail - Tailing files in Ruby'
52
+ s.extra_rdoc_files << 'README'
53
+ s.test_files << 'tests/test_file-tail.rb'
60
54
 
61
- desc 'Create a gemspec file'
62
- task :gemspec do
63
- File.open("#{PKG_NAME}.gemspec", 'w') do |f|
64
- f.puts spec_src
65
- end
55
+ s.author = "Florian Frank"
56
+ s.email = "flori@ping.de"
57
+ s.homepage = "http://flori.github.com/#{PKG_NAME}"
58
+ s.rubyforge_project = PKG_NAME
66
59
  end
67
60
 
68
- spec = eval(spec_src)
69
61
  Rake::GemPackageTask.new(spec) do |pkg|
70
62
  pkg.need_tar = true
71
63
  pkg.package_files += PKG_FILES
@@ -91,6 +83,6 @@ EOT
91
83
  end
92
84
  end
93
85
 
94
- task :default => [ :version, :gemspec, :test ]
86
+ task :default => [ :version, :test ]
95
87
 
96
- task :release => [ :clean, :version, :gemspec, :package ]
88
+ task :release => [ :clean, :version, :package ]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.4
1
+ 1.0.5
data/bin/rtail ADDED
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'file/tail'
4
+ require 'spruz/go'
5
+ include Spruz::GO
6
+ require 'thread'
7
+ Thread.abort_on_exception = true
8
+
9
+ $opt = go 'm:h'
10
+ if $opt['h']
11
+ puts <<EOT
12
+ Usage: #{File.basename($0)} [OPTS] PATHES
13
+
14
+ OPTS are
15
+ -m PATTERN only tail files matching PATTERN, e. g. '*.log'
16
+ -h to display this help
17
+
18
+ EOT
19
+ end
20
+
21
+ dirs, logfiles = ARGV.partition { |path| File.directory?(path) }
22
+ $log_threads = {}
23
+ $log_mutex = Mutex.new
24
+
25
+ def add_log(logfile)
26
+ logfile = File.expand_path logfile
27
+ $log_threads.key?(logfile) and return
28
+ warn "Tailing '#{logfile}'."
29
+ $log_threads[logfile] = Thread.new do
30
+ File.open(logfile) do |l|
31
+ l.sync = true
32
+ l.extend File::Tail
33
+ l.backward
34
+ l.tail do |line|
35
+ $log_mutex.synchronize do
36
+ print line
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ def add_logs(logfiles)
44
+ for l in logfiles
45
+ if $opt['m']
46
+ File.fnmatch?($opt['m'], l) and add_log l
47
+ else
48
+ add_log l
49
+ end
50
+ end
51
+ end
52
+
53
+ add_logs(logfiles)
54
+
55
+ begin
56
+ loop do
57
+ for d in dirs
58
+ logfiles = Dir[File.join(d, '*')].select do |x|
59
+ File.file?(x) || File.symlink?(x)
60
+ end
61
+ add_logs logfiles
62
+ end
63
+ sleep 1
64
+ end
65
+ rescue Interrupt
66
+ warn " *** Interrupted *** "
67
+ end
data/lib/file/tail.rb CHANGED
@@ -286,7 +286,7 @@ class File
286
286
  raise BreakException if @break_if_eof
287
287
  raise ReturnException if @return_if_eof
288
288
  sleep_interval
289
- rescue Errno::ENOENT, Errno::ESTALE
289
+ rescue Errno::ENOENT, Errno::ESTALE, Errno::EBADF
290
290
  raise ReopenException
291
291
  end
292
292
 
@@ -1,7 +1,7 @@
1
1
  class File
2
2
  module Tail
3
3
  # File::Tail version
4
- VERSION = '1.0.4'
4
+ VERSION = '1.0.5'
5
5
  VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
6
6
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
7
7
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
data/make_doc.rb CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  $outdir = 'doc/'
4
4
  puts "Creating documentation in '#$outdir'."
5
- system "rdoc -m doc-main.txt -o #$outdir doc-main.txt #{Dir['lib/**/*.rb'] * ' '}"
5
+ system "rdoc -m README -t 'File::Tail - Tailing files in Ruby' -o #$outdir README #{Dir['lib/**/*.rb'] * ' '}"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: file-tail
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
@@ -9,41 +9,51 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-08-21 00:00:00 +02:00
12
+ date: 2010-03-25 00:00:00 +01:00
13
13
  default_executable:
14
- dependencies: []
15
-
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: spruz
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.1.0
24
+ version:
16
25
  description: Library to tail files in Ruby
17
26
  email: flori@ping.de
18
- executables: []
19
-
27
+ executables:
28
+ - rtail
20
29
  extensions: []
21
30
 
22
31
  extra_rdoc_files:
23
- - doc-main.txt
32
+ - README
24
33
  files:
25
34
  - CHANGES
26
- - COPYING
35
+ - bin/rtail
36
+ - VERSION
27
37
  - README
38
+ - make_doc.rb
28
39
  - Rakefile
29
- - VERSION
30
40
  - examples/pager.rb
31
41
  - examples/tail.rb
32
- - file-tail.gemspec
33
- - install.rb
34
- - lib/file/tail.rb
35
42
  - lib/file/tail/version.rb
36
- - make_doc.rb
43
+ - lib/file/tail.rb
37
44
  - tests/test_file-tail.rb
38
- - doc-main.txt
45
+ - COPYING
46
+ - install.rb
39
47
  has_rdoc: true
40
- homepage: http://file-tail.rubyforge.org
48
+ homepage: http://flori.github.com/file-tail
41
49
  licenses: []
42
50
 
43
51
  post_install_message:
44
52
  rdoc_options:
45
53
  - --main
46
- - doc-main.txt
54
+ - README
55
+ - --title
56
+ - File::Tail - Tailing files in Ruby
47
57
  require_paths:
48
58
  - lib
49
59
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -61,7 +71,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
61
71
  requirements: []
62
72
 
63
73
  rubyforge_project: file-tail
64
- rubygems_version: 1.3.2
74
+ rubygems_version: 1.3.5
65
75
  signing_key:
66
76
  specification_version: 3
67
77
  summary: File::Tail for Ruby
data/doc-main.txt DELETED
@@ -1,54 +0,0 @@
1
- == File::Tail - Tailing files in Ruby
2
-
3
- === Description
4
-
5
- This is a small ruby library that allows it to "tail" files in Ruby,
6
- including following a file, that still is growing like the unix command 'tail
7
- -f' can.
8
-
9
- === Author
10
-
11
- Florian Frank mailto:flori@ping.de
12
-
13
- === License
14
-
15
- This is free software; you can redistribute it and/or modify it under
16
- the terms of the GNU General Public License Version 2 as published by
17
- the Free Software Foundation: http://www.gnu.org/copyleft/gpl.html
18
-
19
- === Download
20
-
21
- The latest version of <b>File::Tail</b> (file-tail) can be found at
22
-
23
- http://rubyforge.org/frs/?group_id=393
24
-
25
- Online Documentation should be located at
26
-
27
- http://file-tail.rubyforge.org
28
-
29
- === Usage
30
-
31
- File::Tail is a module in the File class. A lightweight class interface for
32
- logfiles can be seen under File::Tail::Logfile.
33
-
34
- Direct extension of File objects with File::Tail works like that:
35
- File.open(filename) do |log|
36
- log.extend(File::Tail)
37
- log.interval = 10
38
- log.backward(10)
39
- log.tail { |line| puts line }
40
- end
41
-
42
- It's also possible to mix File::Tail in your own File classes
43
- (see also File::Tail::Logfile):
44
- class MyFile < File
45
- include File::Tail
46
- end
47
- log = MyFile.new("myfile")
48
- log.interval = 10
49
- log.backward(10)
50
- log.tail { |line| print line }
51
-
52
- The forward/backward method returns self, so it's possible to chain
53
- methods together like that:
54
- log.backward(10).tail { |line| puts line }
data/file-tail.gemspec DELETED
@@ -1,21 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- Gem::Specification.new do |s|
3
- s.name = 'file-tail'
4
- s.version = '1.0.4'
5
- s.summary = "File::Tail for Ruby"
6
- s.description = "Library to tail files in Ruby"
7
-
8
- s.files = ["CHANGES", "COPYING", "README", "Rakefile", "VERSION", "examples", "examples/pager.rb", "examples/tail.rb", "file-tail.gemspec", "install.rb", "lib", "lib/file", "lib/file/tail", "lib/file/tail.rb", "lib/file/tail/version.rb", "make_doc.rb", "tests", "tests/test_file-tail.rb"]
9
-
10
- s.require_path = 'lib'
11
-
12
- s.has_rdoc = true
13
- s.rdoc_options << '--main' << 'doc-main.txt'
14
- s.extra_rdoc_files << 'doc-main.txt'
15
- s.test_files << 'tests/test_file-tail.rb'
16
-
17
- s.author = "Florian Frank"
18
- s.email = "flori@ping.de"
19
- s.homepage = "http://file-tail.rubyforge.org"
20
- s.rubyforge_project = "file-tail"
21
- end