Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

How to determine whether any prerequisite tasks needed to run at the time they were defined?

Offen
#270 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

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

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus ruby/rake

Alle Issues in ruby/rake

Ähnliche Issues

Weitere Issues zu Ruby

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.