Quick quiz: for the following language/system package managers, what’s the name of the subcommand to update[1] your project/system to the latest version of one (or more) of your project’s dependencies?
| package manager | language/system |
|---|---|
bundle | Ruby |
pip | Python |
poetry | Python |
pipenv | Python |
npm | javascript |
yarn | javascript |
brew | macOS |
apt-get | Debian |
cargo | Rust |
stack | Haskell |
lein | Clojure |
dep | Go |
cpan | Perl |
mix | Elixir |
| package manager | language/system | (sub)command name |
|---|---|---|
bundle | Ruby | upgrade |
pip | Python | go away[2] |
poetry | Python | update |
pipenv | Python | update |
npm | javascript | update or upgrade |
yarn | javascript | upgrade |
brew | macOS | upgrade |
apt-get | Debian | upgrade |
cargo | Rust | update |
stack | Haskell | update |
lein | Clojure | ancient upgrade |
dep | Go | ensure -update |
cpan | Perl | upgrade |
mix | Elixir | deps.update |
For bonus points, which of them also recognise the “other” subcommand but it does something different? For even more bonus points, when does that “other” option do something unwanted/destructive/irreversible (assuming that all you want to do is update that dependency to the latest version)?
TIP
Look, I’m not at all saying that you should just go and blindly update/upgrade all of the things—that’s clearly a bad idea. But it still takes me a non-zero amount of time as I switch between languages/tools to sit and think “ok, for this project do I want to update or upgrade”? And that makes me sad.
If there’s a deep, principled (or even a shallow, pragmatic) reason to pick one or the other then we should observe it, and do it consistently. Even if there’s not, we should toss a coin and be consistent anyway.
If any of the above commands are incorrect, or if there’s a better way, then let me know.
or, y’know, upgrade ↩︎