clogger 0.8.0 → 0.9.0

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.
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  rdoc_url: http://clogger.rubyforge.org/
3
- cgit_url: http://git.bogomips.org/cgit/clogger.git
4
- git_url: git://git.bogomips.org/clogger.git
3
+ cgit_url: http://bogomips.org/clogger.git
4
+ git_url: git://bogomips.org/clogger.git
5
5
  changelog_since: 0.4.0
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
 
3
3
  GVF=GIT-VERSION-FILE
4
- DEF_VER=v0.8.0.GIT
4
+ DEF_VER=v0.9.0.GIT
5
5
 
6
6
  LF='
7
7
  '
data/README CHANGED
@@ -96,12 +96,12 @@ that receives a "<<" method:
96
96
 
97
97
  The latest development happens in git and is published to the following:
98
98
 
99
- git://git.bogomips.org/clogger.git
99
+ git://bogomips.org/clogger.git
100
100
  git://repo.or.cz/clogger.git
101
101
 
102
102
  You may also browse and download snapshot tarballs:
103
103
 
104
- * http://git.bogomips.org/cgit/clogger.git (cgit)
104
+ * http://bogomips.org/clogger.git (cgit)
105
105
  * http://repo.or.cz/w/clogger.git (gitweb)
106
106
 
107
107
  The mailing list (see below) is central for coordination and
data/Rakefile CHANGED
@@ -5,8 +5,8 @@ rescue LoadError
5
5
  warn "rake-compiler not available, cross compiling disabled"
6
6
  end
7
7
 
8
- cgit_url = "http://git.bogomips.org/cgit/clogger.git"
9
- git_url = 'git://git.bogomips.org/clogger.git'
8
+ cgit_url = "http://bogomips.org/clogger.git"
9
+ git_url = 'git://bogomips.org/clogger.git'
10
10
 
11
11
  desc "post news article to rubyforge"
12
12
  task :publish_news do
@@ -0,0 +1,58 @@
1
+ #ifdef HAVE_RB_THREAD_BLOCKING_REGION
2
+ struct stat_args { const char *path; struct stat *buf; };
3
+ static VALUE ng_stat(void *ptr)
4
+ {
5
+ struct stat_args *a = ptr;
6
+ return (VALUE)stat(a->path, a->buf);
7
+ }
8
+ static int my_stat(const char *path, struct stat *buf)
9
+ {
10
+ struct stat_args a;
11
+
12
+ a.path = path;
13
+ a.buf = buf;
14
+ return (int)rb_thread_blocking_region(ng_stat, &a, RUBY_UBF_IO, 0);
15
+ }
16
+ #ifndef HAVE_RB_THREAD_IO_BLOCKING_REGION
17
+ # define rb_thread_io_blocking_region(fn,data,fd) \
18
+ rb_thread_blocking_region((fn),(data), RUBY_UBF_IO, 0)
19
+ #endif
20
+
21
+ struct fstat_args { int fd; struct stat *buf; };
22
+ static VALUE ng_fstat(void *ptr)
23
+ {
24
+ struct fstat_args *a = ptr;
25
+ return (VALUE)fstat(a->fd, a->buf);
26
+ }
27
+
28
+ static int my_fstat(int fd, struct stat *buf)
29
+ {
30
+ struct fstat_args a;
31
+
32
+ a.fd = fd;
33
+ a.buf = buf;
34
+ return (int)rb_thread_io_blocking_region(ng_fstat, &a, fd);
35
+ }
36
+
37
+ struct write_args { int fd; const void *buf; size_t count; };
38
+ static VALUE ng_write(void *ptr)
39
+ {
40
+ struct write_args *a = ptr;
41
+ return (VALUE)write(a->fd, a->buf, a->count);
42
+ }
43
+ static ssize_t my_write(int fd, const void *buf, size_t count)
44
+ {
45
+ struct write_args a;
46
+ ssize_t r;
47
+
48
+ a.fd = fd;
49
+ a.buf = buf;
50
+ a.count = count;
51
+ r = (ssize_t)rb_thread_io_blocking_region(ng_write, &a, fd);
52
+
53
+ return r;
54
+ }
55
+ # define stat(fd,buf) my_stat((fd),(buf))
56
+ # define fstat(fd,buf) my_fstat((fd),(buf))
57
+ # define write(fd,buf,count) my_write((fd),(buf),(count))
58
+ #endif
@@ -19,6 +19,7 @@
19
19
  #include <time.h>
20
20
  #include "ruby_1_9_compat.h"
21
21
  #include "broken_system_compat.h"
22
+ #include "blocking_helpers.h"
22
23
 
