clogger 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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