|
|||
|
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 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
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
-- Posted via http://www.ruby-forum.com/. |
|
|
||||
|
||||
|
|
|
|||
|
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/. |
|
|||
|
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
>
> 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/ |
|
|||
|
@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/. |
|
|||
|
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/. |
|
|||
|
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/. |
|
|
![]() |
| Popular Tags in the Forum |
| commands, directory, external, working |
| Thread Tools | |
| Display Modes | |
|
|
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 12:20 PM |
| Re: Getting info about the Present Working directory | SAS_learner | Newsgroup comp.soft-sys.sas | 0 | 02-13-2009 03:33 PM |
| Re: Getting info about the Present Working directory | Joe Matise | Newsgroup comp.soft-sys.sas | 0 | 02-13-2009 03:10 PM |
| Getting info about the Present Working directory | SAS_learner | Newsgroup comp.soft-sys.sas | 0 | 02-13-2009 02:38 PM |
| Re: 'Local' datasets in Macro? | Ed Heaton | Newsgroup comp.soft-sys.sas | 0 | 05-09-2007 08:03 PM |