23
24
  /*
24
25
  * Availability of a monotonic clock needs to be detected at runtime
@@ -607,6 +608,11 @@ static VALUE cwrite(struct clogger *c)
607
608
  return Qnil;
608
609
  }
609
610
 
611
+ static VALUE clogger_write(VALUE self)
612
+ {
613
+ return cwrite(clogger_get(self));
614
+ }
615
+
610
616
  static void init_logger(struct clogger *c, VALUE path)
611
617
  {
612
618
  ID id;
@@ -686,18 +692,20 @@ static VALUE clogger_init(int argc, VALUE *argv, VALUE self)
686
692
  return self;
687
693
  }
688
694
 
689
- static VALUE body_iter_i(VALUE str, VALUE memop)
695
+ static VALUE body_iter_i(VALUE str, VALUE self)
690
696
  {
691
- off_t *len = (off_t *)memop;
697
+ struct clogger *c = clogger_get(self);
692
698
 
693
699
  str = rb_obj_as_string(str);
694
- *len += RSTRING_LEN(str);
700
+ c->body_bytes_sent += RSTRING_LEN(str);
695
701
 
696
702
  return rb_yield(str);
697
703
  }
698
704
 
699
- static VALUE body_close(struct clogger *c)
705
+ static VALUE body_close(VALUE self)
700
706
  {
707
+ struct clogger *c = clogger_get(self);
708
+
701
709
  if (rb_respond_to(c->body, close_id))
702
710
  return rb_funcall(c->body, close_id, 0);
703
711
  return Qnil;
@@ -717,7 +725,7 @@ static VALUE clogger_each(VALUE self)
717
725
 
718
726
  rb_need_block();
719
727
  c->body_bytes_sent = 0;
720
- rb_iterate(rb_each, c->body, body_iter_i, (VALUE)&c->body_bytes_sent);
728
+ rb_iterate(rb_each, c->body, body_iter_i, self);
721
729
 
722
730
  return self;
723
731
  }
@@ -732,9 +740,8 @@ static VALUE clogger_each(VALUE self)
732
740
  */
733
741
  static VALUE clogger_close(VALUE self)
734
742
  {
735
- struct clogger *c = clogger_get(self);
736
743
 
737
- return rb_ensure(body_close, (VALUE)c, cwrite, (VALUE)c);
744
+ return rb_ensure(body_close, self, clogger_write, self);
738
745
  }
739
746
 
740
747
  /* :nodoc: */
@@ -881,23 +888,25 @@ static VALUE respond_to(VALUE self, VALUE method)
881
888
  static VALUE to_path(VALUE self)
