How to determine whether any prerequisite tasks needed to run at the time they were defined?
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 42/100
- Issue-Typ
- Feature
- Klarheit
- Größtenteils klar
- Aktivitätsstatus
- Veraltet
- Tech-Stack
- ruby
- Bereich
- build-system
Rechercherichtung
Beginnen Sie mit den im Issue gezeigten Rake::Task-Einstiegspunkten: #needed?, #already_invoked, #execute, #enhance und invoke_prerequisites. Verfolgen Sie, wann sich jeder Status ändert, und bestimmen Sie, wie sich eine tatsächlich ausgeführte Voraussetzung von einer unterscheiden lässt, die nur aufgerufen wurde. Erledigt bedeutet, dass das Verhalten spezifiziert und durch Tests für beide Fälle abgedeckt ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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!
- Vorherrschende Sprache
- Ruby
- Sterne
- 2.5k
- Forks
- 649
- Ø Merge
- 4 Min.
- Gemergte PRs (30 T.)
- 2
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus ruby/rake
-
rake -P output is ambiguous with prereq namespacesEvtl. vergeben @leoarnold hat das vor 72 Tagen übernommen. Offen
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 68/100
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 48/100
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 28/100
-
FileList#<< bypasses exclusions while FileList#include respects themEvtl. vergeben @hsbt hat das vor 86 Tagen übernommen. Offen
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 45/100
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 38/100
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
-
ds-drift
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 76/100
we-promise/sure#4120 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 4 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
scanaislop/aislop#476 ·
Maintainer antworten meist innerhalb von 1 Tag