How to determine whether any prerequisite tasks needed to run at the time they were defined?
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 42/100
- Type d'issue
- Fonctionnalité
- Clarté
- Plutôt claire
- Activité
- À l'abandon
- Stack technique
- ruby
- Domaine
- build-system
Piste de recherche
Commencez par les points d’entrée de Rake::Task indiqués dans l’issue : #needed?, #already_invoked, #execute, #enhance et invoke_prerequisites. Suivez le moment où chaque état change et déterminez comment distinguer une condition préalable qui a réellement été exécutée d’une condition qui a seulement été invoquée. Le travail est terminé lorsque le comportement est spécifié et couvert par des tests pour les deux cas.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
I have a use-case in which I need to run a task if and only if at least one of its prerequisite tasks either (1) currently needs to run or (2) needed to run at the time the prerequisite task was defined. Here are some attempts at a Rake::Task subclass:
class MyTask < Rake::Task
def needed?
prerequisite_tasks.any?(&:needed?)
end
end
This approach does not work, since at the time MyTask#needed? is called, prerequisite tasks may have run and therefore return false for #needed?.
class MyTask < Rake::Task
def needed?
prerequisite_tasks.any? { |p| p.needed? or p.already_invoked }
end
end
This also doesn't work, since #already_invoked can return true [even if the task's #execute method was never called]:
@already_invoked = true
invoke_prerequisites(task_args, new_chain)
execute(task_args) if needed?
What ended up working was:
class MyTask < Rake::Task
def initialize(*)
@needed = false
super
end
def enhance(*)
super.tap { @needed |= prerequisite_tasks.any?(&:needed?) }
end
def needed?
@needed
end
end
But that just feels... wrong. Is there something I'm missing here? I'd be more than happy to open a PR implementing what I'm looking for (maybe an #already_executed method?) if this functionality doesn't already exist.
Thanks!
- Langage dominant
- Ruby
- Étoiles
- 2.5k
- Forks
- 651
- Merge moyen
- 5 min
- PR mergées (30 j)
- 4
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de ruby/rake
-
rake -P output is ambiguous with prereq namespacesPeut-être pris @leoarnold l’a pris il y a 66 jours. Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 68/100
-
Difficulté 3/5 1-2 jours Accessibilité débutants 48/100
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 28/100
-
FileList#<< bypasses exclusions while FileList#include respects themPeut-être pris @hsbt l’a pris il y a 80 jours. Ouverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 45/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 38/100
Toutes les issues de ruby/rake
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
rubys/roundhouse#444 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
yegor256/rubocop-elegant#92 ·
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
ecosyste-ms/awesome#812 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
forem/forem#23933 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour