pg 0.11.0 → 0.12.0pre258

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.
File without changes
@@ -0,0 +1,37 @@
1
+
2
+ Thanks to all the great people that have contributed code, suggestions, and patches through the years. If you contribute a patch, please include a patch for this file that adds your name to the list.
3
+
4
+ * Dennis Vshivkov <walrus@amur.ru>
5
+ * Gabriel Emerson <gemerson@evalsoft.com>
6
+ * Noboru Saitou <noborus@netlab.jp>
7
+ * Akinori MUSHA <knu@iDaemons.org>
8
+ * Andy Yu <is@gnuchina.org>
9
+ * Ceri Storey <cez@compsoc.man.ac.uk>
10
+ * Gavin Kistner <gavin@refinery.com>
11
+ * Henry T. So Jr. <henryso@panix.com>
12
+ * Jeremy Henty <jeremy@chaos.org.uk>
13
+ * <kasa@air.linkclub.or.jp>
14
+ * Leon Brooks <leon-ruby-postgres@cyberknights.com.au>
15
+ * Martin Hedenfalk <mahe@kth.se>
16
+ * Yukihiro Matsumoto <matz@zetabits.com>
17
+ * Eiji Matsumoto <usagi@ruby.club.or.jp>
18
+ * MoonWolf <moonwolf@moonwolf.com>
19
+ * <m_seki@mva.biglobe.ne.jp>
20
+ * Nate Haggard <nate@wordplace.com>
21
+ * Neil Conway <nconway@klamath.dyndns.org>
22
+ * Noboru Matui <silicon@mx1.freemail.ne.jp>
23
+ * Okada Jun <yun@be-in.org>
24
+ * Shirai,Kaoru <shirai@p1jp.com>
25
+ * Riley <wormwood@speakeasy.org>
26
+ * shibata <kshibata@vesta.ocn.ne.jp>
27
+ * <greentea@fa2.so-net.ne.jp>
28
+ * ts <decoux@moulon.inra.fr>
29
+ * Yuta TSUBOI <yuuta-t@is.aist-nara.ac.jp>
30
+ * Lugovoi Nikolai <meadow.nnick@gmail.com>
31
+ * Jeff Davis <ruby@j-davis.com>
32
+ * Bertram Scharpf <software@bertram-scharpf.de>
33
+ * Michael Granger <ged@FaerieMUD.org>
34
+ * Mahlon E. Smith <mahlon@martini.nu>
35
+
36
+ Jason Yanowitz <me-bitbucket@jasonyanowitz.com>
37
+
@@ -0,0 +1,60 @@
1
+ == v0.12.0 [2011-10-07] Michael Granger <ged@FaerieMUD.org>
2
+
3
+ - PGconn#wait_for_notify
4
+ * send nil as the payload argument if the NOTIFY didn't have one.
5
+ * accept a nil argument for no timeout (Sequel support)
6
+ * Fixed API docs
7
+ * Taint and encode event name and payload
8
+ - Handle errors while rb_thread_select()ing in PGconn#block.
9
+ (Brian Weaver).
10
+ - Fixes for Win32 async queries (Rafał Bigaj)
11
+ - Memory leak fixed: Closing opened WSA event. (rafal)
12
+ - Fixes for #66 Win32 asynchronous queries hang on connection
13
+ error. (rafal)
14
+ - Fixed a typo in PGconn#error_message's documentation
15
+ - fixing unused variable warnings for ruby 1.9.3 (Aaron Patterson)
16
+ - Build system bugfixes
17
+ - Converted to Hoe
18
+
19
+
20
+ == v0.11.0 [2011-02-09] Michael Granger <ged@FaerieMUD.org>
21
+
22
+ Enhancements:
23
+
24
+ * Added a PGresult#values method to fetch all result rows as an Array of
25
+ Arrays. Thanks to Jason Yanowitz (JYanowitz at enovafinancial dot com) for
26
+ the patch.
27
+
28
+
29
+ == v0.10.1 [2011-01-19] Michael Granger <ged@FaerieMUD.org>
30
+
31
+ Bugfixes:
32
+
33
+ * Add an include guard for pg.h
34
+ * Simplify the common case require of the ext
35
+ * Include the extconf header
36
+ * Fix compatibility with versions of PostgreSQL without PQgetCancel. (fixes #36)
37
+ * Fix require for natively-compiled extension under Windows. (fixes #55)
38
+ * Change rb_yield_splat() to rb_yield_values() for compatibility with Rubinius. (fixes #54)
39
+
40
+
41
+ == v0.10.0 [2010-12-01] Michael Granger <ged@FaerieMUD.org>
42
+
43
+ Enhancements:
44
+
45
+ * Added support for the payload of NOTIFY events (w/Mahlon E. Smith)
46
+ * Updated the build system with Rubygems suggestions from RubyConf 2010
47
+
48
+ Bugfixes:
49
+
50
+ * Fixed issue with PGconn#wait_for_notify that caused it to miss notifications that happened after
51
+ the LISTEN but before the wait_for_notify.
52
+
53
+ == v0.9.0 [2010-02-28] Michael Granger <ged@FaerieMUD.org>
54
+
55
+ Bugfixes.
56
+
57
+ == v0.8.0 [2009-03-28] Jeff Davis <davis.jeffrey@gmail.com>
58
+
59
+ Bugfixes, better Windows support.
60
+
@@ -0,0 +1,39 @@
1
+ .gemtest
2
+ BSD
3
+ Contributors.rdoc
4
+ GPL
5
+ History.rdoc
6
+ LICENSE
7
+ Manifest.txt
8
+ README.OS_X.rdoc
9
+ README.ja.rdoc
10
+ README.rdoc
11
+ README.windows.rdoc
12
+ Rakefile
13
+ ext/compat.c
14
+ ext/compat.h
15
+ ext/extconf.rb
16
+ ext/pg.c
17
+ ext/pg.h
18
+ ext/vc/pg.sln
19
+ ext/vc/pg_18/pg.vcproj
20
+ ext/vc/pg_19/pg_19.vcproj
21
+ lib/pg.rb
22
+ misc/openssl-pg-segfault.rb
23
+ sample/async_api.rb
24
+ sample/copyfrom.rb
25
+ sample/copyto.rb
26
+ sample/losample.rb
27
+ sample/notify_wait.rb
28
+ sample/psql.rb
29
+ sample/psqlHelp.rb
30
+ sample/test1.rb
31
+ sample/test2.rb
32
+ sample/test4.rb
33
+ sample/test_binary_values.rb
34
+ spec/data/expected_trace.out
35
+ spec/data/random_binary_data
36
+ spec/lib/helpers.rb
37
+ spec/m17n_spec.rb
38
+ spec/pgconn_spec.rb
39
+ spec/pgresult_spec.rb
@@ -0,0 +1,68 @@
1
+ = Compiling on MacOS X
2
+
3
+ The EnterpriseDB packages are the recommended PostgreSQL installations to use
4
+ with MacOS X. They eliminate most or all of the issues with getting 'pg'
5
+ installed, linked correctly, and running.
6
+
7
+ == Segfaults and SSL Support
8
+
9
+ If you need a custom installation of PostgreSQL, you should ensure that you
10
+ either compile it against the same version of OpenSSL as the OpenSSL extension
11
+ of the Ruby you'll be using, or compile it without SSL support. If you fail to
12
+ do this, you will likely see segfaults when you use 'pg' and the 'openssl'
13
+ extension at the same time. You can see what library it's linked against using
14
+ 'otool -L'; for example, on my 10.7 machine I use for 'pg' development:
15
+
16
+ $ otool -L /System/Library/Frameworks/Ruby.framework/Versions\
17
+ /1.8/usr/lib/ruby/1.8/universal-darwin11.0/openssl.bundle
18
+
19
+ /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/\
20
+ lib/ruby/1.8/universal-darwin11.0/openssl.bundle:
21
+ /System/Library/Frameworks/Ruby.framework/Versions/1.8/\
22
+ usr/lib/libruby.1.dylib (compatibility version 1.8.0, \
23
+ current version 1.8.7)
24
+ /usr/lib/libssl.0.9.8.dylib (compatibility version 0.9.8, \
25
+ current version 0.9.8)
26
+ /usr/lib/libcrypto.0.9.8.dylib (compatibility version 0.9.8, \
27
+ current version 0.9.8)
28
+ /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, \
29
+ current version 159.0.0)
30
+
31
+
32
+ == Dealing with Installation Problems
33
+
34
+ If you are building/installing pg on MacOS X, and the installation doesn't
35
+ work at first, here are a few things you can try.
36
+
37
+ === pg_config
38
+
39
+ The first thing you should do is ensure that the 'pg_config' tool that comes
40
+ with Postgres is in your path. If it isn't, or the one that's first in your
41
+ path isn't the one that was installed with the Postgres you want to build
42
+ against, you can specify the path to it with the --with-pg-config option.
43
+
44
+ For example, if you're using the Ruby binary that comes with OSX, and
45
+ PostgreSQL 9.0.x installed from MacPorts, do:
46
+
47
+ gem install -- --with-pg-config=/opt/local/lib/postgresql90/bin/pg_config
48
+
49
+ === ARCHFLAGS and Universal Binaries
50
+
51
+ OS X supports both architecture-specific binaries (e.g. i386), as well as
52
+ universal binaries (i.e. i386 & ppc). If Ruby is built as a universal binary
53
+ and PostgreSQL is not, you need to specify the path to the appropriate
54
+ pg_config binary or set the environment variable ARCHFLAGS appropriately.
55
+
56
+ Alternatively, if the build system can't figure out which architectures it
57
+ should include, you may need to set the 'ARCHFLAGS' environment variable
58
+ explicitly:
59
+
60
+ sudo env ARCHFLAGS='-arch x86_64' gem install pg
61
+
62
+ or, if you're building from source:
63
+
64
+ rake compile ARCHFLAGS="-arch x86_64"
65
+
66
+ Note that the recommended EnterpriseDB packages are correctly compiled as
67
+ universal binaries, and don't need any of these workarounds.
68
+
@@ -0,0 +1,7 @@
1
+ = pg
2
+
3
+ * https://bitbucket.org/ged/ruby-pg
4
+
5
+ This file needs translation. Anyone who is willing to volunteer, please
6
+ mail <ged@FaerieMUD.org>.
7
+
@@ -1,54 +1,69 @@
1
- = ruby-pg: Ruby interface to PostgreSQL RDBMS
1
+ = pg
2
+
3
+ * https://bitbucket.org/ged/ruby-pg
4
+
5
+ == Description
6
+
7
+ Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/].
8
+
9
+ It works with PostgreSQL 8.2 and later.
2
10
 
3
- This is the extension library to access a PostgreSQL database from Ruby. This
4
- library works with PostgreSQL 7.4 and later.
5
11
 
6
12
  == Requirements
7
13
 
8
- * Ruby 1.8.7-p174 or later.
9
- * PostgreSQL 7.4 or later installed.
14
+ * Ruby 1.8.7-p249 or later.
15
+ * PostgreSQL 8.2.x or later installed.
10
16
 
11
17
  It may work with earlier versions as well, but those are not regularly tested.
12
18
 
19
+
13
20
  == How To Install
14
21
 
15
22
  Install via RubyGems:
16
23
 
17
- gem install pg
18
-
19
- Or install from source:
20
-
21
- rake install
24
+ gem install pg
22
25
 
23
26
  You may need to specify the path to the 'pg_config' program installed with
24
27
  Postgres:
25
28
 
26
- rake -- --with-pg-config=<path to pg_config>
29
+ gem install pg -- --with-pg-config=<path to pg_config>
30
+
31
+ See README.OS_X.rdoc for more information about installing under MacOS X, and
32
+ README.windows.rdoc for Windows build/installation instructions.
33
+
27
34
 
28
- For example, on a Mac with PostgreSQL installed via MacPorts
29
- (<tt>port install postgresql84</tt>):
35
+ == Contributing
30
36
 
31
- rake install -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
37
+ To report bugs, suggest features, or check out the source with Mercurial,
38
+ {check out the project page}[http://bitbucket.org/ged/ruby-pg]. If you prefer
39
+ Git, there's also a {Github mirror}[https://github.com/ged/ruby-pg].
40
+
41
+ After checking out the source, run:
42
+
43
+ $ rake newb
44
+
45
+ This task will install any missing dependencies, run the tests/specs, and
46
+ generate the API documentation.
32
47
 
33
- See README.OS_X for more information about installing under MacOS X, and
34
- README.windows for Windows build/installation instructions.
35
48
 
36
49
  == Copying
37
50
 
38
51
  This library is copyrighted by the authors.
39
52
 
40
53
  Authors:
54
+
41
55
  * Yukihiro Matsumoto <matz@ruby-lang.org> - Author of Ruby.
42
56
  * Eiji Matsumoto <usagi@ruby.club.or.jp> - One of users who loves Ruby.
43
57
  * Jeff Davis <ruby-pg@j-davis.com>
44
58
 
45
59
  Thanks to:
60
+
46
61
  * Noboru Saitou <noborus@netlab.jp> - Past maintainer.
47
62
  * Dave Lee - Past maintainer.
48
63
  * Guy Decoux (ts) <decoux@moulon.inra.fr>
49
64
 
50
65
  Maintainers:
51
- * Jeff Davis <ruby-pg@j-davis.com>
66
+
52
67
  * Michael Granger <ged@FaerieMUD.org>
53
68
 
54
69
  You may redistribute this software under the terms of the Ruby license,
@@ -60,9 +75,9 @@ under the terms of the BSD license, included in the file "BSD".
60
75
 
61
76
  Portions copyright LAIKA, Inc.
62
77
 
78
+
63
79
  == Acknowledgments
64
80
 
65
81
  We are thankful to the people at the ruby-list and ruby-dev mailing lists.
66
82
  And to the people who developed PostgreSQL.
67
83
 
68
-
@@ -1,5 +1,4 @@
1
-
2
- = Compiling on MS Windows
1
+ = Compiling 'pg' on MS Windows
3
2
 
4
3
  In order to build this extension on MS Windows you will need a couple things.
5
4
 
@@ -24,7 +23,7 @@ In order to build ruby-pg, just run 'rake'. If the pg_config.exe executable
24
23
  is not in your PATH, you'll need to explicitly point ruby-pg to where your
25
24
  PostgreSQL headers and libraries are with something like this:
26
25
 
27
- rake --with-pg-dir=c:/progra~1/postgr~1/8.3
26
+ rake --with-pg-dir=c:/progra~1/postgr~1/8.3
28
27
 
29
28
  Adjust your path accordingly. BE SURE TO USE THE SHORT PATH NAMES! If you
30
29
  try to use a path with spaces in it, the nmake.exe program will choke.
@@ -32,44 +31,39 @@ try to use a path with spaces in it, the nmake.exe program will choke.
32
31
 
33
32
  == Cross compiling for mswin32
34
33
 
35
- Using rake-compiler a cross compiled pg-gem can be build on a linux host for
36
- the win32 platform. The generated gem is statically linked against libpq and
37
- libssl. OpenSSL and PostgreSQL are downloaded and compiled from the sources.
38
- There are no runtime dependencies to any but the standard Windows DLLs.
39
-
40
- Install mingw32. On a debian based system this should work:
41
-
42
- apt-get install mingw32
43
-
44
- On MacOS X, if you have MacPorts installed:
34
+ Using rake-compiler a cross compiled pg gem can be build on a Linux or MacOS X
35
+ host for the win32 platform. The generated gem is statically linked against
36
+ libpq and libssl. OpenSSL and PostgreSQL are downloaded and compiled from the
37
+ sources. There are no runtime dependencies to any but the standard Windows
38
+ DLLs.
45
39
 
46
- port install i386-mingw32-gcc
40
+ Install mingw32 using the instructions rake-compiler's README.
47
41
 
48
42
  Install the rake-compiler:
49
43
 
50
- gem install rake-compiler
44
+ gem install rake-compiler
51
45
 
52
46
  Download and cross compile ruby 1.8 and 1.9 for win32:
53
47
 
54
- rake-compiler cross-ruby VERSION=1.8.7-p334
55
- rake-compiler cross-ruby VERSION=1.9.2-p180
48
+ rake-compiler cross-ruby VERSION=1.8.7-p334
49
+ rake-compiler cross-ruby VERSION=1.9.2-p180
56
50
 
57
51
  Download and cross compile pg for win32:
58
52
 
59
- rake cross native gem
53
+ rake cross native gem
54
+
60
55
  or with custom versions:
61
- rake cross native gem RUBY_CC_VERSION=1.8.7:1.9.2 OPENSSL_VERSION=1.0.0d POSTGRESQL_VERSION=9.0.3
56
+
57
+ rake cross native gem RUBY_CC_VERSION=1.8.7:1.9.2 \
58
+ OPENSSL_VERSION=1.0.0d POSTGRESQL_VERSION=9.0.3
62
59
 
63
60
  If everything works, there should be pg-VERSION-x86-mswin32.gem in the pkg
64
61
  directory.
65
62
 
66
63
 
67
- If you have any problems you can submit them via the project's issue-tracker:
68
-
69
- http://bitbucket.org/ged/ruby-pg/issues/new/
70
-
71
- Or you can join the mailing list:
64
+ == Reporting Problems
72
65
 
73
- ruby-pg-general@rubyforge.org
66
+ If you have any problems you can submit them via
67
+ [the project's issue-tracker][bitbucket]. And submit questions, problems, or
68
+ solutions, so that it can be improved.
74
69
 
75
- And submit questions, problems, or solutions, so that it can be improved.
data/Rakefile CHANGED
@@ -1,364 +1,138 @@
1
- #!rake -*- ruby -*-
2
- #
3
- # pg rakefile
4
- #
5
- # Based on various other Rakefiles, especially one by Ben Bleything
6
- #
7
- # Copyright (c) 2007-2010 The FaerieMUD Consortium
8
- #
9
- # Authors:
10
- # * Michael Granger <ged@FaerieMUD.org>
11
- #
12
-
13
- BEGIN {
14
- require 'rbconfig'
15
- require 'pathname'
16
- basedir = Pathname.new( __FILE__ ).dirname
17
-
18
- libdir = basedir + "lib"
19
- extdir = libdir + Config::CONFIG['sitearch']
20
-
21
- $LOAD_PATH.unshift( basedir.to_s ) unless $LOAD_PATH.include?( basedir.to_s )
22
- $LOAD_PATH.unshift( libdir.to_s ) unless $LOAD_PATH.include?( libdir.to_s )
23
- $LOAD_PATH.unshift( extdir.to_s ) unless $LOAD_PATH.include?( extdir.to_s )
24
- }
1
+ #!/usr/bin/env rake
2
+
3
+ require 'rbconfig'
4
+ require 'pathname'
5
+ require 'tmpdir'
25
6
 
26
7
  begin
27
- require 'readline'
28
- include Readline
8
+ require 'rake/extensiontask'
29
9
  rescue LoadError
30
- # Fall back to a plain prompt
31
- def readline( text )
32
- $stderr.print( text.chomp )
33
- return $stdin.gets
34
- end
10
+ abort "This Rakefile requires rake-compiler (gem install rake-compiler)"
35
11
  end
36
12
 
37
13
  begin
38
- require 'rubygems'
14
+ require 'hoe'
39
15
  rescue LoadError
40
- module Gem
41
- class Specification; end
42
- end
16
+ abort "This Rakefile requires hoe (gem install hoe)"
43
17
  end
44
18
 
45
- require 'rbconfig'
46
- require 'rake'
47
- require 'rake/testtask'
48
- require 'rake/packagetask'
49
19
  require 'rake/clean'
50
- # require 'rake/191_compat.rb'
51
-
52
- $dryrun = false
53
-
54
- ### Config constants
55
- BASEDIR = Pathname.new( __FILE__ ).dirname.relative_path_from( Pathname.getwd )
56
- BINDIR = BASEDIR + 'bin'
57
- LIBDIR = BASEDIR + 'lib'
58
- EXTDIR = BASEDIR + 'ext'
59
- DOCSDIR = BASEDIR + 'docs'
60
- PKGDIR = BASEDIR + 'pkg'
61
- DATADIR = BASEDIR + 'data'
62
-
63
- MANUALDIR = DOCSDIR + 'manual'
64
-
65
- PROJECT_NAME = 'pg'
66
- PKG_NAME = PROJECT_NAME.downcase
67
- PKG_SUMMARY = 'A Ruby interface to the PostgreSQL RDBMS'
68
-
69
- # Cruisecontrol stuff
70
- CC_BUILD_LABEL = ENV['CC_BUILD_LABEL']
71
- CC_BUILD_ARTIFACTS = ENV['CC_BUILD_ARTIFACTS'] || 'artifacts'
72
-
73
- VERSION_FILE = LIBDIR + '../ext/pg.c'
74
- if VERSION_FILE.exist? && buildrev = ENV['CC_BUILD_LABEL']
75
- PKG_VERSION = VERSION_FILE.read[ /VERSION\s*=\s*['"](\d+\.\d+\.\d+)['"]/, 1 ] + '.' + buildrev
76
- elsif VERSION_FILE.exist?
77
- PKG_VERSION = VERSION_FILE.read[ /VERSION\s*=\s*['"](\d+\.\d+\.\d+)['"]/, 1 ]
78
- end
79
20
 
80
- PKG_VERSION = '0.0.0' unless defined?( PKG_VERSION ) && !PKG_VERSION.nil?
81
-
82
- PKG_FILE_NAME = "#{PKG_NAME.downcase}-#{PKG_VERSION}"
83
- GEM_FILE_NAME = "#{PKG_FILE_NAME}.gem"
84
-
85
- # Universal VCS constants
86
- DEFAULT_EDITOR = 'vi'
87
- COMMIT_MSG_FILE = 'commit-msg.txt'
88
- FILE_INDENT = " " * 12
89
- LOG_INDENT = " " * 3
90
-
91
- EXTCONF = EXTDIR + 'extconf.rb'
92
-
93
- ARTIFACTS_DIR = Pathname.new( CC_BUILD_ARTIFACTS )
94
-
95
- TEXT_FILES = Rake::FileList.new( %w[Rakefile ChangeLog README* LICENSE] )
96
- BIN_FILES = Rake::FileList.new( "#{BINDIR}/*" )
97
- LIB_FILES = Rake::FileList.new( "#{LIBDIR}/**/*.rb" )
98
- EXT_FILES = Rake::FileList.new( "#{EXTDIR}/**/*.{c,h,rb}" )
99
- DATA_FILES = Rake::FileList.new( "#{DATADIR}/**/*" )
100
-
101
- SPECDIR = BASEDIR + 'spec'
102
- SPECLIBDIR = SPECDIR + 'lib'
103
- SPEC_FILES = Rake::FileList.new( "#{SPECDIR}/**/*_spec.rb", "#{SPECLIBDIR}/**/*.rb" )
104
-
105
- TESTDIR = BASEDIR + 'tests'
106
- TEST_FILES = Rake::FileList.new( "#{TESTDIR}/**/*.tests.rb" )
107
-
108
- RAKE_TASKDIR = BASEDIR + 'rake'
109
- RAKE_TASKLIBS = Rake::FileList.new( "#{RAKE_TASKDIR}/*.rb" )
110
- PKG_TASKLIBS = Rake::FileList.new( "#{RAKE_TASKDIR}/{191_compat,helpers,packaging,rdoc,testing}.rb" )
111
- PKG_TASKLIBS.include( "#{RAKE_TASKDIR}/manual.rb" ) if MANUALDIR.exist?
112
-
113
- RAKE_TASKLIBS_URL = 'http://repo.deveiate.org/rake-tasklibs'
114
-
115
- LOCAL_RAKEFILE = BASEDIR + 'Rakefile.local'
116
-
117
- EXTRA_PKGFILES = Rake::FileList.new
118
- EXTRA_PKGFILES.include( "#{BASEDIR}/README.*" )
119
- EXTRA_PKGFILES.include( "#{BASEDIR}/GPL" )
120
- EXTRA_PKGFILES.include( "#{BASEDIR}/BSD" )
121
- EXTRA_PKGFILES.include( "#{BASEDIR}/Contributors" )
122
-
123
- RELEASE_FILES = TEXT_FILES +
124
- SPEC_FILES +
125
- TEST_FILES +
126
- BIN_FILES +
127
- LIB_FILES +
128
- EXT_FILES +
129
- DATA_FILES +
130
- RAKE_TASKLIBS +
131
- EXTRA_PKGFILES
132
-
133
-
134
- RELEASE_FILES << LOCAL_RAKEFILE.to_s if LOCAL_RAKEFILE.exist?
135
-
136
- RELEASE_ANNOUNCE_ADDRESSES = [
137
- "Ruby-Talk List <ruby-talk@ruby-lang.org>",
138
- ]
139
-
140
- COVERAGE_MINIMUM = ENV['COVERAGE_MINIMUM'] ? Float( ENV['COVERAGE_MINIMUM'] ) : 85.0
141
- RCOV_EXCLUDES = 'spec,tests,/Library/Ruby,/var/lib,/usr/local/lib'
142
- RCOV_OPTS = [
143
- '--exclude', RCOV_EXCLUDES,
144
- '--xrefs',
145
- '--save',
146
- '--callsites',
147
- #'--aggregate', 'coverage.data' # <- doesn't work as of 0.8.1.2.0
148
- ]
149
-
150
-
151
- ### Load some task libraries that need to be loaded early
152
- if !RAKE_TASKDIR.exist?
153
- $stderr.puts "It seems you don't have the build task directory. Shall I fetch it "
154
- ans = readline( "for you? [y]" )
155
- ans = 'y' if !ans.nil? && ans.empty?
156
-
157
- if ans =~ /^y/i
158
- $stderr.puts "Okay, fetching #{RAKE_TASKLIBS_URL} into #{RAKE_TASKDIR}..."
159
- system 'hg', 'clone', RAKE_TASKLIBS_URL, "./#{RAKE_TASKDIR}"
160
- if ! $?.success?
161
- fail "Damn. That didn't work. Giving up; maybe try manually fetching?"
162
- end
163
- else
164
- $stderr.puts "Then I'm afraid I can't continue. Best of luck."
165
- fail "Rake tasklibs not present."
166
- end
21
+ # Build directory constants
22
+ BASEDIR = Pathname( __FILE__ ).dirname
23
+ SPECDIR = BASEDIR + 'spec'
24
+ LIBDIR = BASEDIR + 'lib'
25
+ EXTDIR = BASEDIR + 'ext'
26
+ PKGDIR = BASEDIR + 'pkg'
27
+ TMPDIR = BASEDIR + 'tmp'
167
28
 
168
- RAKE_TASKLIBS.include( "#{RAKE_TASKDIR}/*.rb" )
169
- end
29
+ DLEXT = Config::CONFIG['DLEXT']
30
+ EXT = LIBDIR + "pg_ext.#{DLEXT}"
170
31
 
171
- require RAKE_TASKDIR + 'helpers.rb'
172
- include RakefileHelpers
32
+ TESTING_TMPDIRS = Rake::FileList[ "#{Dir.tmpdir}/tmp_test_*" ]
173
33
 
174
- # Set the build ID if the mercurial executable is available
175
- if hg = which( 'hg' )
176
- id = `#{hg} id -n`.chomp
177
- PKG_BUILD = (id.chomp[ /^[[:xdigit:]]+/ ] || '1')
178
- else
179
- PKG_BUILD = '0'
180
- end
181
- SNAPSHOT_PKG_NAME = "#{PKG_FILE_NAME}.#{PKG_BUILD}"
182
- SNAPSHOT_GEM_NAME = "#{SNAPSHOT_PKG_NAME}.gem"
183
-
184
- # Documentation constants
185
- API_DOCSDIR = DOCSDIR + 'api'
186
- README_FILE = TEXT_FILES.find {|path| path =~ /^README/ } || 'README'
187
- RDOC_OPTIONS = [
188
- '--tab-width=4',
189
- '--show-hash',
190
- '--include', BASEDIR.to_s,
191
- "--main=#{README_FILE}",
192
- "--title=#{PKG_NAME}",
193
- ]
194
- YARD_OPTIONS = [
195
- '--use-cache',
196
- '--protected',
197
- '-r', README_FILE,
198
- '--exclude', 'extconf\\.rb',
199
- '--files', 'ChangeLog,LICENSE',
200
- '--output-dir', API_DOCSDIR.to_s,
201
- '--title', "#{PKG_NAME} #{PKG_VERSION}",
202
- ]
203
-
204
- # Release constants
205
- SMTP_HOST = "mail.faeriemud.org"
206
- SMTP_PORT = 465 # SMTP + SSL
207
-
208
- # Project constants
209
- PROJECT_HOST = 'deveiate.org'
210
- PROJECT_PUBDIR = '/usr/local/www/public/code/'
211
- PROJECT_DOCDIR = "#{PROJECT_PUBDIR}/#{PKG_NAME}"
212
- PROJECT_SCPPUBURL = "#{PROJECT_HOST}:#{PROJECT_PUBDIR}"
213
- PROJECT_SCPDOCURL = "#{PROJECT_HOST}:#{PROJECT_DOCDIR}"
214
-
215
- GEM_PUBHOST = 'rubygems.org'
216
-
217
- # Gem dependencies: gemname => version
218
- DEPENDENCIES = {
219
- }
220
-
221
- # Developer Gem dependencies: gemname => version
222
- DEVELOPMENT_DEPENDENCIES = {
223
- 'rake' => '~> 0.8.7',
224
- 'rcodetools' => '~> 0.7.0.0',
225
- 'rcov' => '~> 0.8.1.2.0',
226
- 'yard' => '~> 0.6.1',
227
- 'RedCloth' => '~> 4.2.3',
228
- 'rspec' => '~> 2.0.1',
229
- 'ruby-termios' => '~> 0.9.6',
230
- 'text-format' => '~> 1.0.0',
231
- 'tmail' => '~> 1.2.3.1',
232
- 'rake-compiler' => '~>0.7.0',
233
- }
234
-
235
- # Non-gem requirements: packagename => version
236
- REQUIREMENTS = {
237
- 'PostgreSQL' => '>=7.4',
238
- }
239
-
240
- # RubyGem specification
241
- GEMSPEC = Gem::Specification.new do |gem|
242
- gem.name = PKG_NAME.downcase
243
- gem.version = PKG_VERSION
244
-
245
- gem.summary = PKG_SUMMARY
246
- gem.description = [
247
- "This is the extension library to access a PostgreSQL database from Ruby.",
248
- "This library works with PostgreSQL 7.4 and later.",
249
- ].join( "\n" )
250
-
251
- gem.authors = ["Jeff Davis", "Michael Granger"]
252
- gem.email = ["ruby-pg@j-davis.com", "ged@FaerieMUD.org"]
253
- gem.homepage = 'http://bitbucket.org/ged/ruby-pg/'
254
- gem.licenses = ["Ruby", "GPL", "BSD"]
255
-
256
- gem.has_rdoc = true
257
- gem.rdoc_options = RDOC_OPTIONS
258
- gem.extra_rdoc_files = TEXT_FILES - [ 'Rakefile' ]
259
-
260
- gem.bindir = BINDIR.relative_path_from(BASEDIR).to_s
261
- gem.executables = BIN_FILES.select {|pn| File.executable?(pn) }.
262
- collect {|pn| File.basename(pn) }
263
- gem.require_paths << EXTDIR.relative_path_from( BASEDIR ).to_s if EXTDIR.exist?
264
-
265
- if EXTCONF.exist?
266
- gem.extensions << EXTCONF.relative_path_from( BASEDIR ).to_s
267
- end
34
+ CLOBBER.include( *TESTING_TMPDIRS )
35
+ CLEAN.include( PKGDIR.to_s, TMPDIR.to_s )
268
36
 
269
- gem.files = RELEASE_FILES
270
- gem.test_files = SPEC_FILES
37
+ # Set up Hoe plugins
38
+ Hoe.plugin :mercurial
39
+ Hoe.plugin :signing
271
40
 
272
- # signing key and certificate chain
273
- gem.signing_key = '/Volumes/Keys/ged-private_gem_key.pem'
274
- gem.cert_chain = [File.expand_path('~/.gem/ged-public_gem_cert.pem')]
41
+ Hoe.plugins.delete :rubyforge
42
+ Hoe.plugins.delete :compiler
275
43
 
276
44
 
277
- gem.required_ruby_version = '>=1.8.7'
45
+ # Hoe specification
46
+ $hoespec = Hoe.spec 'pg' do
47
+ self.readme_file = 'README.rdoc'
48
+ self.history_file = 'History.rdoc'
49
+ self.extra_rdoc_files = Rake::FileList[ '*.rdoc' ]
50
+ self.extra_rdoc_files.include( 'BSD', 'GPL', 'LICENSE' )
51
+ self.extra_rdoc_files.include( 'ext/*.c' )
278
52
 
279
- DEPENDENCIES.each do |name, version|
280
- version = '>= 0' if version.length.zero?
281
- gem.add_runtime_dependency( name, version )
282
- end
53
+ self.developer 'Jeff Davis', 'ruby-pg@j-davis.com'
54
+ self.developer 'Michael Granger', 'ged@FaerieMUD.org'
283
55
 
284
- REQUIREMENTS.each do |name, version|
285
- gem.requirements << [ name, version ].compact.join(' ')
286
- end
287
- end
56
+ self.dependency 'rake-compiler', '~> 0.7'
57
+ self.dependency 'rspec', '~> 2.6', :developer
288
58
 
289
- $trace = Rake.application.options.trace ? true : false
290
- $dryrun = Rake.application.options.dryrun ? true : false
291
- $include_dev_dependencies = false
59
+ self.spec_extras[:licenses] = ['BSD', 'Ruby', 'GPL']
60
+ self.spec_extras[:extensions] = [ 'ext/extconf.rb' ]
292
61
 
293
- # Load any remaining task libraries
294
- RAKE_TASKLIBS.each do |tasklib|
295
- next if tasklib.to_s =~ %r{/helpers\.rb$}
296
- begin
297
- trace " loading tasklib %s" % [ tasklib ]
298
- import tasklib
299
- rescue ScriptError => err
300
- fail "Task library '%s' failed to load: %s: %s" %
301
- [ tasklib, err.class.name, err.message ]
302
- trace "Backtrace: \n " + err.backtrace.join( "\n " )
303
- rescue => err
304
- log "Task library '%s' failed to load: %s: %s. Some tasks may not be available." %
305
- [ tasklib, err.class.name, err.message ]
306
- trace "Backtrace: \n " + err.backtrace.join( "\n " )
307
- end
308
- end
62
+ self.require_ruby_version( '>= 1.8.7' )
309
63
 
310
- # Load any project-specific rules defined in 'Rakefile.local' if it exists
311
- import LOCAL_RAKEFILE if LOCAL_RAKEFILE.exist?
64
+ self.hg_sign_tags = true if self.respond_to?( :hg_sign_tags= )
65
+ self.check_history_on_release = true if self.respond_to?( :check_history_on_release= )
312
66
 
67
+ self.rdoc_locations << "deveiate:/usr/local/www/public/code/#{remote_rdoc_dir}"
68
+ end
313
69
 
314
- #####################################################################
315
- ### T A S K S
316
- #####################################################################
70
+ ENV['VERSION'] ||= $hoespec.spec.version.to_s
317
71
 
318
- ### Default task
319
- task :default => [:clean, :local, :spec, :apidocs, :package]
72
+ # Tests should pass before checking in
73
+ task 'hg:precheckin' => [ :check_history, :check_manifest, :spec ]
320
74
 
321
- ### Task the local Rakefile can append to -- no-op by default
322
- task :local
75
+ # Support for 'rvm specs'
76
+ task :specs => :spec
323
77
 
324
- ### Task: clean
325
- CLEAN.include 'coverage', '**/*.orig', '**/*.rej'
326
- CLOBBER.include 'artifacts', 'coverage.info', 'ChangeLog', PKGDIR
78
+ # Compile before testing
79
+ task :spec => :compile
327
80
 
328
- ### Task: changelog
329
- file 'ChangeLog' do |task|
330
- log "Updating #{task.name}"
81
+ # gem-testers support
82
+ task :test do
83
+ # rake-compiler always wants to copy the compiled extension into lib/, but
84
+ # we don't want testers to have to re-compile, especially since that
85
+ # often fails because they can't (and shouldn't have to) write to tmp/ in
86
+ # the installed gem dir. So we clear the task rake-compiler set up
87
+ # to break the dependency between :spec and :compile when running under
88
+ # rubygems-test, and then run :spec.
89
+ Rake::Task[ EXT.to_s ].clear
90
+ Rake::Task[ :spec ].execute
91
+ end
331
92
 
332
- changelog = make_changelog()
333
- File.open( task.name, 'w' ) do |fh|
334
- fh.print( changelog )
335
- end
93
+ desc "Turn on warnings and debugging in the build."
94
+ task :maint do
95
+ ENV['MAINTAINER_MODE'] = 'yes'
336
96
  end
337
97
 
98
+ ENV['RUBY_CC_VERSION'] = '1.8.7:1.9.2'
99
+
100
+ # Rake-compiler task
101
+ Rake::ExtensionTask.new do |ext|
102
+ ext.name = 'pg_ext'
103
+ ext.gem_spec = $hoespec.spec
104
+ ext.ext_dir = 'ext'
105
+ ext.lib_dir = 'lib'
106
+ ext.source_pattern = "*.{c,h}"
107
+ ext.cross_compile = true
108
+ ext.cross_platform = %w[i386-mswin32 i386-mingw32]
109
+ end
338
110
 
339
- ### Task: cruise (Cruisecontrol task)
340
- desc "Cruisecontrol build"
341
- task :cruise => [:clean, 'spec:quiet', :package] do |task|
342
- raise "Artifacts dir not set." if ARTIFACTS_DIR.to_s.empty?
343
- artifact_dir = ARTIFACTS_DIR.cleanpath + (CC_BUILD_LABEL || Time.now.strftime('%Y%m%d-%T'))
344
- artifact_dir.mkpath
345
111
 
346
- coverage = BASEDIR + 'coverage'
347
- if coverage.exist? && coverage.directory?
348
- $stderr.puts "Copying coverage stats..."
349
- FileUtils.cp_r( 'coverage', artifact_dir )
112
+ # Make the ChangeLog update if the repo has changed since it was last built
113
+ file '.hg/branch' do
114
+ abort "You need the Mercurial repo to make packages"
115
+ end
116
+ file 'ChangeLog' => '.hg/branch' do |task|
117
+ $stderr.puts "Updating the changelog..."
118
+ begin
119
+ content = make_changelog()
120
+ rescue NameError
121
+ abort "Packaging tasks require the hoe-mercurial plugin (gem install hoe-mercurial)"
122
+ end
123
+ File.open( task.name, 'w', 0644 ) do |fh|
124
+ fh.print( content )
350
125
  end
351
-
352
- $stderr.puts "Copying packages..."
353
- FileUtils.cp_r( FileList['pkg/*'].to_a, artifact_dir )
354
126
  end
355
127
 
128
+ # Rebuild the ChangeLog immediately before release
129
+ task :prerelease => 'ChangeLog'
130
+
356
131
 
357
- desc "Update the build system to the latest version"
358
- task :update_build do
359
- log "Updating the build system"
360
- run 'hg', '-R', RAKE_TASKDIR, 'pull', '-u'
361
- log "Updating the Rakefile"
362
- sh 'rake', '-f', RAKE_TASKDIR + 'Metarakefile'
132
+ desc "Stop any Postmaster instances that remain after testing."
133
+ task :cleanup_testing_dbs do
134
+ require 'spec/lib/helpers'
135
+ PgTestingHelpers.stop_existing_postmasters()
136
+ Rake::Task[:clean].invoke
363
137
  end
364
138