Wie vermeide ich, nach Updates für ein bestimmtes Modul zu suchen?

35

In einem aktuellen Projekt musste ich das Leben aus ein paar Modulen (Knotenhierarchie, Workbench-Zugriff und ein paar mehr) patchen. Diese Module sind jetzt absolut perfekt für die Anforderungen des Projekts und es ist sehr unwahrscheinlich, dass sie mit zukünftigen Aktualisierungen des Kerns brechen.

Das heißt, wenn die App übergeben wird, haben die Clients vollen (Benutzer 1) Zugriff auf das System und werden daher gewarnt, wenn für diese Module Updates verfügbar sind. Und sie werden sie aktualisieren, egal wie oft ich sie anflehe, es nicht zu tun (oh, wie einfach wäre das Leben ohne Kunden!).

Gibt es eine Möglichkeit (möglicherweise in den .infoDateien der Module ), den Update Manager davon zu überzeugen, nicht nach Updates für diese Module zu suchen?

BEARBEITEN

Ich bin mir des project status urlSchlüssels bewusst , der für die .infoDatei verfügbar ist, also könnte ich ihn auf eine nicht vorhandene URL setzen, aber ich würde dies viel lieber auf eine saubere Art und Weise tun, wenn es möglich ist.

Clive
quelle

Antworten:

31

Sie müssen implementieren hook_update_projects_alter().

Ändern Sie die Liste der Projekte, bevor Sie Daten abrufen und Versionen vergleichen.

Die meisten Module müssen diesen Hook niemals implementieren. Es ist für die erweiterte Interaktion mit dem Update-Statusmodul vorgesehen: Es müssen keine Sterblichen zutreffen. Der primäre Anwendungsfall für diesen Hook ist das Hinzufügen von Projekten zur Liste, um beispielsweise Aktualisierungsstatusdaten für deaktivierte Module und Designs bereitzustellen. Ein beigetragenes Modul möchte möglicherweise Projekte aus der Liste ausblenden. Wenn beispielsweise ein standortspezifisches Modul keine offiziellen Releases enthält, kann sich dieses Modul von dieser Liste entfernen, um Warnungen zu vermeiden, dass "Keine verfügbaren Releases gefunden" angezeigt werden den verfügbaren Aktualisierungsbericht. In seltenen Fällen möchte ein Modul möglicherweise die Daten ändern, die mit einem bereits in der Liste enthaltenen Projekt verknüpft sind.

Chapabu
quelle
19

Der projectSchlüssel aus der .info- Datei wird vom Paketierungsskript auf drupal.org hinzugefügt, um zu identifizieren, aus welchem ​​Projekt das Modul stammt. In erster Linie wird das Modul "Status aktualisieren" verwendet, um Versionen installierter Pakete zu überwachen und Administratoren zu benachrichtigen, wenn neue Versionen verfügbar sind.

Sie entfernen oder kommentieren diese Zeile einfach in der .info- Datei und Drupal hört auf, nach Updates für dieses Modul zu suchen.

smartinm
quelle
Wurde dies abgelehnt, weil es falsch ist oder aus einem anderen Grund?
mpdonadio
Das ist IMO, der beste und einfachste Weg!
AyeshK
1
Von der manuellen Verwendung von @MPD projectwird in den Dokumenten abgeraten - dies könnte der Grund für Abstimmungen sein.
Mołot
Nur so konnte ich aufhören, nach einer angepassten Version eines Themas zu suchen. Ich würde es natürlich gerne "richtig" machen, aber dies funktionierte und die Wiederverwendung von NPCs, die mit THEMENAME_update_projects_alter codiert wurden, tat es nicht.
nedwardss
3
@nedwardss verwendet MYMODULE_oder gibt THEMENAME_nur den Ort an, an dem dieser Code platziert werden soll. Wenn Sie diesen Code in einer Designfunktionsdatei anstelle eines benutzerdefinierten Moduls verwenden, wird er möglicherweise in einer anderen Phase verarbeitet und funktioniert möglicherweise nicht wie erwartet. Themen sollten in die $projectsVariable aufgenommen werden.
EMC
14

