Commit Graph

323 Commits

Author SHA1 Message Date
Fabien Potencier
1c51e427ec merged branch Seldaek/processb (PR #3381)
Commits
-------

7444fdf Feedback fixes
54cfd44 Restore bypass_shell by default with windows compat
38df47a Fix env inheritance and added tests
f555c62 [Process] Add windows compatibility to Process component
c4e8ff7 [Process] Always escape commands properly and remove windows-specific handling
9e237f6 [Process] Add ProcessBuilder::create() for more fluidity in the interface until 5.4
4882777 [Process] Code clean up

Discussion
----------

ProcessBuilder clean up

- Code cleanup
- Added create() static method for easy creation until we can do `$process = (new ProcessBuilder())->add()->getProcess();`
- Removed windows wrapping of commands. This does not belong there IMO. If assetic needs that it should add it, and if it's generally beneficial to everyone then we should add it to Process, but having it implicitly only when using ProcessBuilder makes on sense.

---------------------------------------------------------------------------

by beberlei at 2012-02-16T16:10:15Z

I agree on the windows stuff. I know it fixes a bunch of issues in Assetic, but it also caused my tons of headaches in my windows commands that didnt need strict escaping. Also this messes with parameters in Powershell for example, when you have "foo /bar:baz" then it makes this to ""foo" "/bar:baz"" which in some circumstances fails. Its all messy.

---------------------------------------------------------------------------

by schmittjoh at 2012-02-16T17:53:30Z

Can you move the wrapping to the Process class instead? It's generally causing no bad side effects, but fixes a few issues in the proc_open implementation. It is also necessary for Assetic, and potentially other tools to work on Windows.

---------------------------------------------------------------------------

by Seldaek at 2012-02-16T17:56:02Z

Sure, although "generally" sounds a bit scary in your sentence :)

What about the bypass_shell option?

---------------------------------------------------------------------------

by schmittjoh at 2012-02-16T18:02:12Z

"generally" means I don't know of any, but what I do know is that the alternative you are suggesting is not working. Have there been any bug reports on Assetic/symfony/your own code that "cmd" wrapping causes problems?

---------------------------------------------------------------------------

by Seldaek at 2012-02-16T18:04:59Z

No no, don't get me wrong, I'm not suggesting this should be removed. I'm just saying it should be done for all processes or none, but not just for those run via the ProcessBuilder because that's a good recipe for WTFs.

---------------------------------------------------------------------------

by schmittjoh at 2012-02-16T18:09:38Z

Yeah, I understand, and it makes sense.

What I would suggest is to move it to the process class, and let a wider audience test this to see if we get any bug reports on strange behavior etc.

---------------------------------------------------------------------------

by Seldaek at 2012-02-16T18:12:00Z

Still not sure about the bypass_shell option though. And @beberlei mentioned problems? Can you expand on that?

---------------------------------------------------------------------------

by Seldaek at 2012-02-16T18:16:34Z

Added back to Process, with a switch so if anyone runs into problems they can easily disable it.

---------------------------------------------------------------------------

by Seldaek at 2012-02-22T10:59:58Z

Ping @fabpot - I think this is ready now
Ping @kriswallsmith if this gets merged please update Assetic stuff to restore the bypass_shell option if it's really needed.

---------------------------------------------------------------------------

by kriswallsmith at 2012-02-22T12:41:15Z

Posting a PR under "code cleanup" that tinkers with a class that is inherently difficult to test for regression and has been tested by the community for over a year is… a bit hard to swallow, honestly. Everything is there for a reason and should not be tinkered with lightly.

For example, it's important that the `$env` variable default to `null` so the current environment is inherited by default — why change that?

I don't know what the `bypass_shell` option does, but @pierrejoye does… which is why he put it there.

I'm okay with adding an "enhanced Windows compatibility" switch, but I personally think is should be on the builder, not `Process`. The builder is where we manipulate the strings that compose the command line, not in `Process`. You're introducing manipulation of the command line to `Process`, which blurs the responsibilities of the two classes.

I'm also okay with the static factory method :)

---------------------------------------------------------------------------

by Seldaek at 2012-02-22T13:19:40Z

@kriswallsmith (Sorry about the confusing title) My concern is just that if you use Process then decide to "upgrade" to the ProcessBuilder, you suddenly have a change of behavior that might break stuff without you noticing. I just want to avoid this unexpected behavior.

As for the $env stuff, I added a couple tests now, and then expanded that ternary operator a bit.. It actually was broken before. It passed null if you had no env set, but even if you did not call `inheritEnvironmentVariables`. If you want to inherit by default - which I agree it should - then why was `inheritEnv = false` in the constructor? I changed it too and now there is hopefully less confusion.

