[#144186] Re: array of object insert polices — "Pe, Botp" <botp@...>

dave [mailto:dave.m@email.it] wrote:

14 messages 2005/06/01

[#144206] Implementing a Read-Only array — Gavin Kistner <gavin@...>

Right up front, let me say that I realize that I can't prevent

14 messages 2005/06/01

[#144224] Method Chaining Issues — "aartist" <aartist@...>

try this:

28 messages 2005/06/01
[#144231] Re: Method Chaining Issues — "Phrogz" <gavin@...> 2005/06/01

This is a FAQ, though no page on the RubyGarden wiki seems to address

[#144240] Re: Method Chaining Issues — Nikolai Weibull <mailing-lists.ruby-talk@...> 2005/06/01

Phrogz wrote:

[#144230] ternary operator confusion — Belorion <belorion@...>

I don't know if this is "improper" use of the ternary operator, but I

19 messages 2005/06/01
[#144233] Re: ternary operator confusion — "Phrogz" <gavin@...> 2005/06/01

true ? a.push(1) : a.push(2)

[#144257] Re: ternary operator confusion — "Marcel Molina Jr." <marcel@...> 2005/06/01

On Thu, Jun 02, 2005 at 01:40:23AM +0900, Phrogz wrote:

[#144263] Re: ternary operator confusion — Eric Mahurin <eric_mahurin@...> 2005/06/01

--- "Marcel Molina Jr." <marcel@vernix.org> wrote:

[#144453] RubyScript2Exe and GUI toolkits — Erik Veenstra <pan@...>

13 messages 2005/06/03

[#144487] Building a business case for Ruby — Joe Van Dyk <joevandyk@...>

Hi,

29 messages 2005/06/03

[#144535] ruby-dev summary 26128-26222 — Minero Aoki <aamine@...>

Hi all,

11 messages 2005/06/04

[#144579] Package, a future replacement for setup.rb and mkmf.rb — Christian Neukirchen <chneukirchen@...>

29 messages 2005/06/04

[#144672] newbie read.scan (?) question — "Bruce D'Arcus" <bdarcus.lists@...>

Hi,

16 messages 2005/06/06

[#144691] making a duck — Eric Mahurin <eric_mahurin@...>

Regarding duck-typing... Is there an easy way make a "duck"?

27 messages 2005/06/06

[#144867] ruby-wish@ruby-lang.org mailing list — dave <dave.m@...>

19 messages 2005/06/08
[#144870] Re: [PROPOSAL] ruby-wish@ruby-lang.org mailing list — "Robert Klemme" <bob.news@...> 2005/06/08

Austin Ziegler wrote:

[#144890] RubyStuff: The Ruby Shop for Ruby Programmers — James Britt <james_b@...>

Announcing the formal grand opening of Ruby Stuff: The Ruby Shop for

36 messages 2005/06/08

[#144966] python/ruby benchmark. — "\"</script>" <groleo@...>

I took a look at

78 messages 2005/06/09
[#144967] Re: python/ruby benchmark. — gabriele renzi <surrender_it@...> 2005/06/09

"</script> ha scritto:

[#144974] Re: python/ruby benchmark. — Lothar Scholz <mailinglists@...> 2005/06/09

Hello gabriele,

[#144977] Re: python/ruby benchmark. — Kent Sibilev <ksruby@...> 2005/06/09

Java is an order of magnitude faster than Ruby. The development of a

[#144980] Re: python/ruby benchmark. — Lothar Scholz <mailinglists@...> 2005/06/09

Hello Kent,

[#144983] Re: python/ruby benchmark. — "Ryan Leavengood" <mrcode@...> 2005/06/09

Lothar Scholz said:

[#145196] Re: python/ruby benchmark(don't shoot the messenger) — ptkwt@... (Phil Tomson) 2005/06/12

In article <9e7db91105061106485b68d629@mail.gmail.com>,

[#145207] Re: python/ruby benchmark(don't shoot the messenger) — Steven Jenkins <steven.jenkins@...> 2005/06/12

Phil Tomson wrote:

[#145212] Re: python/ruby benchmark(don't shoot the messenger) — Austin Ziegler <halostatue@...> 2005/06/12

On 6/12/05, Steven Jenkins <steven.jenkins@ieee.org> wrote:

[#145219] Re: python/ruby benchmark(don't shoot the messenger) — Steven Jenkins <steven.jenkins@...> 2005/06/12

Austin Ziegler wrote:

[#145223] Re: python/ruby benchmark(don't shoot the messenger) — Austin Ziegler <halostatue@...> 2005/06/12

On 6/12/05, Steven Jenkins <steven.jenkins@ieee.org> wrote:

[#145240] Re: python/ruby benchmark(don't shoot the messenger) — Steven Jenkins <steven.jenkins@...> 2005/06/12

Austin Ziegler wrote:

[#145241] Re: python/ruby benchmark(don't shoot the messenger) — Austin Ziegler <halostatue@...> 2005/06/13

On 6/12/05, Steven Jenkins <steven.jenkins@ieee.org> wrote:

[#145000] RDoc

Hi, I have a question. When I compiled ruby-1.8.2

13 messages 2005/06/09
[#145003] Re: RDoc — Eric Hodel <drbrain@...7.net> 2005/06/09

On 09 Jun 2005, at 13:55, Jesffffas Antonio Sfffe1nchez A. wrote:

[#145238] finding Hash subsets based on key value — "ee" <erik.eide@...>

Hi

17 messages 2005/06/12

[#145304] PDF::Writer 1.0 (version 1.0.1) — Austin Ziegler <halostatue@...>

= PDF::Writer

21 messages 2005/06/13
[#145411] Re: [ANN] PDF::Writer 1.0 (version 1.0.1) — Jason Foreman <threeve.org@...> 2005/06/14

No love from PDF::Writer on Mac OS X 10.4.1. I hope to get this fixed

[#145420] Re: [ANN] PDF::Writer 1.0 (version 1.0.1) — Austin Ziegler <halostatue@...> 2005/06/14

On 6/14/05, Jason Foreman <threeve.org@gmail.com> wrote:

[#145432] Re: [ANN] PDF::Writer 1.0 (version 1.0.1) — Jamis Buck <jamis@37signals.com> 2005/06/15

On Jun 14, 2005, at 5:11 PM, Austin Ziegler wrote:

[#145339] survey: what editor do you use to hack ruby? — Lowell Kirsh <lkirsh@...>

I've been having a tough time getting emacs set up properly with ruby

62 messages 2005/06/14

[#145390] Ruby and recursion (Ackermann benchmark) — ptkwt@... (Phil Tomson)

14 messages 2005/06/14

[#145586] How to make a browser in Ruby Tk — sujeet kumar <sujeetkr@...>

Hi

13 messages 2005/06/16

[#145636] Super-scalar Optimizations — "Phrogz" <gavin@...>

I was looking over the shoulder of a C++ coworker yesterday, when he

14 messages 2005/06/16

[#145677] Truth maintenance system in Ruby — "itsme213" <itsme213@...>

Anyone know of any kind of truth-maintenance system implemented in Ruby (or,

12 messages 2005/06/17

[#145720] Frameless RDoc template ('technology preview') — ES <ruby-ml@...>

Hi!

17 messages 2005/06/17

[#145779] Newbe questions... — "Chuck Brotman" <brotman@...>

In Ruby Is there a prefered (or otherwise elegant) way to do an inner &

17 messages 2005/06/18

[#145790] GC.disable not working? — Eric Mahurin <eric_mahurin@...>

From what I can tell, GC.disable doesn't work. I'm wanting to

37 messages 2005/06/18
[#145822] Re: GC.disable not working? — ts <decoux@...> 2005/06/19

>>>>> "E" == Eric Mahurin <eric_mahurin@yahoo.com> writes:

[#146024] evaluation of ruby — "Franz Hartmann" <porschefranz@...> 2005/06/21

Hello all,

[#145830] preventing instantiation — "R. Mark Volkmann" <mark@...>

What is the recommended way in Ruby to prevent other classes from creating

13 messages 2005/06/19
[#145831] Re: preventing instantiation — Gavri Fernandez <gavri.fernandez@...> 2005/06/19

On 6/19/05, R. Mark Volkmann <mark@ociweb.com> wrote:

[#145879] x==1 vs 1==x — Gavin Kistner <gavin@...>

I'm against _premature_ optimization in theory, but believe that a

19 messages 2005/06/20
[#145880] Re: x==1 vs 1==x — ts <decoux@...> 2005/06/20

>>>>> "G" == Gavin Kistner <gavin@refinery.com> writes:

[#145943] Chess Variants (II) (#36) — James Edward Gray II <james@...>

I don't want to spoil all the fun, in case anyone is still attempting

12 messages 2005/06/20

[#146038] 1. Ruby result: 101 seconds , 2. Java result:9.8 seconds, 3. Perl result:62 seconds — Michael Tan <mtan1232000@...>

Just new to Ruby since last week, running my same functional program on the windows XP(Pentium M1.5G), the Ruby version is 10 times slower than the Java version. The program is to find the prime numbers like 2, 3,5, 7, 11, 13... Are there setup issues? or it is normal?

47 messages 2005/06/21
[#146044] Re: 1. Ruby result: 101 seconds , 2. Java result:9.8 seconds, 3. Perl result:62 seconds — "Florian Frank" <flori@...> 2005/06/21

Michael Tan wrote:

[#146047] Re: 1. Ruby result: 101 seconds , 2. Java result:9.8 seconds, 3. Perl result:62 seconds — Jim Freeze <jim@...> 2005/06/21

* Florian Frank <flori@nixe.ping.de> [2005-06-22 05:40:14 +0900]:

[#146050] Re: 1. Ruby result: 101 seconds , 2. Java result:9.8 seconds, 3. Perl result:62 seconds — "Ryan Leavengood" <mrcode@...> 2005/06/21

Jim Freeze said:

[#146132] Re: 1. Ruby result: 101 seconds , 2. Java result:9.8 seconds, 3. Perl result:62 seconds — "Mark Thomas" <mrt@...> 2005/06/22

Florian Frank wrote:

[#146064] rubyscript2exe — Joe Van Dyk <joevandyk@...>

Hi,

14 messages 2005/06/21

[#146169] spidering a website to build a sitemap — Bill Guindon <agorilla@...>

I need to spider a site and build a sitemap for it. I've looked

17 messages 2005/06/22

[#146178] traits-0.4.0 - the coffee release — "Ara.T.Howard" <Ara.T.Howard@...>

15 messages 2005/06/22

[#146328] string to Class object — "R. Mark Volkmann" <mark@...>

How can I create a Class object from a String that contains the name of a class?

15 messages 2005/06/24

[#146380] Application-0.6.0 — Jim Freeze <jim@...>

CommandLine - Application and OptionParser

22 messages 2005/06/24

[#146391] ASP.NET vs Ruby on Rails — Stephen Kellett <snail@...>

HI Folks,

21 messages 2005/06/24
[#146457] Re: ASP.NET vs Ruby on Rails — "Dema" <demetriusnunes@...> 2005/06/25

Hi Stephen,

[#146425] speeding up Process.detach frequency — Joe Van Dyk <joevandyk@...>

Is there any way to speed up Process.detach? The ri documentation for

14 messages 2005/06/25

[#146483] I saw the beauty of Ruby Re: 1. Ruby result: 101 seconds , 2. Java result:9.8 seconds, 3. Perl result:62 seconds — Michael Tan <mtan1232000@...>

22 messages 2005/06/26
[#146485] Re: I saw the beauty of Ruby Re: 1. Ruby result: 101 seconds , 2. Java result:9.8 seconds, 3. Perl result:62 seconds — "Florian Frank" <flori@...> 2005/06/26

Michael Tan wrote:

[#146504] Re: I saw the beauty of Ruby Re: 1. Ruby result: 101 seconds , 2. Java result:9.8 seconds, 3. Perl result:62 seconds — Brad Wilson <dotnetguy@...> 2005/06/26

For comparison, the port of your code to (less than elegant) C#.

[#146515] Re: I saw the beauty of Ruby Re: 1. Ruby result: 101 seconds , 2. Java result:9.8 seconds, 3. Perl result:62 seconds — Florian Gro<florgro@...> 2005/06/26

Brad Wilson wrote:

[#146491] What do you want to see in a Sparklines Library? — Daniel Nugent <nugend@...>

This is sort of an interest gauging/feature request poll.

17 messages 2005/06/26
[#146506] Re: What do you want to see in a Sparklines Library? — Daniel Amelang <daniel.amelang@...> 2005/06/26

See what's already been done before you get too far.

[#146517] Re: What do you want to see in a Sparklines Library? — Daniel Nugent <nugend@...> 2005/06/26

Yup, seen the stuff on RedHanded, I was planning on writing a little

[#146562] RCM - A Ruby Configuration Management System — Michael Neumann <mneumann@...>

Hi all,

22 messages 2005/06/27

[#146630] yield does not take a block — Daniel Brockman <daniel@...>

Under ruby 1.9.0 (2005-06-23) [i386-linux], irb 0.9.5(05/04/13),

48 messages 2005/06/28
[#146666] Re: yield does not take a block — Daniel Brockman <daniel@...> 2005/06/28

Yukihiro Matsumoto <matz@ruby-lang.org> writes:

[#146680] Re: yield does not take a block — Yukihiro Matsumoto <matz@...> 2005/06/28

Hi,

[#146684] Re: yield does not take a block — Eric Mahurin <eric_mahurin@...> 2005/06/28

[#146779] Re: yield does not take a block — "Adam P. Jenkins" <thorin@...> 2005/06/29

Eric Mahurin wrote:

[#146700] Anything in new Eclipse for Rubyists? — "jfry" <jeff.fry@...>

Hey there, I know that a number of folks on the list use Eclipse as

14 messages 2005/06/28

[#146773] Programmers Contest: Fit pictures on a page — hicinbothem@...

GLOSSY: The Summer Programmer Of The Month Contest is underway!

18 messages 2005/06/29

[#146815] shift vs. slice!(0) and others — Eric Mahurin <eric_mahurin@...>

I just did some benchmarking of various ways to insert/delete

12 messages 2005/06/29

Accessing SVN through Ruby/DL

From: Jim Morris <morris@...>
Date: 2005-06-08 02:26:38 UTC
List: ruby-talk #144850
I was following the old thread regarding accessing SVN through Ruby,
using SWIG or DL.  I cobbled together the following to see how hard it
would be to do this in DL.  I implemented the svn_client_status2
function as that is one API not implemented in the current SWIG/Ruby
binding to SVN (and it was the one I needed).

I did both a command line parsing version and the Ruby/DL calling
/usr/local/lib/libsvn_client-1.so.

The latter was far easier to deal with even though the DL stuff is not
really well documented and examples are far and few between, I hope
this can be added to the samples, as it involves callbacks, structures
and pointer types.  (I can send the command line parsing version if
anyone is interested).

I suspect this Ruby/DL version will work on win32 given the correct
path to the equivalent .DLL

Anyway there is a huge amount of effort required to get the Ruby/DL to
the same point that the Swig/Ruby bindings are currently at, but this
example may get someone started if they are so inclined.

The one thing I have tried to do with this approach is to make it more
ruby'ish, by hiding the SVN pool and context stuff in the class
SvnClient, and using a Proc Block for the callback.

I'm interested in any feedback on this approach as I suspect I will be
playing with Ruby/DL a lot more. Also any improvements and/or
suggestions on how to handle the large number of enums the c version
of SVN uses.

--- snip Svnrb.rb ----
require 'dl/import'
require 'dl/struct'

module Svnrb
    extend DL::Importable
    # NOTE you may have to change this path depending on where your svn 
is installed
    # On win32 it will need to point to the relevant .DLL
    dlload "/usr/local/lib/libsvn_client-1.so" 
#,"/usr/local/lib/libsvn_subr-1.so"

    typealias("apr_pool_t*", "void*")
    typealias("apr_status_t", "int")

    # define some convenient structures used by SVN
    Svn_opt_revision_t= struct [
        "int kind",
        "int revision"
    ]

    Svn_error_t= struct [
        "int apr_err",
        "char *message",
        "void *child",
        "apr_pool_t *pool",
        "char *file",
        "long line"
    ]

    # used where we pass a pointer to a long which gets modified in the call
    # and where we need to actually read the modified value within Ruby
    LongArg= struct [
        "long val"
    ]

    Svn_status_t = struct [
        "void *entry",
        "int text_status",
        "int prop_status",
        "int locked",
        "int copied",
        "int switched",
        "int repos_text_status",
        "int repos_prop_status",
        "void *repos_lock"
    ]

    # an experimental way to match standard SVN status enum with the value
    # Could also use Constants here
    Svn_wc_status_kind= {
        # does not exist
        "svn_wc_status_none" => 1,
        # is not a versioned thing in this wc
        "svn_wc_status_unversioned" => 2,
        # exists, but uninteresting.
        "svn_wc_status_normal" => 3,
        # is scheduled for addition
        "svn_wc_status_added" => 4,
        # under v.c., but is missing
        "svn_wc_status_missing" => 5,
        # scheduled for deletion
        "svn_wc_status_deleted" => 6,
        # was deleted and then re-added
        "svn_wc_status_replaced" => 7,
        # text or props have been modified
        "svn_wc_status_modified" => 8,
        # local mods received repos mods
        "svn_wc_status_merged" => 9,
        # local mods received conflicting repos mods
        "svn_wc_status_conflicted" => 10,
        #  resource marked as ignored
        "svn_wc_status_ignored" => 11,
        # an unversioned resource is in the way of the versioned resource
        "svn_wc_status_obstructed" => 12,
        # an unversioned path populated by an svn:external property
        "svn_wc_status_external" => 13,
        #  directory doesn't contain a complete entries list
        "svn_wc_status_incomplete" => 14
    }

    # the functions in various svn libraries we call in this example
    extern "int svn_cmdline_init(char *, void*)"
    extern "apr_pool_t *svn_pool_create_ex(apr_pool_t *, void *)"
    extern "void *svn_config_ensure(char *, apr_pool_t *)"
    extern "void *svn_client_create_context(void **, apr_pool_t *)"
    extern "void *svn_stream_for_stdout(void **, apr_pool_t *)"
    extern "void *svn_client_cat(void *, char *, Svn_opt_revision_t *, 
void *, apr_pool_t *)"
    extern "void *svn_client_status2(int *, char *, Svn_opt_revision_t 
*, void *, void *, int, int, int, int, int, void *,  apr_pool_t *)"

    # a wrapper around access to the SVN Client library, to make it more 
"ruby-like" to the user
    class SvnClient
        @ctx= nil    # active context
        @pool= nil   # active pool

        # this initializes the svn library and gets the contect and pool 
for use in other calls
        def initialize(name)
            err= Svnrb::svn_cmdline_init(name, nil)
            raise "svn_cmdline_init failed" if err != 0
            @pool= Svnrb::svn_pool_create_ex(nil, nil)
            raise "svn_pool_create_ex" if @pool == nil
            err= Svnrb::svn_config_ensure("", @pool)
            raise "svn_config_ensure failed" if err != nil;
            # effectively void *, passed in as void **, will get the 
pointer to the context
            # Ruby does not need to every read this value, it just 
passes it through to subsequent calls
            # ditto for the pool
            tctx= DL.malloc(DL.sizeof('P'))
            err = Svnrb::svn_client_create_context(tctx, @pool);
            raise "svn_client_create_context failed" if err != nil
            @ctx= tctx.ptr # this becomes the contect to use for other calls
        end

        # gets the stdout stream for use in cat
        def getStdoutStream
            sto= DL.malloc(DL.sizeof('P')) # long *
            err= Svnrb::svn_stream_for_stdout(sto, @pool)
            sto.ptr
        end

        # implements the client cat call
        # rev is -1 to get HEAD, and a rev number for any other revision
        def cat(stream, path, rev)
            revision= Svn_opt_revision_t.malloc
            if rev >= 0
                revision.kind= 1 # revision #
                revision.revision= rev
            else
                revision.kind= 7 # HEAD
            end

            err= Svnrb::svn_client_cat(stream, path, revision, @ctx, @pool)
            if err != nil
                terr= Svn_error_t.new(err)
                raise "svn_client_cat failed: (#{terr.apr_err}) 
#{terr.message}"
            end
        end

        # call sthe Client Status2 function
        # url is the WC path
        # rev is -1 to get HEAD, and a rev number for any other revision
        # proc is the proc method callback for each resource which will 
get two parameters: path and status
        # status is a structure of type Svn_status_t
        # returns the current Youngest revision in the Repository
        def status(url, rev, &proc)
            resrev= LongArg.malloc
            revision= Svn_opt_revision_t.malloc
            if rev >= 0
                revision.kind= 1 # revision #
                revision.revision= rev
            else
                revision.kind= 7 # HEAD
            end

            # process callback and call the supplied Proc
            mycb= DL.callback('0PSP'){ |baton,path,pstatus|
                if pstatus
                    status= Svn_status_t.new(pstatus)
                    proc.call(path, status)
                end
            }
            err= Svnrb::svn_client_status2(resrev, url, revision, mycb, 
nil, 1, 1, 1, 0, 1, @ctx, @pool)
            resrev.val
        end
    end

end

if $0 == __FILE__
        # test it, NOTE these test are specific to paths in my WC, yours 
may vary

        svn= Svnrb::SvnClient.new("testsvn")

        #outStream= svn.getStdoutStream
        #svn.cat(outStream, "/home/morris/work/perl/vcvs.pl", -1)
        #svn.cat(outStream, "/home/morris/work/perl/.dddd", 7)

        # get the status of the specified WC path, gets the HEAD 
revision, and only prints out the status of versioned resources
        rev= svn.status("/home/morris/work/perl", -1) {
            |path, status|
            print path, "-> ", status.text_status, " - ", 
status.prop_status, "\n" if  status.text_status != 
Svnrb::Svn_wc_status_kind["svn_wc_status_unversioned"]
        }

        print "rev= ", rev, "\n"
end
--- end snip ----


In This Thread

Prev Next