phpro / grumphp

A PHP code-quality tool
MIT License
4.11k stars 429 forks source link

Grumphp running without `.git` folder? #1104

Closed drupol closed 9 months ago

drupol commented 11 months ago

Hi there !

Context: I'm working on seeing how I could use nix to ship PHP applications that would get checked by Grumphp. Since Nix remove the .git folder by default. I'm unable to use Grumphp as it is.

So I'm opening this issue to see if it would be possible to use Grumphp just like a simple task runner, without git.

Thanks!

veewee commented 11 months ago

Not sure what you are trying to achieve here. Can you elaborate in more details?

You can run grumphp without .git if you pass in the list of files you want to check through STDIN (as a list of files) or if you pass in a git diff.

How would you want to pass the files instead if you don't have a .git?

drupol commented 10 months ago

mmhm sorry to hear read that.

Essentially, the initial request involves using Grumphp as a task runner when the .git directory is not provided. In this scenario, it would execute the commands without requiring a .git directory to be present.

Consider the phpcsfixer task as an example. When the .git directory is available, Grumphp will supply the phpcsfixer task with a list of modified files.

However, when the .git directory is not available, no specific files will be passed to the task. In this case, the phpcsfixer task will continue to work, and will potentially scan the src directory (or other designated directories in its default config), and thus behaving in a more generalized manner.

This flexibility allows for the continued use of the task runner even in environments where the .git directory might be absent or inaccessible.

veewee commented 10 months ago

As you know, everything is possible and up for discussion. But to be fair: this is how the internal system was designed from day one and always has worked. You are simply trying to achieve things for which this tool is not designed.

The big problem I can see here by not passing any files is: If you don't pass any files, a lot of tasks will skip because there are e.g. no PHP files provided. This is the logic that makes GrumPHP only run the tasks that are needed based on the git diff in a pre-commit.

A possible solution would be to read all the files of the project's directory. However, you most likely don't want to include things like vendor, node_modules, application caches, .... So that means you'll need ways to include or exclude folders, files, ... That would probably be a lot of work - just to make it work outside of .git context. That is basically why it works the way it works nowadays: git already offers the project included / excluded files and the list of all known files.

I'm not sure if this feature could make it to grumphp's core and am most surely not going to create it myself at this moment :)

drupol commented 9 months ago

Oops, looks like I totally forgot about this, sorry!!!!

Thanks for explanation, I've finally found a way to use it as it should be used :)