Skip to content
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

Detect deps that have already been invoked #346

Merged
merged 5 commits into from Jan 16, 2022

Conversation

carolynvs
Copy link
Contributor

Detect when a dependency was accidentally already invoked

mg.Deps(MyDep())

Normally this causes a nil pointer panic when we invoke the function

Error: runtime error: invalid memory address or nil pointer dereference

Now it will print the following as soon as its detected

Error: A dependency of the current target was defined improperly, with parenthesis. Dependencies should be defined as mg.Deps(MyDep), not mg.Deps(MyDep())

I have applied this change to checkfn so that it applies to serial and parallel deps.

Fixes #332

carolynvs and others added 2 commits May 7, 2021 10:08
Detect when a dependency was accidentally already invoked

mg.Deps(MyDep())

Normally this causes a nil pointer panic when we invoke the function

Error: runtime error: invalid memory address or nil pointer dereference

Now it will print the following as soon as its detected

Error: A dependency of the current target was defined improperly, with parenthesis. Dependencies should be defined as mg.Deps(MyDep), not mg.Deps(MyDep())

I have applied this change to checkfn so that it applies to serial and
parallel deps.

Signed-off-by: Carolyn Van Slyck <me@carolynvanslyck.com>
arschles
arschles previously approved these changes Oct 1, 2021
Copy link
Contributor

@arschles arschles left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. my only comment probably doesn't need to be addressed in this PR (at least IMO)

mg/deps.go Outdated Show resolved Hide resolved
@sheldonhull
Copy link

I ran into this today, thinking it was an issue with my logging.
Once I changed like below it went away, so thanks for this tip.

mg.Deps(
Js{}.Build(),
BuildAll(),
)
mg.Deps(
Js{}.Build,
BuildAll,
)

I'd like to see this merge get moved forward to support better error output.

@carolynvs
Copy link
Contributor Author

@natefinch Let me know if you'd prefer to see this fixed in another way. I'm happy to change it up if needed.

@natefinch
Copy link
Member

I think this is good but I think the error message needs to change a bit. It could be confusing if you pass in just a nil value of some sort.

I think something more like
fmt.Sprintf("mg.Deps expects a function, but got a nil value of type %T", f)
would work in the more general case.

The new mg.F function is the root of the nil-pointer error that can happen
when someone accidentally calls mg.Deps(TargetA()). I have fixed the check
for whether a function was passed so that it won't panic and included
the usage for mg.F in the error message.

I then added a similar check, is the target a function, to
Deps/SerialDeps/CxtSerialDeps functions so that we can give a better
error message when it's passed a non-function. The error message
otherwise will reference mg.F which I don't think will help point people
to the real problem, which is how they called mg.Deps/SerialDeps.

Signed-off-by: Carolyn Van Slyck <me@carolynvanslyck.com>
@carolynvs
Copy link
Contributor Author

Thanks for the feedback! 🙇‍♀️

After merging with master, I took another look and found a better place to prevent the nil-pointer error. It can occur with mg.F and mg.Deps/SerialDeps.

I incorporated your suggestion for the error message returned by mg.Deps. It doesn't assume that a nil must have come from an invoked function (though that's pretty common). Maybe they passed mg.Deps(3) instead and this will handle that better too.

non-function used as a target dependency: <nil>. The mg.Deps, mg.SerialDeps and mg.CtxDeps functions accept function names, such as mg.Deps(TargetA, TargetB)

When someone calls mg.F directly and passes in an invoked function, this is the error message:

non-function passed to mg.F: <nil>. The mg.F function accept function names, such as mg.F(TargetA, "arg1", "arg2")

Copy link
Member

@natefinch natefinch left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks!

