2013-05-29 11 views
10

Ich behalte ein ziemlich gut verwendetes Emacs-Paket (ido-ubiquitous) und in der nächsten Version plane ich, die Unterstützung für Emacs 23 und darunter fallen zu lassen. Personen, die Emacs 23 und darunter verwenden, können weiterhin die aktuelle Version meines Pakets verwenden.Wie kann ich die Unterstützung für ältere emacsen in meinem elisp-Paket problemlos löschen?

Ich möchte jedoch nicht, dass Emacs 23-Benutzer über ELPA oder git oder etwas anderes upgraden und mit der neuen Version enden, die nicht mit ihren Emacs kompatibel ist. Gibt es einen allgemein akzeptierten Weg, dies elegant zu handhaben? Habe ich die Wahl, die neue Version in "ido-ubiquitous-ng" umzubenennen?

+0

Für ELPA könnten Sie Ihr Paket von'Emacs-24' abhängig machen, obwohl ich nicht sicher bin, ob das die gewünschte Benutzererfahrung geben würde. – legoscia

Antwort

7

ELPA/package.el

Um Updates über package.el zu verhindern, die besondere Abhängigkeit (emacs "24.1") auf die Package-Requires Liste hinzuzufügen. Siehe Library Headers im Emacs Lisp-Handbuch, in der Beschreibung des Package-Requires: Header:

[...] Der Paketcode definiert automatisch ein Paket mit dem Namen ‚Emacs‘ mit der Versionsnummer des aktuell laufenden Emacs. Dies kann verwendet werden, um eine minimale Version von Emacs für ein Paket zu benötigen.

Die package.el und die unter 23 unabhängig voneinander für Emacs verteilt tut nicht dieses spezielle Paket bereitzustellen. Daher wird jeder Versuch, Ihr Paket auf Emacs 23 zu installieren, mit einer Nachricht fehlschlagen, die sich darüber beschwert, dass "emacs" für die Installation nicht verfügbar ist und die alte kompatible Version an Ort und Stelle bleibt.

Wenn jedoch diese Verwendung hergestellt werden Beschwerden von Nutzern von Emacs zu behandeln 24. Viele Anwender offenbar nicht löschen ihre alten package.el wenn Emacs 24. So ist die alte package.el überschreibt die neue integrierte in einem, leading to spurious errors on installation aktualisieren.


ELGet

Ich weiß nicht, Elget. Frag wahrscheinlich seinen Autor um Hilfe in dieser Angelegenheit.


Git Submodule, Tarballs und andere Legacy-Methoden

Ich glaube nicht, dass Sie wirklich Updates verhindern können, wenn Benutzer Ihr Paket in einem Legacy-Art und Weise installieren (zB Git Submodule, Verteilungspakete, etc.). Sie können sich nur beschweren nach Ihr Paket wurde aktualisiert, das ist wohl zu spät, weil der inkompatible Code jetzt schon da ist.

Sie können eine explizite Versionsprüfung mit einer detaillierten error hinzufügen. Ich halte dies jedoch für überflüssig. Wenn Sie sich wirklich für Emacs 24 entscheiden, werden Sie inkompatible Funktionen verwenden, damit Ihr Paket nicht erfolgreich geladen wird, unabhängig davon, ob Sie es ausdrücklich verhindern oder nicht. So Code sparen Sie sich von überflüssigen :)


TL; DR (+ persönliche Erfahrung)

Zunächst einmal bitte umbenennen nicht Ihr Paket. Nur wenige Benutzer können die Neuigkeiten zu jedem installierten Paket verfolgen. Daher werden viele Benutzer nicht sofort erkennen, dass das Paket umbenannt wurde, und weiterhin eine veraltete Version ohne Ankündigung oder Warnung verwenden.Effektiv würden Sie Emacs 24 Benutzer Ihres Pakets bestrafen.

Fügen Sie die spezielle Abhängigkeit hinzu, um versehentliche Aktualisierungen über package.el zu verhindern. Fügen Sie prominente Dokumentation hinzu, dass Ihr Paket Emacs 24 benötigt, wie im ersten Abschnitt Ihrer Github Readme. Dann lass die Sache ruhen. Alles andere ist wahrscheinlich mehr Aufwand, als es wert ist.

In meiner persönlichen Erfahrung, Emacs Benutzer sind nicht dumm (na ja, zumindest die Mehrheit ist nicht). Sie lesen die Dokumentation. Sie verstehen Dokumentation.

Benutzer von Emacs 23 wissen, dass ihr Emacs veraltet ist. Viele von ihnen erwarten Inkompatibilitäten und Brüche. Wenn das Paket plötzlich für sie bricht, werden sie Rat bei Github suchen, erkennen, dass das Paket nicht mehr für Emacs 23 verfügbar ist, und entweder zurück zur letzten Arbeitsfreigabe gehen oder (hoffentlich) ihren Emacs aktualisieren.

+2

Unabhängig von den Abhängigkeiten des Paketmanagers stellen Sie sicher, dass Sie (vorausgesetzt Ihre Bibliothek befindet sich in der Versionskontrolle!) Einen Zweig für die Emacs 23-Version der Bibliothek erstellen, bevor Sie mit dem Hacken auf dem Stamm beginnen. Auf diese Weise behalten Benutzer zumindest die Fähigkeit, sich eine kompatible Version aus dem Repository zu holen (und könnten mit einer geeigneten el-get-Quelle/Rezept einfach aus der Emacs 23-Verzweigung trivial installieren und aktualisieren). – phils

+0

@phils Wäre ein Tag auf der letzten kompatiblen Version nicht ausreichend, wenn er Emacs 23 nicht mehr unterstützen möchte? – lunaryorn

+0

Für mich ist das definitiv ein Fall für eine Filiale. Tags werden für bestimmte Releases innerhalb einer Verzweigung verwendet. Selbst wenn Sie nicht vorhaben, es zu unterstützen, keine Verzweigungen, die Möglichkeit, Patches von anderen Leuten zu akzeptieren (aber ich würde es trotzdem als Zweig bezeichnen). Mit einem VCS wie Git sind Tags und Zweige praktisch fast das Gleiche. Mit Verzweigungen wie Subversion * ist * schwergewichtiger, aber es wäre eine seltene Emacs-Bibliothek, die ein Repository hatte, das so groß ist, dass es ein Problem darstellt. – phils