Dans l'écosystème Rust, l'une des principales préoccupations des développeurs de bibliothèques est de ne pas avoir de mises à jour de dernière minute sur leur package, de peur que la majorité des packages dépendants ne reçoivent les mises à jour de routage qui suivraient une mise à jour de rupture.
Il existe deux solutions générales à ce problème :
Le rétroportage à l'ancienne des mises à jour, de sorte que les personnes dépendantes de n'importe quelle version de l'API obtiennent toutes les mises à jour de routine. Cette solution peut facilement devenir un coût de maintenance énorme pour les développeurs de bibliothèques et n'est pas une pratique courante dans la communauté Rust pour le moment.
Aidez le propriétaire des packages dépendants à mettre à jour leurs versions de dépendances et à appliquer les modifications nécessaires, le cas échéant. Cette solution peut prendre beaucoup moins de temps et répartit la charge de travail tout au long de la chaîne de dépendance. Cela signifie également que seules les versions utilisées reçoivent les travaux de maintenance nécessaires, mais pas toutes les versions théoriquement possibles. Donc, en termes simples : vous payez pour ce que vous utilisez .
Sur cette base, je souhaite proposer d'ajouter de nouvelles fonctionnalités pour aider les propriétaires à maintenir leurs dépendances à jour. La plupart des fonctionnalités peuvent être exposées via la commande cargo update
.
Avertir sur les dépendances bloquées dans les anciennes versions. Ce serait un avertissement clair sur cargo update
. La fonctionnalité serait activée par défaut, mais il y aura une option pour la désactiver ; et il peut y avoir une version de Cargo comme période de transition, où l'option est désactivée par défaut, mais il y a un avis sur le changement à venir, s'il s'applique.
Commandes pour mettre à jour automatiquement certaines/toutes les versions de dépendances au dernier. Cette option mettrait à jour les manifestes pertinents pour utiliser une dernière version d'un ou plusieurs packages. Cela peut également être une option pour cargo update
, similaire à --precise
, mais au lieu de mettre à jour le fichier de verrouillage, il mettrait également à jour le manifeste avec la dernière version ou une version fournie par l'utilisateur.
Il s'agit d'un outil pour mettre à jour les fichiers de manifeste de fret. Actuellement, cargo update
ne fonctionne qu'avec le fichier Cargo Lock, il peut donc être judicieux d'avoir une sous-commande distincte pour les fonctionnalités de manipulation de manifeste. Mais puisqu'il s'agit d'une fonctionnalité de base, il est préférable d'avoir cette fonctionnalité dans Cargo proprement dit.
Mise à jour automatique des versions pour une build réussie. C'est quelque chose que nous pouvons viser à plus long terme, pour avoir des dépendances de mise à jour de fret, et en cas d'échec, diviser et trouver la version la plus récente qui ne casse pas les builds et/ou les tests. Le meilleur endroit pour cela peut être une commande de cargaison tierce et non la cargaison elle-même.
Qu'en penses-tu?
Je suis sûr qu'il existe de nombreux exemples où ceux-ci peuvent être utiles. En voici une qui m'a inspiré pour rédiger cette proposition : https://github.com/servo/unicode-bidi/issues/46#issuecomment -316778436
/cc @alexcrichton , @Manishearth , @anowell
Je pense que nous voudrions probablement décrire ce que font les autres gestionnaires de paquets ici, par exemple, npm, fil, bundler, rubygems, pip, etc. font-ils quelque chose comme ça? J'avais personnellement l'impression que ce genre de préoccupations était généralement confié à un service tiers.
Voici un résumé des fonctionnalités similaires de certains autres gestionnaires de packages.
NPM CLI a une sous-commande outdated
intégrée qui affiche l'état des packages auxquels leurs versions actuelles , souhaitées et les plus récentes ne correspondent pas.
Comme cargo update
, le npm update
jour la version actuelle en want , si nécessaire et possible.
Il semble que npm update
n'ait plus de fonctionnalités dans ce domaine. De plus, aucune autre sous-commande ne semble liée.
Réf : https://docs.npmjs.com/cli/outdated
(de https://github.com/npm/npm/blob/latest/doc/cli/npm-outdated.md )
Cette commande vérifiera le registre pour voir si des packages installés (ou spécifiques) sont actuellement obsolètes.
En sortie :
wanted
est la version maximale du package qui satisfait la plage semver spécifiée dans package.json
. S'il n'y a pas de plage de serveurs disponible (c'est-à-dire que vous utilisez npm outdated --global
, ou que le package n'est pas inclus dans package.json
), alors wanted
affiche la version actuellement installée.
latest
est la version du package la plus récente dans le registre. L'exécution de npm publish
sans configuration spéciale publiera le package avec une balise dist de latest
. Cela peut ou non être la version maximale du package, ou la version la plus récemment publiée du package, selon la façon dont le développeur du package gère le dernier dist-tag(1).
location
est l'endroit où se trouve le package dans l'arborescence des dépendances. Notez que npm outdated
défaut une profondeur de 0, donc à moins que vous ne l'ignoriez, vous ne verrez toujours que les dépendances de niveau supérieur qui sont obsolètes.
package type
(lors de l'utilisation de --long
/ -l
) vous indique si ce package est un dependency
ou un devDependency
. Les forfaits non inclus dans package.json
sont toujours marqués dependencies
.
Modifiez package.json
et ajoutez "underscore": "1.7"
à la liste des dépendances.
$ npm outdated
Package Current Wanted Latest Location
underscore MISSING 1.7.0 1.8.3 underscore
$ npm install
[email protected] node_modules/underscore
$ npm outdated
Package Current Wanted Latest Location
underscore 1.7.0 1.7.0 1.8.3 underscore
Yarn CLI a une sous-commande outdated
intégrée pour "vérifier les dépendances de package obsolètes".
Réf : https://yarnpkg.com/lang/en/docs/cli/outdated/
Répertorie les informations de version pour toutes les dépendances de package. Ces informations incluent la version actuellement installée, la version souhaitée basée sur semver et la dernière version disponible.
Par exemple, supposons que votre package.json a les dépendances suivantes répertoriées :
"dependencies": {
"lodash": "4.15.0",
"underscore": "~1.6.0"
}
La commande exécutée devrait ressembler à ceci :
yarn outdated
Package Current Wanted Latest
lodash 4.15.0 4.15.0 4.16.4
underscore 1.6.0 1.6.0 1.8.3
✨ Done in 0.72s.
Gems CLI a une sous-commande outdated
intégrée pour « afficher toutes les gemmes qui nécessitent des mises à jour ».
Réf : http://guides.rubygems.org/command-reference/#gem-outdated
(À partir de la réf.)
La commande obsolète répertorie les gemmes que vous souhaiterez peut-être mettre à niveau vers une version plus récente.
Vous pouvez vérifier les incompatibilités de dépendance à l'aide de la commande de dépendance et mettre à jour les gems avec les commandes de mise à jour ou d'installation.
Bundler CLI a une sous-commande outdated
intégrée pour « lister les gems installées avec des versions plus récentes disponibles ».
Réf : https://bundler.io/v1.11/bundle_outdated.html
(À partir de la réf.)
Obsolète répertorie les noms et les versions des gems qui ont une version plus récente disponible dans la source donnée. L'appel obsolète avec [GEM [GEM]]
ne vérifiera que les versions les plus récentes des gemmes données. Par défaut, les gemmes d'avant-première disponibles seront ignorées.
La sous-commande list
PIP CLI a une option --outdated
, pour "lister les packages obsolètes", et une option --uptodate
pour "lister les packages à jour".
Réf : https://pip.pypa.io/en/stable/reference/pip_list/
Liste des packages installés.
$ pip list
docutils (0.10)
Jinja2 (2.7.2)
MarkupSafe (0.18)
Pygments (1.6)
Sphinx (1.2.1)
Répertoriez les packages obsolètes (hors modifiables) et la dernière version disponible.
```
Liste de pip $ --obsolète
docutils (Actuel : 0,10 Dernier : 0,11)
Sphinx (Actuel : 1.2.1 Dernier : 1.2.2)
En résumé:
Les gestionnaires de packages JS et Ruby ont une sous-commande outdated
intégrée pour répertorier les packages "pas en règle", ce qui signifie que leur version installée n'est pas ce qui est demandé, ou ce qui est demandé n'est pas la dernière version en amont ( pas nécessairement la plus grande, mais la dernière version stable).
Python PIP a des fonctionnalités similaires via la sous-commande intégrée list
, ce qui le rend plus générique, mais plus difficile à découvrir et à utiliser pour les utilisateurs débutants/moyens.
On dirait que toutes ces commandes sont en lecture seule et n'ont aucune fonctionnalité intégrée pour mettre à jour les fichiers manifestes vers la dernière version.
Je n'ai vu aucun signe de fonctionnalité de type avertissement concernant les packages obsolètes dans d'autres commandes.
Ainsi, à mon humble avis, nous pouvons planifier ces fonctionnalités, applicables uniquement aux dépendances directes d'un package/espace de travail.
a) Une commande outdated
intégrée pour aider les développeurs à trouver les dépendances directes obsolètes. Ce serait la lecture seule et la sortie lisible par l'homme sera similaire aux gestionnaires de packages JS/Ruby.
b) Développez (a) pour prendre en charge les espaces de travail.
c) Ajoutez des options à outdated
pour le rendre en lecture-écriture, en mettant à jour les numéros de version d'une/plusieurs/toutes les dépendances obsolètes. Ceci, je suppose, serait la seule/première commande de fret à écrire dans le manifeste, ce qui nécessiterait donc plus de travail de conception et de mise en œuvre.
d) Développez (c) pour prendre également en charge les espaces de travail.
Ces deux éléments peuvent suffire aux scripts shell et aux commandes de fret tierces pour créer facilement des automatisations pour des mises à niveau stables, ce qui signifie qu'ils exécutent les tests avec des mises à niveau uniques et reviennent s'il y a des erreurs de compilation ou de test.
Qu'en penses-tu?
https://crates.io/crates/cargo-outdated fonctionne bien aujourd'hui
Malheureusement, le package cargo-outdated
ne prend pas encore en charge les espaces de travail.
En outre, une question porterait sur la proposition initiale d'ajouter un avertissement cargo update
sur l'existence de packages obsolètes. J'aimerais savoir ce que tout le monde pense de ça.
Je serais totalement réticent à ajouter outdated
support natif de cargo-outdated
pour assurer notre coordination. Je sais que je l'utilise assez souvent !
Merci beaucoup d'avoir fait cette enquête @behnam , c'est très utile !
Un gros +1 pour avoir cargo outdated
intégré.
J'utilise cargo-outdated
depuis des lustres maintenant, mais comme le dit @behnam , il ne prend pas encore en charge les espaces de travail et j'en utilise tellement avec yarn
et pip
que je le crois devrait faire partie de Cargo.
Juste pour mettre à jour la sortie du fil, cela ressemble en fait à ce qui suit maintenant :
Package Current Wanted Latest Package Type URL
@types/lodash 4.14.70 4.14.71 4.14.71 devDependencies https://www.github.com/DefinitelyTyped/DefinitelyTyped.git
@types/react 15.0.38 15.0.39 15.0.39 devDependencies https://www.github.com/DefinitelyTyped/DefinitelyTyped.git
gulp 4.0.0-alpha.2 exotic exotic devDependencies gulpjs/gulp#4.0
signature_pad 2.2.0 2.2.1 2.2.1 dependencies https://github.com/szimek/signature_pad
webpack-dev-server 2.5.1 2.6.1 2.6.1 devDependencies http://github.com/webpack/webpack-dev-server
Done in 2.27s.
Avoir l'URL dans la sortie est assez agréable pour pouvoir aussi voir les changements. Séparer les dépendances de développement, les dépendances de construction et les dépendances plus proprement que le fil serait également bien, mais cela pourrait alors devenir trop complexe à afficher avec les espaces de travail.
Un changement à faire par rapport à cargo-outdated
qui est déjà mentionné est que imo, il ne devrait répertorier que les dépendances directes du projet, pas les sous-dépendances. Voici un exemple sur un de mes projets :
Name Project Ver SemVer Compat Latest Ver
hyper 0.10.12 -- 0.11.1
hyper->base64 0.5.2 -- 0.6.0
hyper->mime 0.2.6 -- 0.3.2
hyper->unicase 1.4.2 -- 2.0.0
slug->unidecode 0.2.0 -- 0.3.0
Je ne me soucie que de hyper
dans cette liste.
Si nous voulons aller c), je recommanderais de vérifier la commande yarn upgrade-interactive
comme exemple de la façon de la gérer.
Je serais intéressé de faire la mise en œuvre si cela finit par être accepté pour le fret !
Bonnes idées, @Keats !
Avoir l'URL dans la sortie est assez agréable pour pouvoir aussi voir les changements.
D'accord.
De plus, sur une note similaire, une option --verbose
qui vous montre également tous en règle, vous indiquant ce qui a été dans la liste de contrôle.
Séparer les dépendances de développement, les dépendances de construction et les dépendances plus proprement que le fil serait également bien
Je ne sais pas ce que build-dependencies
est ici. Mais, à propos de dev-dependencies
, ils ont convenu que parfois ce n'est pas un problème et qu'il vaut mieux pouvoir le laisser en dehors du calcul. Donc, peut-être avons-nous besoin d'un ensemble d'options pour désactiver chaque groupe de ces dépendances.
mais il peut alors devenir trop complexe à afficher avec des espaces de travail.
En fait, je pense que la fonctionnalité de lecture seule ne sera pas si complexe pour les espaces de travail, car il devrait déjà y en avoir un Cargo.lock
.
Mais c'est un bon rappel que nous avons également besoin de quelque chose comme location
NPM, qui montre quel package local (dans l'espace de travail) dépend de l'ancienne version.
Et en plus, ce serait l'outil interne de Cargo pour alerter sur un espace de travail (ou même un package) ayant des dépendances
il ne doit répertorier que les dépendances directes du projet, pas les sous-dépendances.
Exactement. Je ne sais pas si nous voulons qu'une fonctionnalité effectue ces vérifications à plus d'un niveau de profondeur. Je pense que nous pouvons commencer par les services
Je serais intéressé de faire la mise en œuvre si cela finit par être accepté pour le fret !
Impressionnant! Je ne pourrai pas y arriver dans les prochaines semaines, mais je peux aider avec quelques tests et critiques, si nécessaire.
Il semble donc que nous ayons un consensus général sur les fonctionnalités de base d'une sous-commande outdated
intégrée et le reste peut être discuté par PR, je suppose.
Aussi, écrivons en CC cargo-outdated
. @kbknapp , qu'en pensez-vous ?
Je ne sais pas quelles sont les dépendances de construction ici. Mais, à propos des dépendances de développement, j'ai convenu que parfois ce n'est pas un problème et qu'il vaut mieux pouvoir le laisser en dehors du calcul. Donc, peut-être avons-nous besoin d'un ensemble d'options pour désactiver chaque groupe de ces dépendances.
Les dépendances de construction seraient bindgen
par exemple : https://github.com/compass-rs/sass-rs/blob/master/sass-sys/Cargo.toml#L16
Il est important d'afficher les dépendances de développement dans JS-land car j'ai plus de dépendances de développement que de dépendances réelles, mais je pense qu'il est toujours logique d'afficher des informations obsolètes pour toutes les caisses répertoriées dans mon Cargo.toml par défaut. Nous pourrions avoir un indicateur pour désactiver les dépendances build/dev mais je ne pense pas qu'il serait utilisé très souvent : si vous exécutez cargo outdated
, vous voulez généralement voir toutes les caisses.
En fait, je pense que la fonctionnalité de lecture seule ne sera pas si complexe pour les espaces de travail, car il devrait déjà y avoir un Cargo.lock.
Mon souci était plutôt de savoir comment bien l'afficher dans le terminal lorsque vous avez de nombreux espaces de travail comme habitat . Je suppose que faire défiler un peu n'est pas un gros problème
D'accord, @Keats. :)
Chose amusante à propos de build-dependencies
: je pourrais dire ce que c'est, mais je ne l'ai trouvé nulle part sous la référence manifeste : http://doc.crates.io/manifest.html . Il s'avère que cela n'est mentionné que dans cette autre page : http://doc.crates.io/specifying-dependencies.html#build-dependencies Je vais soumettre un PR pour l'ajouter à la liste dans http://doc.crates .io/manifest.html#dependency-sections pour que cela ne se reproduise plus.
@alexcrichton , est-ce quelque chose qui nécessite une RFC, ou pouvons-nous aller de l'avant avec le consensus général ici et commencer la mise en œuvre ?
S'il n'y a pas de RFC, je suppose que nous pouvons créer un nouveau problème de suivi pour la sous-commande intégrée cargo outdated
avec les détails, et laisser ce problème pour la discussion d'autres questions connexes, comme l'avertissement proposé sur cargo update
lorsqu'il reste des colis.
Désolé à tous, je viens de voir ça ! Je suis tout à fait d' cargo outdated
avec l'ajout d'une commande native @Frederick888 s'est mobilisé pour aider spécifiquement avec cargo-outdated
.
La plus grande chose que je vois qui doit se produire pour cargo-outdated
(natif ou tiers) est d'ajouter la prise en charge de l'espace de travail.
@Keats
Je ne me soucie que de
hyper
dans cette liste.
cargo-outdated
(sous-commande tierce) a actuellement les options -R, --root-deps-only
ou --depth=#
qui font exactement ce que vous recherchez.
Il y a aussi -r, --root=PKG
pour traiter un paquet particulier comme racine, et enfin -p, --package=PKG
pour rechercher uniquement les mises à jour pour un paquet/crate particulier. Tout cela devrait également être combinable.
Légèrement hors sujet, ce genre d'aborde le sujet des sous-commandes tierces se rapprochant des commandes natives, et s'il existe une méthode ou un endroit officiel pour que cela se produise ? De la même manière que les bibliothèques se déplacent vers la pépinière, existe-t-il un endroit où les sous-commandes tierces peuvent se rapprocher de cargo
lui-même, peut-être même distribuées par défaut ? Il y a des moments où cela peut être moins de travail que de ré-implémenter des fonctionnalités. Je comprends qu'avec outdated
il peut être plus facile de dupliquer simplement la fonctionnalité à l'intérieur de cargo
, mais je doute fortement que ce soit la dernière fois que ce genre de situation se produira. Juste penser à voix haute. :clin d'œil:
Je ne me soucie que de l'hyper dans cette liste.
cargo-outdated (sous-commande tierce) a actuellement les options
-R, --root-deps-only
ou--depth=#
qui font exactement ce que vous recherchez.
Il y a deux raisons pour lesquelles vous pourriez avoir une dépendance obsolète d'une caisse que vous utilisez. Soit l'auteur n'a pas encore mis à jour, soit vous avez l'ancienne version dans votre fichier Cargo.lock
. cargo-outdated
colonne SemVer Compat
devrait probablement aider ici, mais je n'ai jamais pu comprendre comment cela fonctionne, par exemple :
Name Project Ver SemVer Compat Latest Ver
rocket->base64 0.6.0 0.5.2 --
Alors de temps en temps je retire mes Cargo.lock
pour en obtenir un nouveau.
@lnicola
Je ne pourrais jamais comprendre comment ça marche
Nous venons de faire une nouvelle version. Pourriez-vous s'il vous plaît le tester à nouveau?
@kbknapp
Légèrement hors sujet, ce genre d'aborde le sujet des sous-commandes tierces se rapprochant des commandes natives, et s'il existe une méthode ou un endroit officiel pour que cela se produise ?
Bon point. En fait, lorsque j'étais en train cargo-outdated
refactoriser cargo
tant que dépendance car cela avait tendance à être un peu exagéré (et me coûterait beaucoup de temps pour lire les documents) . Mais maintenant, si nous parlons d'intégrer la fonctionnalité dans cargo
lui-même, ce dont je suis également satisfait, apparemment, dépendre de cargo
est un meilleur choix.
Alors oui, il serait préférable d'avoir une telle directive, ou même une liste de suggestions de développement de sous-commandes pour les développeurs.
Je cherchais littéralement une nouvelle version quand vous avez écrit ça 😀.
Avant de:
Name Project Ver SemVer Compat Latest Ver
rocket->base64 0.6.0 0.5.2 --
r2d2-diesel->diesel 0.15.1 0.15.2 0.15.2
rocket->hyper 0.10.12 -- 0.11.2
time->libc 0.2.28 0.2.29 0.2.29
uuid->rand 0.3.15 0.3.16 0.3.16
time->redox_syscall 0.1.27 0.1.29 0.1.29
toml->serde 1.0.10 1.0.11 1.0.11
rocket->smallvec 0.4.1 -- 0.2.1
rocket_contrib->tera 0.10.8 0.10.9 0.10.9
rocket->toml 0.4.2 0.4.4 0.4.4
Après:
Name Project Ver SemVer Compat Latest Ver
backtrace->libc 0.2.28 0.2.29 0.2.29
backtrace-sys->libc 0.2.28 0.2.29 0.2.29
diesel 0.15.1 0.15.2 0.15.2
diesel_codegen->diesel 0.15.1 0.15.2 0.15.2
diesel_infer_schema->diesel 0.15.1 0.15.2 0.15.2
isatty->libc 0.2.28 0.2.29 0.2.29
memchr->libc 0.2.28 0.2.29 0.2.29
num_cpus->libc 0.2.28 0.2.29 0.2.29
r2d2-diesel->diesel 0.15.1 0.15.2 0.15.2
rand->libc 0.2.28 0.2.29 0.2.29
rayon-core->libc 0.2.28 0.2.29 0.2.29
rayon-core->rand 0.3.15 0.3.16 0.3.16
ring->libc 0.2.28 0.2.29 0.2.29
rocket->toml 0.4.2 0.4.4 0.4.4
rocket_contrib->serde 1.0.10 1.0.11 1.0.11
rocket_contrib->tera 0.10.8 0.10.9 0.10.9
serde 1.0.10 1.0.11 1.0.11
serde_json->serde 1.0.10 1.0.11 1.0.11
tera->serde 1.0.10 1.0.11 1.0.11
time->libc 0.2.28 0.2.29 0.2.29
time->redox_syscall 0.1.27 0.1.29 0.1.29
toml->serde 1.0.10 1.0.11 1.0.11
uuid->rand 0.3.15 0.3.16 0.3.16
Après avoir supprimé Cargo.lock
:
All dependencies are up to date, yay!
??
Après avoir retiré Cargo.lock :
@lnicola , êtes-vous en train de dire que cargo update
ne vous donne pas les mêmes résultats ? Si oui, pouvez-vous être un peu plus précis sur les circonstances dans lesquelles cela se produit ?
@behnam J'en avais en fait une copie, alors je viens d'essayer cargo update
dessus. On dirait que les résultats étaient les mêmes ("Toutes les dépendances sont à jour").
Si vous demandez pourquoi j'ai dit que je supprime Cargo.lock
au lieu d'exécuter cargo update
, il n'y a pas de raison particulière.
@Frederick888 En regardant ma sortie, je pense que les mises à jour de dernière minute pour les dépendances ne sont plus signalées?
rocket->hyper 0.10.12 -- 0.11.2
@lnicola En fait, cela n'était pas censé être signalé. Auparavant, si un package avait plusieurs occurrences avec des exigences de versions/semver différentes dans l'arborescence des dépendances, le programme pouvait parfois mal se comporter.
cargo-outdated
vérifie la "dernière" version en remplaçant les exigences semver des dépendances directes par "*"
, ce qui signifie qu'il ne vous donne pas vraiment les "dernières versions" des versions indirectes . Ce n'est parfois pas tout à fait intuitif et il y a un problème connexe pour cela (kbknapp/cargo-outdated#25).
Auparavant, si un package avait plusieurs occurrences avec des exigences de versions/semver différentes dans l'arborescence des dépendances, le programme pouvait parfois mal se comporter.
Je ne pense pas que ce soit le cas pour hyper
dans mon exemple.
vérifie la "dernière" version en remplaçant les exigences semver des dépendances directes par "*", ce qui signifie qu'il ne vous donne pas vraiment les "dernières versions" des versions indirectes.
Je vois. Il peut être utile de les signaler, afin que vous sachiez que vos dépendances utilisent des caisses plus anciennes. Mais je ne me sens pas trop fort à ce sujet.
En ce qui concerne l'utilisation plus facile pour les bibliothèques tierces des internes cargo
et l'intégration de commandes tierces intégrées : peut-être diviser la cargaison en caisses plus petites (dans un référentiel, configuré comme espace de travail ) aiderait?
Fondamentalement, je pense que la lecture et la validation du manifeste (avec une compréhension de l'espace de travail et de diverses dépendances) devraient être une bibliothèque distincte des commandes consommant le manifeste pour prendre des mesures.
Il y a beaucoup de discussions dans ce numéro sur de nombreux sujets - les internes pourraient être un meilleur endroit pour ces discussions.
Après avoir lu, il semble que le problème le plus ciblé ici soit de déplacer cargo outdated
dans l'arborescence pour devenir une commande officiellement prise en charge, j'ai donc changé le titre du problème pour refléter cela.
Je pense qu'une partie de la confusion à propos de "pourquoi cargo-outdated
ne me montre-t-elle pas X
" provient également de https://github.com/kbknapp/cargo-outdated/issues/134 , que j'ai vient de tomber sur.
Y a-t-il des progrès actuels à ce sujet? Est-ce que n'importe qui sait quel était le dernier statut de ceci en amont ?
Avons-nous une mise à jour pour cela? J'aime cargo-outdated
bien que je pense qu'il devrait y avoir une sous-commande standardisée à l'intérieur de la cargaison qui vérifie les colis obsolètes. Comme les nouveaux utilisateurs auraient besoin de rechercher un package juste pour exécuter certaines fonctionnalités
Juste en laissant une note ici que l'arbre de cargaison a récemment été adopté dans la cargaison proprement dite dans https://github.com/rust-lang/cargo/pull/8062 , ce qui, du moins pour moi, indique qu'il n'est pas impossible que la même chose puisse arriver à cargaison périmée si quelqu'un fait le travail.
cc @deg4uss3r
Merci pour le cc @kbknapp Je suis en train de
Hé, avez-vous pu examiner cette possibilité ?
@svenstaro Oui j'ai ! Les progrès avancent lentement, mais j'y travaille :) commencer le nouveau travail en même temps est difficile cependant
Ok chéri, merci pour la mise à jour !
@deg4uss3r ping amical :D
@svenstaro Merci beaucoup de me garder honnête !
Donc, je travaille là-dessus; cependant, je l'ai fait hors ligne parce que je vois beaucoup de petites choses à améliorer sur cargo-oudated
que j'aimerais simplifier en tant que sous-commande de fret, tout en conservant éventuellement cargo-outdated
tant que option basée sur un projet plus lourd. Voici donc mon travail à l'air libre : https://github.com/deg4uss3r/outdated2
Cela va avoir l'air TRÈS rude en ce moment, je suis désolé, ça a été une année 2020 assez intéressante jusqu'à présent !
Cela simplifie donc le projet en ne regardant que les dépendances de l'espace de travail et en demandant les dernières informations à https://crates.io via l'API. Je pense que c'est le meilleur choix à ajouter à la cargaison car nous voulons qu'il fonctionne toujours, plus de problèmes de compilation avec des dépendances conflictuelles et il ne vérifiera que les dépendances obsolètes du projet en cours plutôt que de plonger dans des dépendances sur lesquelles le lanceur n'aura aucun contrôle. .
Il y a BEAUCOUP (comme vous pouvez le constater) sur lequel je dois travailler, le plus important est l'intégration avec cargo
directement, mais j'ai prêté une attention particulière aux dépendances que cargo
utilise pour m'assurer que je Je réutilise ce qui est déjà importé. Jusqu'à présent, je vois que j'ai besoin de vraiment étoffer avant de réellement charger le MR :
J'aimerais avoir des opinions sur cette version réduite avant de continuer plus loin car, personnellement, je pense que c'est ce que nous voulons en tant que sous-commande cargo
, mais je pourrais être totalement minoritaire là-bas.
Edit: je suis sûr qu'il y a des optimisations très simples que je n'ai pas encore faites mais pour le moment c'est assez rapide, cela prend environ 9 secondes (version de build, de rustc stable 1.46
) pour le servo... qui est pas mal pour quelque chose comme ça !
Super de voir des progrès !
Depuis que vous avez demandé des commentaires : Fonctionnalités que j'aime beaucoup dans la version actuelle : --ignore
, --depth
, --workspace
. --exit-code
est intéressant pour CI.
J'utilise assez souvent cargo outdated -R/--root-deps-only
, car la sortie standard est un peu verbeuse.
Je suggère de regarder yarn upgrade-interactive --latest
pour une interface de mise à niveau vraiment propre. J'utilise souvent des cargaisons obsolètes, mais devoir changer chaque département manuellement est pénible.
Commentaire le plus utile
Voici un résumé des fonctionnalités similaires de certains autres gestionnaires de packages.
JS NPM
NPM CLI a une sous-commande
outdated
intégrée qui affiche l'état des packages auxquels leurs versions actuelles , souhaitées et les plus récentes ne correspondent pas.Comme
cargo update
, lenpm update
jour la version actuelle en want , si nécessaire et possible.Il semble que
npm update
n'ait plus de fonctionnalités dans ce domaine. De plus, aucune autre sous-commande ne semble liée.Réf : https://docs.npmjs.com/cli/outdated
La description
(de https://github.com/npm/npm/blob/latest/doc/cli/npm-outdated.md )
Cette commande vérifiera le registre pour voir si des packages installés (ou spécifiques) sont actuellement obsolètes.
En sortie :
wanted
est la version maximale du package qui satisfait la plage semver spécifiée danspackage.json
. S'il n'y a pas de plage de serveurs disponible (c'est-à-dire que vous utiliseznpm outdated --global
, ou que le package n'est pas inclus danspackage.json
), alorswanted
affiche la version actuellement installée.latest
est la version du package la plus récente dans le registre. L'exécution denpm publish
sans configuration spéciale publiera le package avec une balise dist delatest
. Cela peut ou non être la version maximale du package, ou la version la plus récemment publiée du package, selon la façon dont le développeur du package gère le dernier dist-tag(1).location
est l'endroit où se trouve le package dans l'arborescence des dépendances. Notez quenpm outdated
défaut une profondeur de 0, donc à moins que vous ne l'ignoriez, vous ne verrez toujours que les dépendances de niveau supérieur qui sont obsolètes.package type
(lors de l'utilisation de--long
/-l
) vous indique si ce package est undependency
ou undevDependency
. Les forfaits non inclus danspackage.json
sont toujours marquésdependencies
.Exemple
Modifiez
package.json
et ajoutez"underscore": "1.7"
à la liste des dépendances.Fil JS
Yarn CLI a une sous-commande
outdated
intégrée pour "vérifier les dépendances de package obsolètes".Réf : https://yarnpkg.com/lang/en/docs/cli/outdated/
La description
Répertorie les informations de version pour toutes les dépendances de package. Ces informations incluent la version actuellement installée, la version souhaitée basée sur semver et la dernière version disponible.
Par exemple, supposons que votre package.json a les dépendances suivantes répertoriées :
La commande exécutée devrait ressembler à ceci :
Gemmes de rubis
Gems CLI a une sous-commande
outdated
intégrée pour « afficher toutes les gemmes qui nécessitent des mises à jour ».Réf : http://guides.rubygems.org/command-reference/#gem-outdated
La description
(À partir de la réf.)
La commande obsolète répertorie les gemmes que vous souhaiterez peut-être mettre à niveau vers une version plus récente.
Vous pouvez vérifier les incompatibilités de dépendance à l'aide de la commande de dépendance et mettre à jour les gems avec les commandes de mise à jour ou d'installation.
Lot de rubis
Bundler CLI a une sous-commande
outdated
intégrée pour « lister les gems installées avec des versions plus récentes disponibles ».Réf : https://bundler.io/v1.11/bundle_outdated.html
La description
(À partir de la réf.)
Obsolète répertorie les noms et les versions des gems qui ont une version plus récente disponible dans la source donnée. L'appel obsolète avec
[GEM [GEM]]
ne vérifiera que les versions les plus récentes des gemmes données. Par défaut, les gemmes d'avant-première disponibles seront ignorées.Python PIP
La sous-commande
list
PIP CLI a une option--outdated
, pour "lister les packages obsolètes", et une option--uptodate
pour "lister les packages à jour".Réf : https://pip.pypa.io/en/stable/reference/pip_list/
Exemples
Liste des packages installés.
Répertoriez les packages obsolètes (hors modifiables) et la dernière version disponible.
```
Liste de pip $ --obsolète
docutils (Actuel : 0,10 Dernier : 0,11)
Sphinx (Actuel : 1.2.1 Dernier : 1.2.2)