Restored bypass_shell=true unless it's explicitly set to false.

---------------------------------------------------------------------------

by kriswallsmith at 2012-02-22T13:25:23Z

We should also add the PHPUnit `@backupGlobals enabled` annotation while we're in here.

---------------------------------------------------------------------------

by kriswallsmith at 2012-02-22T13:31:41Z

@Seldaek Looks better, thanks for the changes. If `enhanceWindowsCompatibility` is going to live on `Process` we should expose the switch on the builder as well. Speaking of `enhanceWindowsCompatibility`… is there a more descriptive name for that? What exactly does that do, any why would anyone want to switch it off? The name is so vague we might as well call it `enableMagicalWindowsFix()`.

---------------------------------------------------------------------------

by pierrejoye at 2012-02-22T13:33:55Z

I really do not think that having a flag to enable portability is a
good idea, at all.

I do not remember the context right now but a flag is definitively a
bad idea (you will need other on other platforms).

I will take a look again at this next week (end of), as I am still OOF.

On Wed, Feb 22, 2012 at 2:31 PM, Kris Wallsmith
<reply@reply.github.com>
wrote:
> @Seldaek Looks better, thanks for the changes. If `enhanceWindowsCompatibility` is going to live on `Process` we should expose the switch on the builder as well. Speaking of `enhanceWindowsCompatibility`… is there a more descriptive name for that? What exactly does that do, any why would anyone want to switch it off? The name is so vague we might as well call it `enableMagicalWindowsFix()`.
>
> ---
> Reply to this email directly or view it on GitHub:
> https://github.com/symfony/symfony/pull/3381#issuecomment-4103882

--
Pierre

@pierrejoye | http://blog.thepimp.net | http://www.libgd.org

---------------------------------------------------------------------------

by Seldaek at 2012-02-22T13:42:56Z

backupGlobals seems to be enabled by default.

As for the enhanceWindowsCompatibility, yes. It's a poor name, but no I don't have any idea for a better one, because nobody could explain me what it does. People just scream that it's necessary.

@pierrejoye: If you or anyone can conclusively confirm that this stuff is always better, then we always do it. If it's not then it must be optional, and if it's not a flag then what? The point of the component is to abstract the proc_open horrors. If people have to know about windows quirks with regard to proc_open to use it, then it's not a very useful abstraction.

Additionally, if it *is* always better to use those portability fixes, then why isn't php doing it itself?

---------------------------------------------------------------------------

by pierrejoye at 2012-02-22T13:47:02Z

On Wed, Feb 22, 2012 at 2:42 PM, Jordi Boggiano
<reply@reply.github.com>
wrote:
> backupGlobals seems to be enabled by default.
>
> As for the enhanceWindowsCompatibility, yes. It's a poor name, but no I don't have any idea for a better one, because nobody could explain me what it does. People just scream that it's necessary.

> @pierrejoye: If you or anyone can conclusively confirm that this stuff is always better, then we always do it. If it's not then it must be optional, and if it's not a flag then what? The point of the component is to abstract the proc_open horrors. If people have to know about windows quirks with regard to proc_open to use it, then it's not a very useful abstraction.

proc_open has many quirks, not only on windows. That's why it should
work and detect what is needed, that may force you to slightly change
the split between builder and process.

> Additionally, if it *is* always better to use those portability fixes, then why isn't php doing it itself?

BC, like it or not (I do not).

However we cannot change past versions, so today code has to deal it
with it anyway.

I will take a look at what you are trying to fix here next week, if
you have any other requests regarding proc_open&portability, let me
know :)

Cheers,
--
Pierre

@pierrejoye | http://blog.thepimp.net | http://www.libgd.org

---------------------------------------------------------------------------

by Seldaek at 2012-02-22T13:54:38Z

Ok so it sounds to me like the current code is correct, it tries to fix
things as best as we know how to by default, and just gives you a way to
disable things in the odd case we messed up and some of those fixes are
harmful to some use cases.

---------------------------------------------------------------------------

by fabpot at 2012-03-02T21:38:18Z

@Seldaek @kriswallsmith is it ready for merge now?

---------------------------------------------------------------------------

by kriswallsmith at 2012-03-02T21:42:22Z

I'm still not happy with the name of `enhanceWindowsCompatibility`. We need to be more specific about what that does. It sounds like a marketing term right now ;)

---------------------------------------------------------------------------

by Seldaek at 2012-03-05T13:44:56Z