882
889
  {
883
890
  struct clogger *c = clogger_get(self);
884
- VALUE path = rb_funcall(c->body, to_path_id, 0);
885
891
  struct stat sb;
886
892
  int rv;
887
- unsigned devfd;
888
- const char *cpath = StringValuePtr(path);
893
+ VALUE path = rb_funcall(c->body, to_path_id, 0);
889
894
 
890
895
  /* try to avoid an extra path lookup */
891
- if (rb_respond_to(c->body, to_io_id))
896
+ if (rb_respond_to(c->body, to_io_id)) {
892
897
  rv = fstat(my_fileno(c->body), &sb);
893
- /*
894
- * Rainbows! can use "/dev/fd/%u" in to_path output to avoid
895
- * extra open() syscalls, too.
896
- */
897
- else if (sscanf(cpath, "/dev/fd/%u", &devfd) == 1)
898
- rv = fstat((int)devfd, &sb);
899
- else
900
- rv = stat(cpath, &sb);
898
+ } else {
899
+ const char *cpath = StringValueCStr(path);
900
+ unsigned devfd;
901
+ /*
902
+ * Rainbows! can use "/dev/fd/%u" in to_path output to avoid
903
+ * extra open() syscalls, too.
904
+ */
905
+ if (sscanf(cpath, "/dev/fd/%u", &devfd) == 1)
906
+ rv = fstat((int)devfd, &sb);
907
+ else
908
+ rv = stat(cpath, &sb);
909
+ }
901
910
 
902
911
  /*
903
912
  * calling this method implies the web server will bypass
@@ -22,6 +22,8 @@ begin
22
22
  have_func('localtime_r', 'time.h') or raise "localtime_r needed"
23
23
  have_func('gmtime_r', 'time.h') or raise "gmtime_r needed"
24
24
  have_func('rb_str_set_len', 'ruby.h')
25
+ have_func('rb_thread_blocking_region', 'ruby.h')
26
+ have_func('rb_thread_io_blocking_region', 'ruby.h')
25
27
  dir_config('clogger_ext')
26
28
  create_makefile('clogger_ext')
27
29
  rescue Object => err
@@ -4,9 +4,6 @@ require 'rack'
4
4
  # See the README for usage instructions
5
5
  class Clogger
6
6
 
7
- # the version of Clogger, currently 0.8.0
8
- VERSION = '0.8.0'
9
-
10
7
  # :stopdoc:
11
8
  OP_LITERAL = 0
12
9
  OP_REQUEST = 1
data/pkg.mk CHANGED
@@ -1,12 +1,13 @@
1
1
  RUBY = ruby
2
2
  RAKE = rake
3
3
  RSYNC = rsync
4
+ WRONGDOC = wrongdoc
4
5
 
5
6
  GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
6
7
  @./GIT-VERSION-GEN
7
8
  -include GIT-VERSION-FILE
8
9
  -include local.mk
9
- DLEXT := $(shell $(RUBY) -rrbconfig -e 'puts Config::CONFIG["DLEXT"]')
10
+ DLEXT := $(shell $(RUBY) -rrbconfig -e 'puts RbConfig::CONFIG["DLEXT"]')
10
11
  RUBY_VERSION := $(shell $(RUBY) -e 'puts RUBY_VERSION')
11
12
  RUBY_ENGINE := $(shell $(RUBY) -e 'puts((RUBY_ENGINE rescue "ruby"))')
12
13
  lib := lib
@@ -43,26 +44,30 @@ $(ext_dl): $(ext_src) $(ext_pfx_src) $(ext_pfx)/$(ext)/Makefile
43
44
  $(MAKE) -C $(@D)
44
45
  lib := $(lib):$(ext_pfx)/$(ext)
45
46
  build: $(ext_dl)
47
+ else
48
+ build:
46
49
  endif
47
50
 
48
- pkg_extra := GIT-VERSION-FILE NEWS ChangeLog LATEST
51
+ pkg_extra += GIT-VERSION-FILE NEWS ChangeLog LATEST
49
52
  ChangeLog: GIT-VERSION-FILE .wrongdoc.yml
50
- wrongdoc prepare
53
+ $(WRONGDOC) prepare
54
+ NEWS LATEST: ChangeLog
51
55
 
52
56
  manifest:
53
57
  $(RM) .manifest
54
58
  $(MAKE) .manifest
55
59
 
56
- .manifest: ChangeLog
60
+ .manifest: $(pkg_extra)
57
61
  (git ls-files && for i in $@ $(pkg_extra); do echo $$i; done) | \
58
62
  LC_ALL=C sort > $@+
59
63
  cmp $@+ $@ || mv $@+ $@
60
64
  $(RM) $@+
61
65
 
62
- doc: .document .wrongdoc.yml
63
- find lib ext -type f -name '*.rbc' -exec rm -f '{}' ';'
66
+ doc:: .document .wrongdoc.yml $(pkg_extra)
67
+ -find lib -type f -name '*.rbc' -exec rm -f '{}' ';'
68
+ -find ext -type f -name '*.rbc' -exec rm -f '{}' ';'
64
69
  $(RM) -r doc
65
- wrongdoc all
70
+ $(WRONGDOC) all
66
71
  install -m644 COPYING doc/COPYING
67
72
  install -m644 $(shell grep '^[A-Z]' .document) doc/
68
73
 
@@ -75,10 +80,10 @@ release_changes := release_changes-$(VERSION)
75
80
  release-notes: $(release_notes)
76
81
  release-changes: $(release_changes)
77
82
  $(release_changes):
78
- wrongdoc release_changes > $@+
83
+ $(WRONGDOC) release_changes > $@+
79
84
  $(VISUAL) $@+ && test -s $@+ && mv $@+ $@
80
85
  $(release_notes):
81
- wrongdoc release_notes > $@+
86
+ $(WRONGDOC) release_notes > $@+
82
87
  $(VISUAL) $@+ && test -s $@+ && mv $@+ $@
83
88
 
84
89
  # ensures we're actually on the tagged $(VERSION), only used for release
@@ -142,7 +147,7 @@ test_units := $(wildcard test/test_*.rb)
142
147
  test: test-unit
143
148
  test-unit: $(test_units)
144
149
  $(test_units): build
145
- $(RUBY) -I $(lib) $@
150
+ $(RUBY) -I $(lib) $@ $(RUBY_TEST_OPTS)
146
151
 
147
152
  # this requires GNU coreutils variants
148
153
  ifneq ($(RSYNC_DEST),)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clogger
3
3
  version: !ruby/object:Gem::Version
4
- hash: 63
5
- prerelease: false
4
+ hash: 59
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
- - 8
8
+ - 9
9
9
  - 0
10
- version: 0.8.0
10
+ version: 0.9.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - cloggers
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-21 00:00:00 +00:00
18
+ date: 2011-03-15 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -82,6 +82,7 @@ files:
82
82
  - README
83
83
  - Rakefile
84
84
  - clogger.gemspec
85
+ - ext/clogger_ext/blocking_helpers.h
85
86
  - ext/clogger_ext/broken_system_compat.h
86
87
  - ext/clogger_ext/clogger.c
87
88
  - ext/clogger_ext/extconf.rb
@@ -102,7 +103,7 @@ rdoc_options:
102
103
  - -t
103
104
  - \Clogger - configurable request logging for Rack
104
105
  - -W
105
- - http://git.bogomips.org/cgit/clogger.git/tree/%s
106
+ - http://bogomips.org/clogger.git/tree/%s
106
107
  require_paths:
107
108
  - lib
108
109
  - ext
@@ -127,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
128
  requirements: []
128
129
 
129
130
  rubyforge_project: clogger
130
- rubygems_version: 1.3.7
131
+ rubygems_version: 1.6.1
131
132
  signing_key:
132
133
  specification_version: 3
133
134
  summary: configurable request logging for Rack