@natefinch natefinch merged commit c07f313 into magefile:master Jan 16, 2022
scottames pushed a commit to scottames/cmder that referenced this pull request Apr 22, 2023
….0 (#6)

[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [github.com/magefile/mage](https://togithub.com/magefile/mage) |
require | minor | `v1.11.0` -> `v1.14.0` |

---

### Release Notes

<details>
<summary>magefile/mage</summary>

###
[`v1.14.0`](https://togithub.com/magefile/mage/releases/tag/v1.14.0): -
Faster Than Ever

[Compare
Source](https://togithub.com/magefile/mage/compare/v1.13.0...v1.14.0)

#### What's Changed

- give props to netlify on the main page by
[@&#8203;natefinch](https://togithub.com/natefinch) in
[magefile/mage#410
- Update site to build with newer hugo by
[@&#8203;perrito666](https://togithub.com/perrito666) in
[magefile/mage#411
- bring docs for use of directives up to date by
[@&#8203;efd6](https://togithub.com/efd6) in
[magefile/mage#407
- add blog post about v1.13 by
[@&#8203;natefinch](https://togithub.com/natefinch) in
[magefile/mage#412
- fix author links by
[@&#8203;natefinch](https://togithub.com/natefinch) in
[magefile/mage#413
- Add variadic support to mg.F by
[@&#8203;perj](https://togithub.com/perj) in
[magefile/mage#402
- feat: rename templated imports to avoid collisions by
[@&#8203;ladydascalie](https://togithub.com/ladydascalie) in
[magefile/mage#421
- Website: fixing typos by
[@&#8203;deining](https://togithub.com/deining) in
[magefile/mage#429
- refactor(listGoFiles): remove go list dependency by
[@&#8203;jaredallard](https://togithub.com/jaredallard) in
[magefile/mage#440
- doc: add MacPorts install info by
[@&#8203;herbygillot](https://togithub.com/herbygillot) in
[magefile/mage#419

#### New Contributors

- [@&#8203;efd6](https://togithub.com/efd6) made their first
contribution in
[magefile/mage#407
- [@&#8203;perj](https://togithub.com/perj) made their first
contribution in
[magefile/mage#402
- [@&#8203;ladydascalie](https://togithub.com/ladydascalie) made their
first contribution in
[magefile/mage#421
- [@&#8203;deining](https://togithub.com/deining) made their first
contribution in
[magefile/mage#429
- [@&#8203;jaredallard](https://togithub.com/jaredallard) made their
first contribution in
[magefile/mage#440
- [@&#8203;herbygillot](https://togithub.com/herbygillot) made their
first contribution in
[magefile/mage#419

**Full Changelog**:
magefile/mage@v1.13.0...v1.14.0

###
[`v1.13.0`](https://togithub.com/magefile/mage/releases/tag/v1.13.0): -
Magefiles Directory and more!

[Compare
Source](https://togithub.com/magefile/mage/compare/v1.12.1...v1.13.0)

#### What's Changed

- feat: allow mage:import alias to be defined for multiple imports by
[@&#8203;viktorvoltaire](https://togithub.com/viktorvoltaire) in
[magefile/mage#398
- chore: wrap log.Println in cmd with verbose check by
[@&#8203;viktorvoltaire](https://togithub.com/viktorvoltaire) in
[magefile/mage#399
- Detect deps that have already been invoked by
[@&#8203;carolynvs](https://togithub.com/carolynvs) in
[magefile/mage#346
- Replace godoc.org URLs by
[@&#8203;JamieEdge](https://togithub.com/JamieEdge) in
[magefile/mage#342
- Add magefiles directory support by
[@&#8203;perrito666](https://togithub.com/perrito666) in
[magefile/mage#405

#### New Contributors

- [@&#8203;viktorvoltaire](https://togithub.com/viktorvoltaire) made
their first contribution in
[magefile/mage#398
- [@&#8203;carolynvs](https://togithub.com/carolynvs) made their first
contribution in
[magefile/mage#346
- [@&#8203;JamieEdge](https://togithub.com/JamieEdge) made their first
contribution in
[magefile/mage#342
- [@&#8203;perrito666](https://togithub.com/perrito666) made their first
contribution in
[magefile/mage#405

**Full Changelog**:
magefile/mage@v1.12.1...v1.13.0

###
[`v1.12.1`](https://togithub.com/magefile/mage/releases/tag/v1.12.1): -
Second Verse, Same as the First

[Compare
Source](https://togithub.com/magefile/mage/compare/v1.12.0...v1.12.1)

This is a copy of v1.12.0 ... nothing has changed. However, there was an
initial v1.12.0 that was created accidentally, and then deleted, and
it's causing some go proxies to complain. So hopefully this will fix
that.

#### Changelog

- [`2f1ec40`](https://togithub.com/magefile/mage/commit/2f1ec40) ci:
migrate from travis to github action
([#&#8203;391](https://togithub.com/magefile/mage/issues/391))
- [`fe9f942`](https://togithub.com/magefile/mage/commit/fe9f942)
evidently goreleaseer has changed in the last 4 years :)
([#&#8203;394](https://togithub.com/magefile/mage/issues/394))
- [`fd5011e`](https://togithub.com/magefile/mage/commit/fd5011e) Fix the
rollback mechanism for tags during a release
([#&#8203;392](https://togithub.com/magefile/mage/issues/392))
- [`404c119`](https://togithub.com/magefile/mage/commit/404c119)
sh.run(): quoted strings before join
([#&#8203;306](https://togithub.com/magefile/mage/issues/306))
- [`0c5affe`](https://togithub.com/magefile/mage/commit/0c5affe) Add
asdf installation instructions to docs
([#&#8203;383](https://togithub.com/magefile/mage/issues/383))
- [`e84bbc1`](https://togithub.com/magefile/mage/commit/e84bbc1)
[#&#8203;288](https://togithub.com/magefile/mage/issues/288) add brew
and scoop install to docs
([#&#8203;376](https://togithub.com/magefile/mage/issues/376))
- [`80953f7`](https://togithub.com/magefile/mage/commit/80953f7)
[#&#8203;378](https://togithub.com/magefile/mage/issues/378) bump
travisci go16
([#&#8203;379](https://togithub.com/magefile/mage/issues/379))
- [`dd94424`](https://togithub.com/magefile/mage/commit/dd94424) Create
issue templates
([#&#8203;374](https://togithub.com/magefile/mage/issues/374))
- [`d9e2e41`](https://togithub.com/magefile/mage/commit/d9e2e41) fix:
deterministic compiled mainfile
([#&#8203;348](https://togithub.com/magefile/mage/issues/348))
- [`4cf3cfc`](https://togithub.com/magefile/mage/commit/4cf3cfc) make -h
work with imported targets
([#&#8203;335](https://togithub.com/magefile/mage/issues/335))
- [`de7ca6c`](https://togithub.com/magefile/mage/commit/de7ca6c) fix
test for go 1.16
([#&#8203;330](https://togithub.com/magefile/mage/issues/330))

###
[`v1.12.0`](https://togithub.com/magefile/mage/releases/tag/v1.12.0): -
Small Fixes

[Compare
Source](https://togithub.com/magefile/mage/compare/v1.11.0...v1.12.0)

This is our first release in a while, and nothing major is added, but
some small fixes have gone out, like making the mainfile deterministic
and making sure we can use -h with imported targets.

#### Changelog

- [`2f1ec40`](https://togithub.com/magefile/mage/commit/2f1ec40) ci:
migrate from travis to github action
([#&#8203;391](https://togithub.com/magefile/mage/issues/391))
- [`fe9f942`](https://togithub.com/magefile/mage/commit/fe9f942)
evidently goreleaseer has changed in the last 4 years :)
([#&#8203;394](https://togithub.com/magefile/mage/issues/394))
- [`fd5011e`](https://togithub.com/magefile/mage/commit/fd5011e) Fix the
rollback mechanism for tags during a release
([#&#8203;392](https://togithub.com/magefile/mage/issues/392))
- [`404c119`](https://togithub.com/magefile/mage/commit/404c119)
sh.run(): quoted strings before join
([#&#8203;306](https://togithub.com/magefile/mage/issues/306))
- [`0c5affe`](https://togithub.com/magefile/mage/commit/0c5affe) Add
asdf installation instructions to docs
([#&#8203;383](https://togithub.com/magefile/mage/issues/383))
- [`e84bbc1`](https://togithub.com/magefile/mage/commit/e84bbc1)
[#&#8203;288](https://togithub.com/magefile/mage/issues/288) add brew
and scoop install to docs
([#&#8203;376](https://togithub.com/magefile/mage/issues/376))
- [`80953f7`](https://togithub.com/magefile/mage/commit/80953f7)
[#&#8203;378](https://togithub.com/magefile/mage/issues/378) bump
travisci go16
([#&#8203;379](https://togithub.com/magefile/mage/issues/379))
- [`dd94424`](https://togithub.com/magefile/mage/commit/dd94424) Create
issue templates
([#&#8203;374](https://togithub.com/magefile/mage/issues/374))
- [`d9e2e41`](https://togithub.com/magefile/mage/commit/d9e2e41) fix:
deterministic compiled mainfile
([#&#8203;348](https://togithub.com/magefile/mage/issues/348))
- [`4cf3cfc`](https://togithub.com/magefile/mage/commit/4cf3cfc) make -h
work with imported targets
([#&#8203;335](https://togithub.com/magefile/mage/issues/335))
- [`de7ca6c`](https://togithub.com/magefile/mage/commit/de7ca6c) fix
test for go 1.16
([#&#8203;330](https://togithub.com/magefile/mage/issues/330))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://app.renovatebot.com/dashboard#github/scottames/cmder).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS41Ny4wIiwidXBkYXRlZEluVmVyIjoiMzUuNTcuMCJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Improve error reporting on mg.Deps() usage errors
4 participants