Go Back   Rhinocerus > Newsgroup > Newsgroup comp.lang.ruby



Reply
 
Thread Tools Display Modes
  #1 (permalink)  
Old 02-09-2010, 12:01 AM
Duckz King_duckz
Guest
 
Posts: n/a
Default Working directory for external commands

Hello everyone, I've been searching on google for a while now but I
can't find any solution to my question. Basically I want to be able to
specify the working directory for any external command I might launch,
without using ugly globals :S
What I'm trying to write is a wrapper class for git. As a client, I want
to be able to write, for example:

Code:
git = GitWrapper.new
puts git.status
and of course I don't want to know what's happening inside status().

In order to invoke git I'm doing `git status`, or `"c:/program
files/git/bin/sh.exe" -c "git status"`, depending on the OS and other
things. The problem is, backticks as well as %x, system and friends rely
on Dir.pwd, so in order to get a valid result from git I should do:
Code:
def status()
Dir.chdir("some/dir") do
return `git status`
end
end
which I'd rather avoid for its obvious fragility:
Code:
git = GitWrapper.new
a = Thread.new {10000.times do {Dir.chdir("some/other/dir");
do_some_work(); `rm -rf '*'`}}
puts git.status() # OMG!!!!!111
a.join
Any suggestions?
--
Posted via http://www.ruby-forum.com/.

Reply With Quote
Alt Today
Advertising
Google Adsense
 
and become member of Rhinocerus
Standard Sponsored Links

  #2 (permalink)  
Old 02-09-2010, 12:57 AM
Marnen Laibow-Koser
Guest
 
Posts: n/a
Default Re: Working directory for external commands

Duckz King_duckz wrote:
> Hello everyone, I've been searching on google for a while now but I
> can't find any solution to my question. Basically I want to be able to
> specify the working directory for any external command I might launch,
> without using ugly globals :S
> What I'm trying to write is a wrapper class for git.


This doesn't directly answer your question, but have you looked at Grit?

Best,
--Â*
Marnen Laibow-Koser
http://www.marnen.org
marnen@marnen.org
--
Posted via http://www.ruby-forum.com/.

Reply With Quote
  #3 (permalink)  
Old 02-09-2010, 07:52 AM
Robert Klemme
Guest
 
Posts: n/a
Default Re: Working directory for external commands

2010/2/9 Duckz King_duckz <king_duckz@yahoo.it>:
> Hello everyone, I've been searching on google for a while now but I
> can't find any solution to my question. Basically I want to be able to
> specify the working directory for any external command I might launch,
> without using ugly globals :S
> What I'm trying to write is a wrapper class for git. As a client, I want
> to be able to write, for example:
>
>
Code:
> git =3D GitWrapper.new
> puts git.status
>
>
> and of course I don't want to know what's happening inside status().
>
> In order to invoke git I'm doing `git status`, or `"c:/program
> files/git/bin/sh.exe" -c "git status"`, depending on the OS and other
> things. The problem is, backticks as well as %x, system and friends rely
> on Dir.pwd, so in order to get a valid result from git I should do:
>
Code:
> def status()
> =A0 =A0Dir.chdir("some/dir") do
> =A0 =A0 =A0 =A0return `git status`
> =A0 =A0end
> end
>
> which I'd rather avoid for its obvious fragility:
>
Code:
> git =3D GitWrapper.new
> a =3D Thread.new {10000.times do {Dir.chdir("some/other/dir");
> do_some_work(); `rm -rf '*'`}}
> puts git.status() # OMG!!!!!111
> a.join
>
>
> Any suggestions?


The only safe way I can think of is to defer the chdir to a child
process. The shortest form would be

irb(main):006:0> s=3D`cd /tmp && exec pwd`
=3D> "/tmp\n"
irb(main):007:0>

(Using "git status" instead of "pwd" of course.)

A Ruby solution would probably include IO.popen or popen3 and fork.

Kind regards

robert

--=20
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

Reply With Quote
  #4 (permalink)  
Old 02-09-2010, 10:52 AM
Duckz King_duckz
Guest
 
Posts: n/a
Default Re: Working directory for external commands

@Marnen Laibow-Koser:
I didn't hear of it, but from a quick look it seems to allow a much
cleaner solution, I'll look into that! Anyways, the global Dir problem
has already occurred to me in other situations, and I'm still interested
in finding a safe solution! I wonder why popen or system don't allow an
optional parameter to specify the working directory!

@Robert Klemme:
Thanks for the hint, I guess I'll follow that path to write an intial
version, before looking in depth into Grit. Are there any issues with
fork implementation on Windows in Ruby 1.9.1? Still, I find it a shame
you can't specify the cwd as a parameter (as in CreateProcess() on
Windows for example, but I'm sure most OS have an equivalent).
--
Posted via http://www.ruby-forum.com/.

Reply With Quote
  #5 (permalink)  
Old 02-09-2010, 01:22 PM
Albert Schlef
Guest
 
Posts: n/a
Default Re: Working directory for external commands

Duckz King_duckz wrote:
> I guess I'll follow that path to write an intial
> version, before looking in depth into Grit.


BTW, there are two gems: 'grit' and 'git'. I don't know what's the
difference between them.
--
Posted via http://www.ruby-forum.com/.

Reply With Quote
  #6 (permalink)  
Old 02-09-2010, 01:38 PM
Marnen Laibow-Koser
Guest
 
Posts: n/a
Default Re: Working directory for external commands

Albert Schlef wrote:
> Duckz King_duckz wrote:
>> I guess I'll follow that path to write an intial
>> version, before looking in depth into Grit.

>
> BTW, there are two gems: 'grit' and 'git'. I don't know what's the
> difference between them.


Grit is pure Ruby. I think the git gem is just a wrapper.

Best,
--Â*
Marnen Laibow-Koser
http://www.marnen.org
marnen@marnen.org
--
Posted via http://www.ruby-forum.com/.

Reply With Quote
 
Reply

Popular Tags in the Forum
commands, directory, external, working

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
"PAK WEB PAGES" "PAK WEB SITES" "PAK WEB LINKS" "PAK TV LIVE" "PAKWEB" "PAK WEB DIRECTORY" "PAK WEB PAGES" ON www.pak-web-pages.blogspot.com nadia Newsgroup comp.lang.python 0 08-26-2009 01:20 PM
Re: Getting info about the Present Working directory SAS_learner Newsgroup comp.soft-sys.sas 0 02-13-2009 04:33 PM
Re: Getting info about the Present Working directory Joe Matise Newsgroup comp.soft-sys.sas 0 02-13-2009 04:10 PM
Getting info about the Present Working directory SAS_learner Newsgroup comp.soft-sys.sas 0 02-13-2009 03:38 PM
Re: 'Local' datasets in Macro? Ed Heaton Newsgroup comp.soft-sys.sas 0 05-09-2007 09:03 PM



Language 1 | C | C++ | Php | Python | Lisp | Perl | Ruby | Java | Pascal | Basic | Language 2 | Databases | Oracle | Mysql | Access | Drupal
All times are GMT. The time now is 05:24 PM.


Copyright ©2009

LinkBacks Enabled by vBSEO 3.3.0 RC2 © 2009, Crawlability, Inc.