-
Notifications
You must be signed in to change notification settings - Fork 710
Redesign 'cabal path' command to account for projects (backport #9583) #9893
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Cherry-pick of 4a8a7c5 has failed:
To fix up this pull request, you can check it out locally. See documentation: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/checking-out-pull-requests-locally |
@fendor: any idea which PRs we are missing to make it easier to rebase? I assume the original |
I don't think there is any big PR needed for this, I suspect there is a minor conflict that someone added a line close to where I deleted the path commands. |
Is it ok if I amend the PR? Or will mergify complain? |
Oh, no, it would be great if you'd amend it and mergify would be very happy too. :D |
e796d66
to
b5ef324
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@fendor: thanks a lot, the conflicts seem to be gone. Let me approve and set the label right now so that no further CI is triggered.
Doh, the moment I said that, tests failed. May this be related to the conflict (the test is to do with Setup, I think)? |
Hm, I don't really know what is going wrong here. I don't think that test case should be affected in any way. Perhaps one of the changes in the test output normaliser? 🤔 Perhaps we reused, by accident, a build directory because I amended the commit instead of pushing a new one? |
Huh, must have been a fluke and an anonymous benefactor guessed that and restarted the CI and it seems to be going strong. |
Oh yeah that was me, years of experience with HLS's CI taught me: When CI fails, restart until it is green 👼 however, CI might still be failing, the job that failed last time hasn't succeeded yet. |
* Redesign 'cabal path' command to account for projects Previously, `cabal path` was only able to query from the global configuration file, e.g., `~/.cabal/config` or the XDG equivalent. Adding support for cabal project is a huge boost to usability. We take the foundations and turn them into `cabal v2-path` which takes project configuration, such as `cabal.project` into account. Note, the command is still named `cabal path`, but for the sake of disambiguation, we refer to this new iteration of the command as `cabal v2-path`. In addition, we add support for multiple output formats, such as key-value pairs and json. The key-value pair output prints a line for each queried key and its respective value: key1: value2 key2: value2 If only a single key is queried, we print only the value, for example: value1 The json output format is versioned by the cabal-install version which is part of the json object. Thus, all result objects contain at least the key "cabal-install-version". We expand the `cabal v2-path` to also produce information of the compiler that is going to be used in a `cabal build` or `cabal repl` invocation. To do that, we rebuild the install plan and query for the configured compiler program. This is helpful for downstream tools, such as HLS, to figure out the GHC version required to compile a project with. We also add an exhaustive test suite for 'cabal path' cmd We test that each query honours cabal.project files, cli parameters, and is composable with the other query flags. We extend the test output normalisers for ghc compiler location and cabal-install version, as the 'cabal path' command outputs the exact ghc and ghc-pkg location. In addition, the json output format is versioned on the cabal-install version. Currently, we query the cabal-install version on each test normalisation run. This might be unnecessary expensive, and could be avoided by introducing a 'cabalProgram' that specifies how the program version can be found. This way, we can cache the version query. Add '--cache-home' flag thats shows the cabal's cache root Rename '--cache-dir' to the more correct '--remote-repo-dir'. * Update 'cabal path' documentation * Add changelog.d entry --------- Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> (cherry picked from commit 4a8a7c5)
b5ef324
to
354224c
Compare
Audacity paid off. :D @fendor, thank you again. |
Previously,
cabal path
was only able to query from the global configuration file, e.g.,~/.cabal/config
or the XDG equivalent. This was deemed not useful enough to warrant a new cabal command, which is a user facing change.We take the foundations and turn them into
cabal v2-path
which takes project configuration, such ascabal.project
into account. Note, the command is still namedcabal path
, but for the sake of disambiguation, we refer to this new iteration of the command ascabal v2-path
.In addition, we add support for multiple output formats, such as key-value pairs and json. Specifying the output format is currently mandatory. This allows us to postpone the decision of the default output format and encourages users to explicitly specify the output format in the future, too.
The json output format is versioned by the cabal-install version, which is part of the json object.
Thus, all result objects contain at least the key "cabal-install-version".
The key-value pair output prints a line for each queried key and its respective value:
If only a single key is queried, we print only the value, for example:
We expand the
cabal v2-path
to also produce information of the compiler that is going to be used in acabal build
orcabal repl
invocation. To do that, we rebuild the install plan and query for the configured compiler program.This is helpful for downstream tools, such as HLS, to figure out the GHC version required to compile a project with.
QA Notes
The name of the command is
cabal path
. It should give the user the option to query certain paths cabal will be using.The following things might be of interest to validate
cabal path --help
informs the user of its purpose and stability promises.cabal path
should succeed. Order should not matter and the output does not honour the order of flags.output-format
, did the error message when you forget to supply this flag help you figure out how to solve the issue?-z
?--cabal-config
locations?cabal path
must never produce any caching artefacts, i.e. no folder indist-newstyle
is ever modified or created. Neither isdist-newstyle
.output-format
s adequately explained or self-explanatory?Template Α: This PR modifies
cabal
behaviourInclude the following checklist in your PR:
This is an automatic backport of pull request #9583 done by [Mergify](https://mergify.com).