Agreed, but I can't think of anything better. It is indeed esoteric magic fixes that should work better but nobody seems 100% sure about it, so I think it's fairly accurate.
2012-03-05 15:17:37 +01:00
stealth35
caa44aefc1 Only work with the cli sapi 2012-03-02 16:42:35 +01:00
stealth35
e2fc3cde90 [Process] PHP_BINARY return the current process 2012-03-02 14:33:12 +01:00
Jordi Boggiano
bafcaafbe6 Removed version field 2012-02-27 09:59:20 +01:00
Jordi Boggiano
f9d9dc7ce9 Add branch-alias for composer 2012-02-25 03:26:20 +01:00
Fabien Potencier
f373085928 merged 2.0 2012-02-22 18:59:56 +01:00
Jordi Boggiano
7444fdf234 Feedback fixes 2012-02-22 14:38:43 +01:00
Jordi Boggiano
54cfd4410c Restore bypass_shell by default with windows compat 2012-02-22 14:19:04 +01:00
Jordi Boggiano
38df47a459 Fix env inheritance and added tests 2012-02-22 14:10:14 +01:00
Jordi Boggiano
f555c62998 [Process] Add windows compatibility to Process component 2012-02-22 11:58:26 +01:00
marc.weistroff
89868f7901 Updated LICENSE files copyright 2012-02-22 10:10:37 +01:00
Jordi Boggiano
c4e8ff75f5 [Process] Always escape commands properly and remove windows-specific handling 2012-02-16 16:52:23 +01:00
Jordi Boggiano
9e237f6345 [Process] Add ProcessBuilder::create() for more fluidity in the interface until 5.4 2012-02-16 16:38:35 +01:00
Jordi Boggiano
4882777c4e [Process] Code clean up 2012-02-16 16:37:52 +01:00
Fabien Potencier
b80951c21c [Process] added Process::getExitCodeText() (closes #2818) 2012-02-13 07:32:01 +01:00
Fabien Potencier
1bef14a02a [Process] fixed usage of constants in closure 2012-02-06 07:00:39 +01:00
Fabien Potencier
c2e8a0a24a [Process] added some constant to avoid harcoded strings 2012-02-05 12:11:37 +01:00
Fabien Potencier
8ce034fae0 Revert "merged 2.0"
This reverts commit 7000e944fd, reversing
changes made to 9d9013d662.
2012-01-08 20:43:02 +01:00
Fabien Potencier
7000e944fd merged 2.0 2012-01-05 14:54:04 +01:00
Fabien Potencier
208c2e468c removed the version attribute in all composer.json files 2012-01-05 14:51:20 +01:00
Fabien Potencier
5d6a7d35b0 merged 2.0 2011-12-18 14:48:17 +01:00
Fabien Potencier
997f354d53 tweaked the README files 2011-12-18 14:22:28 +01:00
Fabien Potencier
0f2caf1106 merged branch lsmith77/component_readmes (PR #2561)
Commits
-------

1e370d7 typo fix
93d8d44 added some more infos about Config
27efd59 added READMEs for the bridges
34fc866 cosmetic tweaks
d6af3f1 fixed README for Console
6a72b8c added basic README files for all components

Discussion
----------

added basic README files for all components and bridges

heavily based on http://fabien.potencier.org/article/49/what-is-symfony2 and the official Symfony2 documentation

---------------------------------------------------------------------------

by jmikola at 2011/11/03 13:36:07 -0700

Great work. For syntax highlighting on the PHP snippets, you could add "php" after the three backticks.

---------------------------------------------------------------------------

by lsmith77 at 2011/11/03 13:41:29 -0700

done

---------------------------------------------------------------------------

by stealth35 at 2011/11/03 13:49:31 -0700

Nice job, but you also need to add `<?php`

ex :

``` php
<?php
use Symfony\Component\DomCrawler\Crawler;

$crawler = new Crawler();
$crawler->addContent('<html><body><p>Hello World!</p></body></html>');

print $crawler->filter('body > p')->text();
```

---------------------------------------------------------------------------

by lsmith77 at 2011/11/03 13:56:57 -0700

done

---------------------------------------------------------------------------

by ericclemmons at 2011/11/03 19:57:57 -0700

@lsmith77 Well done!  This makes consumption of individual components that much easier, *especially* now that `composer.json` files have been added.

---------------------------------------------------------------------------

by lsmith77 at 2011/11/04 01:18:23 -0700

ok .. fixed the issues you mentioned @fabpot

---------------------------------------------------------------------------

by lsmith77 at 2011/11/11 15:00:27 -0800

@fabpot anything else left? seems like an easy merge .. and imho there is considerable benefit for our efforts to spread the word about the components with this PR merged.

---------------------------------------------------------------------------

by drak at 2011/11/11 18:54:13 -0800

You know, it might be a nice idea to put a link to the documentation for each component if there is some at symfony.com

---------------------------------------------------------------------------

by lsmith77 at 2011/11/12 00:59:14 -0800

i did that in some. but i might have missed a few places.
On 12.11.2011, at 03:54, Drak <reply@reply.github.com> wrote:

> You know, it might be a nice idea to put a link to the documentation for each component if there is some at symfony.com
>
> ---
> Reply to this email directly or view it on GitHub:
> https://github.com/symfony/symfony/pull/2561#issuecomment-2715762

---------------------------------------------------------------------------

by breerly at 2011/11/21 10:28:36 -0800

Pretty excited with this.

---------------------------------------------------------------------------

by dbu at 2011/11/24 00:02:50 -0800

is there anything we can help with to make this ready to be merged?

---------------------------------------------------------------------------

by lsmith77 at 2011/12/18 02:39:23 -0800

@fabpot: seriously .. if you are not going to deliver something "better" and don't provide a reason what is wrong with this .. then its beyond frustrating. i obviously do not claim that these README's are perfect (and certainly still no replacement for proper documentation), but I do claim that in their current form they are a radical step forward to potential users of the Symfony2 components.
2011-12-18 12:42:02 +01:00
Kris Wallsmith
d7712a3e2a [Process] added ProcessBuilder
This class was copied from Assetic.
2011-12-16 11:17:43 -08:00
Fabien Potencier
4730f4303b merged 2.0 2011-12-08 15:36:57 +01:00
Fabien Potencier
acbbe8ac7f [Process] introduced usage of PHP_BINARY (available as of PHP 5.4) 2011-12-07 19:32:30 +01:00
Fabien Potencier
d1ae6c7cb6 bumped Symfony version in composer.json files to 2.0.7 2011-11-17 06:58:47 +01:00
Lukas Kahwe Smith
6a72b8c6b9 added basic README files for all components
heavily inspired by http://fabien.potencier.org/article/49/what-is-symfony2 and the official Symfony2 documentation
2011-11-03 21:11:40 +01:00
Fabien Potencier
f8f622b39c bumped Symfony version to 2.0.6-DEV 2011-11-02 14:18:45 +01:00
Fabien Potencier
7f21a5e979 bumped Symfony version in composer.json files to 2.0.5 2011-11-02 12:42:41 +01:00
Fabien Potencier
8a62e3249f merged 2.0 2011-11-01 12:32:44 +01:00
Fabien Potencier
d7a5351aaa updated composer.json files to contain information about autoloading and target dirs 2011-11-01 12:30:24 +01:00
Fabien Potencier
245ff6d7a8 updated composer.json for 2.1 2011-09-29 17:40:43 +02:00
Igor Wiedler
9ade639bb4 [composer] add composer.json 2011-09-27 00:55:43 +02:00
Johannes M. Schmitt
9fb15c7cb2 [Process] workaround a faulty implementation of is_executable on Windows 2011-09-15 19:42:58 +02:00
Fabien Potencier
5eaf884cda [Process] fixed CS 2011-07-12 08:16:22 +02:00
Osman Üngür
95ca258a42 Fixed problems with running processes returns wrong exitcode (-1) on Linux. 2011-07-11 09:37:49 -07:00
Fabien Potencier
8cba4903d8 [Process] removed workaround as it seems to not work anymore after the recent changes 2011-07-08 09:14:48 +02:00
Fabien Potencier
f322a4a99d fixed CS 2011-06-23 13:39:36 +02:00
Fabien Potencier
100a8dc105 [Console] fixed Process exit code
To get the proper status for the Process, it needs to be terminated.
Sometimes, this is not the case when we call proc_get_status, so this
patch waits up to 1 sec to get the right information.
2011-06-23 11:47:31 +02:00
lenar
bda412932b Make run() fully non-blocking and fix potential other problems 2011-06-22 16:16:44 +03:00
Florin Patan
e718474873 fixed CS and unsude variable (PR #1319) 2011-06-14 14:05:40 -04:00
Florin Patan
b552354414 Executable Finder will now try to match if a file is already in the open_basedir list before searching it thru that list 2011-06-14 13:36:01 -04:00
Florin Patan
06f74f8a39 Fix problem with searching files while the open_basedir is in use 2011-05-23 12:54:22 +00:00
Pascal Borreli
7f089c0b05 [Process] Fixed namespace typo and windows test 2011-05-22 14:57:37 +00:00
Costin Bereveanu
5841f05f04 Fix process creation under Win7 Ultimate (app/console assetic:dump ./web):
- Set the default $env to NULL, thus inheriting the system's environment settings (array() is no good).
- Set bypass_shell to false, otherwise process creation will fail (I don't know if this should happen only on Win7)
2011-05-19 07:52:45 -07:00
Adrian Rudnik
0c089d8fe3 [Process] Workaround for windows based stderr bug 2011-05-14 17:25:55 +02:00
Adrian Rudnik
90f5420ada [Process] Wrong descriptor mode for stderr 2011-05-13 03:08:55 +02:00
Adrian Rudnik
24216b4ee3 Fixed wrong descriptor mode for stderr 2011-05-13 02:22:14 +02:00
Kris Wallsmith
5dc1a9bb58 [Process] added optional argument for default executable 2011-04-26 07:45:16 -07:00
Fabien Potencier
e2741cefc4 [Process] changed ExecutableFinder to return false instead of throwing an exception when the executable is not found
I've made the change as the executable goal is to find the executable. The fact that it does not find it is
part of the contract and it is not exceptional.
2011-04-26 15:18:24 +02:00
Fabien Potencier
f12146d0ec Merge remote branch 'schmittjoh/process'
* schmittjoh/process:
  [Process] use component exception
  [Process][Assetic] refactored some code to allow for better executable defaults
2011-04-26 15:01:29 +02:00
Fabien Potencier
41a1a75b92 [Process] made default options overridable 2011-04-12 11:04:35 +02:00
Pascal Borreli
46b4098907 [Process][Windows] Don't use cmd for launching process (fixing Sismo git.exe calling) 2011-04-09 17:31:26 +00:00
Johannes M. Schmitt
8132102237 [Process] use component exception 2011-04-08 14:27:03 +02:00
Johannes M. Schmitt
34beec2161 [Process][Assetic] refactored some code to allow for better executable defaults 2011-04-08 12:20:27 +02:00
Fabien Potencier
1d4024c654 [Process] added some missing accessors/mutators 2011-04-02 10:08:01 +02:00
Fabien Potencier
54655104ca [Process] changed run() behavior to always populate getOutput() and getErrorOutput() 2011-04-01 18:08:54 +02:00
Pascal Borreli
ef447dc487 [Process] Better guess of php bin executable path
If PHP_PATH is not defined (default)
PHP_BINDIR is used to guess exe, but on windows this constant seems to be hardcoded and doesn't point to the good folder
So before to throw an error we check if PEAR is installed, most of the case it is, and it will have good php bin path for sure.
2011-03-27 21:11:22 +00:00
Pascal Borreli
1e69076d7a [Process] Removed useless getenv 2011-03-27 21:11:20 +00:00
Fabien Potencier
7280da8af2 [Process] fixed previous commit 2011-03-24 09:15:33 +01:00
Fabien Potencier
b2a8e35900 [Process] tagged the guaranteed BC API 2011-03-24 09:13:58 +01:00
Fabien Potencier
639d93cbbf [Process] moved protected to private 2011-03-24 09:10:42 +01:00
Fabien Potencier
8c423edfef replaced symfony-project.org by symfony.com 2011-03-06 12:40:06 +01:00
Fabien Potencier
f54cedfe5e added LICENSE files for the subtree repositories 2011-02-22 18:58:15 +01:00
Dominique Bongiraud
64fb94c725 normalized license messages in PHP files 2011-01-18 08:07:46 +01:00
Jordi Boggiano
094d428e68 CS: Unified strict equality comparisons, put var on the right side 2010-12-21 08:51:21 +01:00
Fabien Potencier
d70ce5b9aa [Process] tweaked php doc and fixed PhpProcess::run() return value 2010-12-20 10:30:59 +01:00
Kris Wallsmith
f79e23ffb5 Removed all those spaces after @author that were bothering me so… 2010-10-18 16:55:41 +02:00
Thomas
66ddacf2e5 [Process] remove fork references as proc_* functions start a command from an independant process, does not copy the parent memory space like pcntl_* function 2010-09-20 11:05:32 +02:00
Fabien Potencier
7734f44bc5 [Process] added a Process:isSucessful() method 2010-09-16 08:55:44 +02:00
Kris Wallsmith
1aefe7a762 [Process] made cwd argument optional 2010-09-09 06:58:28 +02:00
Fabien Potencier
bf82cf42dd renamed Symfony\Components to Symfony\Component 2010-08-20 23:09:55 +02:00