16 Oct '19
Package managers: update
or upgrade
?
Quick quiz: for the following language/system package managers, what’s the name of the subcommand to update1 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 away2 |
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)?
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 ↩