Geben Sie einfach ein Codebeispiel an, um die gewählte Antwort zu unterstützen:

function MYMODULE_update_projects_alter(&$projects){
    unset($projects['slug_of_the_module_you_want_to_disable']);
    //dsm($projects);  // view a list of projects
}

Geben Sie den Modulnamen in die $projects[]zu deaktivierende Variable ein. Wenn Sie sich nicht sicher sind, was der Slug ist (in Kleinbuchstaben und unterstrichen), verwenden Sie diesen dsm()Aufruf oder print_r(), um eine Liste der Module auszudrucken.

emc
quelle
1
Eine Anmerkung - slugist einfach ein technischer Name des Moduls, der dem Namen der Moduldatei entspricht .info. Sie müssen also kein Projektarray sichern, sondern schauen einfach in den Modulordner. In den meisten Fällen ist der Name mit dem Namen des Modulordners identisch.
Nux
1
@Nux "most cases" ist kontraproduktiv, solange der Slug nicht mit dem Modulnamen übereinstimmt. Indem wir den Slug zum ersten Mal anzeigen und verwenden, schulen wir beide den Entwickler und reduzieren die Anzahl möglicher Probleme.
EMC
Der von Drupal verwendete Begriff ist nicht slug, sondern der Name der Maschine . Slug wird von einem CMS als Äquivalent verwendet kanonische URL oder Pfad - Alias ,
kiamlaluno
12

Sie können dies auf zwei Arten tun.

  • drush pm-updatecode --lock = module_to_ignore
  • Verwenden Sie das Modul update_advanced . Auf der Modulverwaltungsseite können Sie Module markieren, die Sie ignorieren möchten.

Insbesondere fehlen in der Kernversion des Moduls die Einstellungen pro Projekt, um bestimmte Projekte oder sogar bestimmte Releases zu ignorieren. Das Modul "Erweiterte Einstellungen für den Aktualisierungsstatus" stellt diese Einstellungen wieder her und bietet möglicherweise zusätzliche Funktionen für das Kernmodul "Aktualisierungsstatus".

4life
quelle
Der Drush-Befehl ist genau das, wonach ich gesucht habe, vielen Dank!
Afr
Das drush help upcwird dies für die --lockHilfe geben: --lock = <foo, bar> Fügen Sie eine dauerhafte Sperre hinzu, um die angegebenen Projekte von der Berücksichtigung während Updates zu entfernen. Sperren können mit dem Parameter --unlock entfernt oder überschrieben werden, indem das Projekt als Parameter für pm-update oder pm-updatecode angegeben wird. Die Sperre wirkt sich nicht auf den pm-Download aus.
Yzmir Ramirez
2

Ich habe das gleiche Problem mit den Modul-Updates. Ich habe das Disable Updates- Modul installiert. Es scheint gut zu funktionieren.

Dies ist ein kleines Verwaltungsmodul, mit dem Site-Administratoren die Suche nach Updates für bestimmte Themen und Module deaktivieren können, indem sie die Funktionalität von hook_update_projects_alter () im Update-Einstellungsformular (/ admin / reports / updates / settings) offen legen. Es ermöglicht die willkürliche Auswahl von Themen und Modulen sowie die automatische Erkennung von benutzerdefinierten Modulen, gepatchten Modulen und Modulen mit ortsspezifischen Funktionen.

Bildbeschreibung hier eingeben

Krishna Mohan
quelle
0

Im Grunde hast du eine Gabel gemacht, oder? Deshalb solltest du:

  1. Benennen Sie es um, um Ihre Gabelmarke einzuschließen
  2. Stellen Sie in der Info-Datei project status urlIhr Repository dieses Moduls ein.

Wenn es nicht unterstützt wird, aber nicht zu Gunsten eines anderen Moduls abgelehnt wurde, sollten Sie in Betracht ziehen, Co-Maintainer zu werden und Ihre Fixes der Community mitzuteilen.

Mołot
quelle
2
Donschoe: Betreuer hier. Ich würde Ihnen sehr gerne dabei helfen, auf den neuesten Stand zu kommen, wenn Sie möchten.
Berkes