pg 0.15.0-x86-mingw32 → 0.15.1-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/ChangeLog +46 -1
- data/History.rdoc +7 -0
- data/README.rdoc +9 -6
- data/ext/pg_connection.c +0 -17
- data/ext/pg_result.c +23 -23
- data/lib/1.8/pg_ext.so +0 -0
- data/lib/1.9/pg_ext.so +0 -0
- data/lib/2.0/pg_ext.so +0 -0
- data/lib/pg.rb +1 -1
- data/lib/pg/connection.rb +17 -2
- data/lib/pg/exceptions.rb +2 -2
- data/sample/async_api.rb +2 -2
- data/sample/async_mixed.rb +2 -2
- data/sample/cursor.rb +1 -1
- data/sample/disk_usage_report.rb +1 -1
- data/sample/wal_shipper.rb +1 -1
- data/sample/warehouse_partitions.rb +1 -1
- data/spec/lib/helpers.rb +1 -2
- data/spec/pg/connection_spec.rb +10 -0
- metadata +5 -5
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
Binary file
|
data/ChangeLog
CHANGED
@@ -1,8 +1,53 @@
|
|
1
|
+
2013-04-08 Michael Granger <ged@FaerieMUD.org>
|
2
|
+
|
3
|
+
* History.rdoc:
|
4
|
+
Fix date in History
|
5
|
+
[de1cdb0f7ba6] [tip]
|
6
|
+
|
7
|
+
* .hgtags:
|
8
|
+
Added tag v0.15.1 for changeset 4692c20bcbde
|
9
|
+
[765d242ccf70]
|
10
|
+
|
11
|
+
* .hgsigs:
|
12
|
+
Added signature for changeset 0bfb6ff650be
|
13
|
+
[4692c20bcbde] [v0.15.1]
|
14
|
+
|
15
|
+
* lib/pg.rb:
|
16
|
+
Bump the patch version
|
17
|
+
[0bfb6ff650be]
|
18
|
+
|
19
|
+
* Merge with v0.15-stable
|
20
|
+
[650a853efd0d]
|
21
|
+
|
22
|
+
* ext/pg_connection.c, lib/pg/connection.rb:
|
23
|
+
Update PG::Connection documentation
|
24
|
+
[4514df7221a8]
|
25
|
+
|
26
|
+
2013-04-05 Lars Kanis <kanis@comcard.de>
|
27
|
+
|
28
|
+
* History.rdoc:
|
29
|
+
Update History.rdoc.
|
30
|
+
[1d0173b7a077] <v0.15-stable>
|
31
|
+
|
32
|
+
* lib/pg/connection.rb, spec/pg/connection_spec.rb:
|
33
|
+
Send a shortened $0 as application_name to the server in order to
|
34
|
+
avoid warnings about truncated identifier.
|
35
|
+
|
36
|
+
Thanks to Svoop for this report.
|
37
|
+
[9a6791fe9409]
|
38
|
+
|
39
|
+
* lib/pg/connection.rb, spec/pg/connection_spec.rb:
|
40
|
+
Send a shortened $0 as application_name to the server in order to
|
41
|
+
avoid warnings about truncated identifier.
|
42
|
+
|
43
|
+
Thanks to Svoop for this report.
|
44
|
+
[134e067259ee] <v0.15-stable>
|
45
|
+
|
1
46
|
2013-03-26 Michael Granger <ged@FaerieMUD.org>
|
2
47
|
|
3
48
|
* README.rdoc:
|
4
49
|
Update README, add Lars as maintainer
|
5
|
-
[5060601d2e64]
|
50
|
+
[5060601d2e64]
|
6
51
|
|
7
52
|
* ext/pg_result.c, lib/pg/exceptions.rb, sample/async_api.rb,
|
8
53
|
sample/async_mixed.rb, sample/cursor.rb,
|
data/History.rdoc
CHANGED
data/README.rdoc
CHANGED
@@ -9,7 +9,7 @@ docs :: http://deveiate.org/code/pg
|
|
9
9
|
|
10
10
|
Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/].
|
11
11
|
|
12
|
-
It works with {PostgreSQL 8.
|
12
|
+
It works with {PostgreSQL 8.4 and later}[http://www.postgresql.org/support/versioning/].
|
13
13
|
|
14
14
|
A small example usage:
|
15
15
|
|
@@ -34,10 +34,11 @@ A small example usage:
|
|
34
34
|
|
35
35
|
== Requirements
|
36
36
|
|
37
|
-
* Ruby 1.
|
38
|
-
* PostgreSQL 8.
|
37
|
+
* Ruby 1.9.3-p392, or 2.0.0-p0.
|
38
|
+
* PostgreSQL 8.4.x or later (with headers, -dev packages, etc).
|
39
39
|
|
40
|
-
It may work with earlier versions of Ruby as well, but those are
|
40
|
+
It may work with earlier versions of Ruby/PostgreSQL as well, but those are
|
41
|
+
not regularly tested.
|
41
42
|
|
42
43
|
|
43
44
|
== How To Install
|
@@ -76,16 +77,18 @@ After checking out the source, run:
|
|
76
77
|
This task will install any missing dependencies, run the tests/specs, and
|
77
78
|
generate the API documentation.
|
78
79
|
|
79
|
-
The current
|
80
|
+
The current maintainers are Michael Granger <ged@FaerieMUD.org> and
|
81
|
+
Lars Kanis <lars@greiz-reinsdorf.de>.
|
80
82
|
|
81
83
|
|
82
84
|
== Copying
|
83
85
|
|
84
|
-
Copyright (c) 1997-
|
86
|
+
Copyright (c) 1997-2013 by the authors.
|
85
87
|
|
86
88
|
* Jeff Davis <ruby-pg@j-davis.com>
|
87
89
|
* Guy Decoux (ts) <decoux@moulon.inra.fr>
|
88
90
|
* Michael Granger <ged@FaerieMUD.org>
|
91
|
+
* Lars Kanis <lars@greiz-reinsdorf.de>
|
89
92
|
* Dave Lee
|
90
93
|
* Eiji Matsumoto <usagi@ruby.club.or.jp>
|
91
94
|
* Yukihiro Matsumoto <matz@ruby-lang.org>
|
data/ext/pg_connection.c
CHANGED
@@ -7,23 +7,6 @@
|
|
7
7
|
#include "pg.h"
|
8
8
|
|
9
9
|
|
10
|
-
/********************************************************************
|
11
|
-
*
|
12
|
-
* Document-class: PG::Connection
|
13
|
-
*
|
14
|
-
* The class to access PostgreSQL RDBMS, based on the libpq interface,
|
15
|
-
* provides convenient OO methods to interact with PostgreSQL.
|
16
|
-
*
|
17
|
-
* For example, to send query to the database on the localhost:
|
18
|
-
* require 'pg'
|
19
|
-
* conn = PG::Connection.open(:dbname => 'test')
|
20
|
-
* res = conn.exec('SELECT $1 AS a, $2 AS b, $3 AS c',[1, 2, nil])
|
21
|
-
* # Equivalent to:
|
22
|
-
* # res = conn.exec('SELECT 1 AS a, 2 AS b, NULL AS c')
|
23
|
-
*
|
24
|
-
* See the PG::Result class for information on working with the results of a query.
|
25
|
-
*
|
26
|
-
*/
|
27
10
|
VALUE rb_cPGconn;
|
28
11
|
|
29
12
|
static PQnoticeReceiver default_notice_receiver = NULL;
|
data/ext/pg_result.c
CHANGED
@@ -147,10 +147,10 @@ pgresult_get(VALUE self)
|
|
147
147
|
|
148
148
|
|
149
149
|
/********************************************************************
|
150
|
-
*
|
150
|
+
*
|
151
151
|
* Document-class: PG::Result
|
152
152
|
*
|
153
|
-
* The class to represent the query result tuples (rows).
|
153
|
+
* The class to represent the query result tuples (rows).
|
154
154
|
* An instance of this class is created as the result of every query.
|
155
155
|
* You may need to invoke the #clear method of the instance when finished with
|
156
156
|
* the result for better memory performance.
|
@@ -162,7 +162,7 @@ pgresult_get(VALUE self)
|
|
162
162
|
* res.getvalue(0,0) # '1'
|
163
163
|
* res[0]['b'] # '2'
|
164
164
|
* res[0]['c'] # nil
|
165
|
-
*
|
165
|
+
*
|
166
166
|
*/
|
167
167
|
|
168
168
|
/**************************************************************************
|
@@ -209,7 +209,7 @@ pgresult_res_status(VALUE self, VALUE status)
|
|
209
209
|
* call-seq:
|
210
210
|
* res.error_message() -> String
|
211
211
|
*
|
212
|
-
* Returns the error message of the command as a string.
|
212
|
+
* Returns the error message of the command as a string.
|
213
213
|
*/
|
214
214
|
static VALUE
|
215
215
|
pgresult_error_message(VALUE self)
|
@@ -240,7 +240,7 @@ pgresult_error_message(VALUE self)
|
|
240
240
|
* * +PG_DIAG_SOURCE_FUNCTION+
|
241
241
|
*
|
242
242
|
* An example:
|
243
|
-
*
|
243
|
+
*
|
244
244
|
* begin
|
245
245
|
* conn.exec( "SELECT * FROM nonexistant_table" )
|
246
246
|
* rescue PG::Error => err
|
@@ -259,10 +259,10 @@ pgresult_error_message(VALUE self)
|
|
259
259
|
* result.error_field( PG::Result::PG_DIAG_SOURCE_FUNCTION ),
|
260
260
|
* ]
|
261
261
|
* end
|
262
|
-
*
|
262
|
+
*
|
263
263
|
* Outputs:
|
264
|
-
*
|
265
|
-
* ["ERROR", "42P01", "relation \"nonexistant_table\" does not exist", nil, nil,
|
264
|
+
*
|
265
|
+
* ["ERROR", "42P01", "relation \"nonexistant_table\" does not exist", nil, nil,
|
266
266
|
* "15", nil, nil, nil, "path/to/parse_relation.c", "857", "parserOpenTable"]
|
267
267
|
*/
|
268
268
|
static VALUE
|
@@ -381,7 +381,7 @@ pgresult_ftable(VALUE self, VALUE column_number)
|
|
381
381
|
int col_number = NUM2INT(column_number);
|
382
382
|
PGresult *pgresult = pgresult_get(self);
|
383
383
|
|
384
|
-
if( col_number < 0 || col_number >= PQnfields(pgresult))
|
384
|
+
if( col_number < 0 || col_number >= PQnfields(pgresult))
|
385
385
|
rb_raise(rb_eArgError,"Invalid column index: %d", col_number);
|
386
386
|
|
387
387
|
n = PQftable(pgresult, col_number);
|
@@ -392,7 +392,7 @@ pgresult_ftable(VALUE self, VALUE column_number)
|
|
392
392
|
* call-seq:
|
393
393
|
* res.ftablecol( column_number ) -> Fixnum
|
394
394
|
*
|
395
|
-
* Returns the column number (within its table) of the table from
|
395
|
+
* Returns the column number (within its table) of the table from
|
396
396
|
* which the column _column_number_ is made up.
|
397
397
|
*
|
398
398
|
* Raises ArgumentError if _column_number_ is out of range or if
|
@@ -406,7 +406,7 @@ pgresult_ftablecol(VALUE self, VALUE column_number)
|
|
406
406
|
|
407
407
|
int n;
|
408
408
|
|
409
|
-
if( col_number < 0 || col_number >= PQnfields(pgresult))
|
409
|
+
if( col_number < 0 || col_number >= PQnfields(pgresult))
|
410
410
|
rb_raise(rb_eArgError,"Invalid column index: %d", col_number);
|
411
411
|
|
412
412
|
n = PQftablecol(pgresult, col_number);
|
@@ -419,7 +419,7 @@ pgresult_ftablecol(VALUE self, VALUE column_number)
|
|
419
419
|
*
|
420
420
|
* Returns the format (0 for text, 1 for binary) of column
|
421
421
|
* _column_number_.
|
422
|
-
*
|
422
|
+
*
|
423
423
|
* Raises ArgumentError if _column_number_ is out of range.
|
424
424
|
*/
|
425
425
|
static VALUE
|
@@ -428,7 +428,7 @@ pgresult_fformat(VALUE self, VALUE column_number)
|
|
428
428
|
PGresult *result = pgresult_get(self);
|
429
429
|
int fnumber = NUM2INT(column_number);
|
430
430
|
if (fnumber < 0 || fnumber >= PQnfields(result)) {
|
431
|
-
rb_raise(rb_eArgError, "Column number is out of range: %d",
|
431
|
+
rb_raise(rb_eArgError, "Column number is out of range: %d",
|
432
432
|
fnumber);
|
433
433
|
}
|
434
434
|
return INT2FIX(PQfformat(result, fnumber));
|
@@ -442,14 +442,14 @@ pgresult_fformat(VALUE self, VALUE column_number)
|
|
442
442
|
*
|
443
443
|
* The integer returned is the internal +OID+ number (in PostgreSQL)
|
444
444
|
* of the type. To get a human-readable value for the type, use the
|
445
|
-
* returned OID and the field's #fmod value with the format_type() SQL
|
445
|
+
* returned OID and the field's #fmod value with the format_type() SQL
|
446
446
|
* function:
|
447
|
-
*
|
447
|
+
*
|
448
448
|
* # Get the type of the second column of the result 'res'
|
449
449
|
* typename = conn.
|
450
450
|
* exec( "SELECT format_type($1,$2)", [res.ftype(1), res.fmod(1)] ).
|
451
451
|
* getvalue( 0, 0 )
|
452
|
-
*
|
452
|
+
*
|
453
453
|
* Raises an ArgumentError if _column_number_ is out of range.
|
454
454
|
*/
|
455
455
|
static VALUE
|
@@ -467,9 +467,9 @@ pgresult_ftype(VALUE self, VALUE index)
|
|
467
467
|
* call-seq:
|
468
468
|
* res.fmod( column_number )
|
469
469
|
*
|
470
|
-
* Returns the type modifier associated with column _column_number_. See
|
470
|
+
* Returns the type modifier associated with column _column_number_. See
|
471
471
|
* the #ftype method for an example of how to use this.
|
472
|
-
*
|
472
|
+
*
|
473
473
|
* Raises an ArgumentError if _column_number_ is out of range.
|
474
474
|
*/
|
475
475
|
static VALUE
|
@@ -479,7 +479,7 @@ pgresult_fmod(VALUE self, VALUE column_number)
|
|
479
479
|
int fnumber = NUM2INT(column_number);
|
480
480
|
int modifier;
|
481
481
|
if (fnumber < 0 || fnumber >= PQnfields(result)) {
|
482
|
-
rb_raise(rb_eArgError, "Column number is out of range: %d",
|
482
|
+
rb_raise(rb_eArgError, "Column number is out of range: %d",
|
483
483
|
fnumber);
|
484
484
|
}
|
485
485
|
modifier = PQfmod(result,fnumber);
|
@@ -688,7 +688,7 @@ pgresult_oid_value(VALUE self)
|
|
688
688
|
* call-seq:
|
689
689
|
* res[ n ] -> Hash
|
690
690
|
*
|
691
|
-
* Returns tuple _n_ as a hash.
|
691
|
+
* Returns tuple _n_ as a hash.
|
692
692
|
*/
|
693
693
|
static VALUE
|
694
694
|
pgresult_aref(VALUE self, VALUE index)
|
@@ -752,7 +752,7 @@ pgresult_each_row(VALUE self)
|
|
752
752
|
rb_ary_store( new_row, field, Qnil );
|
753
753
|
}
|
754
754
|
else {
|
755
|
-
VALUE val = rb_tainted_str_new( PQgetvalue(result, row, field),
|
755
|
+
VALUE val = rb_tainted_str_new( PQgetvalue(result, row, field),
|
756
756
|
PQgetlength(result, row, field) );
|
757
757
|
|
758
758
|
#ifdef M17N_SUPPORTED
|
@@ -795,7 +795,7 @@ make_column_result_array( VALUE self, int col )
|
|
795
795
|
|
796
796
|
#ifdef M17N_SUPPORTED
|
797
797
|
/* associate client encoding for text format only */
|
798
|
-
if ( 0 == PQfformat(result, col) ) {
|
798
|
+
if ( 0 == PQfformat(result, col) ) {
|
799
799
|
ASSOCIATE_INDEX( val, self );
|
800
800
|
} else {
|
801
801
|
rb_enc_associate( val, rb_ascii8bit_encoding() );
|
@@ -813,7 +813,7 @@ make_column_result_array( VALUE self, int col )
|
|
813
813
|
* call-seq:
|
814
814
|
* res.column_values( n ) -> array
|
815
815
|
*
|
816
|
-
* Returns an Array of the values from the nth column of each
|
816
|
+
* Returns an Array of the values from the nth column of each
|
817
817
|
* tuple in the result.
|
818
818
|
*
|
819
819
|
*/
|
data/lib/1.8/pg_ext.so
CHANGED
Binary file
|
data/lib/1.9/pg_ext.so
CHANGED
Binary file
|
data/lib/2.0/pg_ext.so
CHANGED
Binary file
|
data/lib/pg.rb
CHANGED
data/lib/pg/connection.rb
CHANGED
@@ -2,7 +2,21 @@
|
|
2
2
|
|
3
3
|
require 'pg' unless defined?( PG )
|
4
4
|
|
5
|
-
# The
|
5
|
+
# The PostgreSQL connection class. The interface for this class is based on
|
6
|
+
# {libpq}[http://www.postgresql.org/docs/9.2/interactive/libpq.html], the C
|
7
|
+
# application programmer's interface to PostgreSQL. Some familiarity with libpq
|
8
|
+
# is recommended, but not necessary.
|
9
|
+
#
|
10
|
+
# For example, to send query to the database on the localhost:
|
11
|
+
#
|
12
|
+
# require 'pg'
|
13
|
+
# conn = PG::Connection.open(:dbname => 'test')
|
14
|
+
# res = conn.exec_params('SELECT $1 AS a, $2 AS b, $3 AS c', [1, 2, nil])
|
15
|
+
# # Equivalent to:
|
16
|
+
# # res = conn.exec('SELECT 1 AS a, 2 AS b, NULL AS c')
|
17
|
+
#
|
18
|
+
# See the PG::Result class for information on working with the results of a query.
|
19
|
+
#
|
6
20
|
class PG::Connection
|
7
21
|
|
8
22
|
# The order the options are passed to the ::connect method.
|
@@ -27,7 +41,8 @@ class PG::Connection
|
|
27
41
|
# Parameter 'fallback_application_name' was introduced in PostgreSQL 9.0
|
28
42
|
# together with PQescapeLiteral().
|
29
43
|
if PG::Connection.instance_methods.find{|m| m.to_sym == :escape_literal }
|
30
|
-
appname =
|
44
|
+
appname = $0.sub(/^(.{30}).{4,}(.{30})$/){ $1+"..."+$2 }
|
45
|
+
appname = PG::Connection.quote_connstr( appname )
|
31
46
|
connopts = ["fallback_application_name=#{appname}"]
|
32
47
|
else
|
33
48
|
connopts = []
|
data/lib/pg/exceptions.rb
CHANGED
data/sample/async_api.rb
CHANGED
@@ -11,7 +11,7 @@ TIMEOUT = 5.0 # seconds to wait for an async operation to complete
|
|
11
11
|
|
12
12
|
# Print 'x' continuously to demonstrate that other threads aren't
|
13
13
|
# blocked while waiting for the connection, for the query to be sent,
|
14
|
-
# for results, etc. You might want to sleep inside the loop or
|
14
|
+
# for results, etc. You might want to sleep inside the loop or
|
15
15
|
# comment this out entirely for cleaner output.
|
16
16
|
progress_thread = Thread.new { loop { print 'x' } }
|
17
17
|
|
@@ -82,7 +82,7 @@ conn.send_query( "SELECT * FROM pg_stat_activity" )
|
|
82
82
|
loop do
|
83
83
|
output_progress " waiting for a response"
|
84
84
|
|
85
|
-
# Buffer any incoming data on the socket until a full result is ready.
|
85
|
+
# Buffer any incoming data on the socket until a full result is ready.
|
86
86
|
conn.consume_input
|
87
87
|
while conn.is_busy
|
88
88
|
select( [socket], nil, nil, TIMEOUT ) or
|
data/sample/async_mixed.rb
CHANGED
@@ -5,7 +5,7 @@ require 'pg'
|
|
5
5
|
$stdout.sync = true
|
6
6
|
|
7
7
|
# This is a example of how to mix and match synchronous and async APIs. In this case,
|
8
|
-
# the connection to the server is made syncrhonously, and then queries are
|
8
|
+
# the connection to the server is made syncrhonously, and then queries are
|
9
9
|
# asynchronous.
|
10
10
|
|
11
11
|
TIMEOUT = 5.0 # seconds to wait for an async operation to complete
|
@@ -36,7 +36,7 @@ conn.send_query( "SELECT * FROM pg_stat_activity" )
|
|
36
36
|
loop do
|
37
37
|
output_progress " waiting for a response"
|
38
38
|
|
39
|
-
# Buffer any incoming data on the socket until a full result is ready.
|
39
|
+
# Buffer any incoming data on the socket until a full result is ready.
|
40
40
|
conn.consume_input
|
41
41
|
while conn.is_busy
|
42
42
|
output_progress " waiting for data to be available on %p..." % [ socket ]
|
data/sample/cursor.rb
CHANGED
data/sample/disk_usage_report.rb
CHANGED
data/sample/wal_shipper.rb
CHANGED
data/spec/lib/helpers.rb
CHANGED
@@ -42,8 +42,7 @@ module PG::TestingHelpers
|
|
42
42
|
def ansi_code( *attributes )
|
43
43
|
attributes.flatten!
|
44
44
|
attributes.collect! {|at| at.to_s }
|
45
|
-
|
46
|
-
# [ ENV['TERM'], attributes ]
|
45
|
+
|
47
46
|
return '' unless /(?:vt10[03]|xterm(?:-color)?|linux|screen)/i =~ ENV['TERM']
|
48
47
|
attributes = ANSI_ATTRIBUTES.values_at( *attributes ).compact.join(';')
|
49
48
|
|
data/spec/pg/connection_spec.rb
CHANGED
@@ -574,6 +574,16 @@ describe PG::Connection do
|
|
574
574
|
PG::Connection.parse_connect_args( 'dbname=test' ).should include( $0 )
|
575
575
|
end
|
576
576
|
|
577
|
+
it "sets a shortened fallback_application_name on new connections" do
|
578
|
+
old_0 = $0
|
579
|
+
begin
|
580
|
+
$0 = "/this/is/a/very/long/path/with/many/directories/to/our/beloved/ruby"
|
581
|
+
PG::Connection.parse_connect_args( 'dbname=test' ).should match(/\/this\/is\/a.*\.\.\..*\/beloved\/ruby/)
|
582
|
+
ensure
|
583
|
+
$0 = old_0
|
584
|
+
end
|
585
|
+
end
|
586
|
+
|
577
587
|
it "calls the block supplied to wait_for_notify with the notify payload if it accepts " +
|
578
588
|
"any number of arguments" do
|
579
589
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 33
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 15
|
9
|
-
-
|
10
|
-
version: 0.15.
|
9
|
+
- 1
|
10
|
+
version: 0.15.1
|
11
11
|
platform: x86-mingw32
|
12
12
|
authors:
|
13
13
|
- Michael Granger
|
@@ -36,7 +36,7 @@ cert_chain:
|
|
36
36
|
mMFp4kPUHbWOqCp2mz9gCA==
|
37
37
|
-----END CERTIFICATE-----
|
38
38
|
|
39
|
-
date: 2013-
|
39
|
+
date: 2013-04-08 00:00:00 Z
|
40
40
|
dependencies:
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: hoe-mercurial
|
@@ -133,7 +133,7 @@ dependencies:
|
|
133
133
|
description: |-
|
134
134
|
Pg is the Ruby interface to the {PostgreSQL RDBMS}[http://www.postgresql.org/].
|
135
135
|
|
136
|
-
It works with {PostgreSQL 8.
|
136
|
+
It works with {PostgreSQL 8.4 and later}[http://www.postgresql.org/support/versioning/].
|
137
137
|
|
138
138
|
A small example usage:
|
139
139
|
|
metadata.gz.sig
CHANGED
Binary file
|