2013-05-29 13 views
10

Tôi duy trì một gói emacs khá được sử dụng khá tốt (ido-phổ biến), và trong phiên bản kế tiếp, tôi dự định thả hỗ trợ cho Emacs 23 trở xuống. Những người sử dụng Emacs 23 trở xuống sẽ có thể tiếp tục sử dụng phiên bản hiện tại của gói của tôi.Làm cách nào để tôi có thể thả hỗ trợ cho các thùng emacsen cũ hơn trong gói elisp của tôi?

Tuy nhiên, tôi không muốn có người dùng Emacs 23 nâng cấp thông qua ELPA hoặc git hoặc cái gì khác và kết thúc bằng phiên bản mới không tương thích với các emacs của họ. Có cách nào được chấp nhận chung để xử lý điều này một cách duyên dáng? Tôi có lựa chọn đổi tên phiên bản mới thành "ido-ubiquitous-ng" hay gì đó không?

+0

Đối với ELPA, bạn có thể làm cho gói của bạn phụ thuộc vào 'emacs-24', mặc dù tôi không chắc liệu điều đó có mang lại trải nghiệm người dùng mong muốn hay không. – legoscia

Trả lời

7

ELPA/package.el

Để ngăn chặn cập nhật qua package.el, thêm phụ thuộc đặc biệt (emacs "24.1") vào danh sách Package-Requires. Xem Library Headers trong tay Emacs Lisp, trong mô tả của Package-Requires: tiêu đề:

[...] Mã gói tự động định nghĩa một gói có tên là ‘emacs’ với số phiên bản của Emacs đang chạy. Điều này có thể được sử dụng để yêu cầu một phiên bản tối thiểu của Emacs cho một gói.

Gói.el được phân phối độc lập cho Emacs 23 trở xuống không cung cấp gói đặc biệt này. Vì vậy, bất kỳ nỗ lực nào để cài đặt gói của bạn trên Emacs 23 sẽ không thành công với một thông báo phàn nàn về "emacs" không có sẵn để cài đặt, để lại phiên bản tương thích cũ tại chỗ.

Tuy nhiên, khi sử dụng này, hãy chuẩn bị để xử lý khiếu nại của người sử dụng Emacs 24. Nhiều người dùng dường như không xóa họ cũ package.el khi nâng cấp lên Emacs 24. Do đó, cũ package.el đè mới được xây dựng trong một, leading to spurious errors on installation.


ELGet

Tôi không biết Elget. Có thể yêu cầu tác giả của nó giúp đỡ về vấn đề này.


Git submodules, Tarballs và di sản khác phương pháp

Tôi không nghĩ rằng bạn có thể thực sự ngăn chặn cập nhật, nếu người dùng cài đặt gói của bạn một cách di sản (ví dụ submodules Git, bao bì phân phối, v.v.) Bạn chỉ có thể khiếu nại sau gói của bạn đã được cập nhật, được cho là đã quá muộn, vì mã không tương thích hiện đã có ở đó.

Bạn có thể chọn thêm kiểm tra phiên bản rõ ràng, với chi tiết error. Mặc dù vậy, tôi cho rằng điều này không cần thiết. Nếu bạn thực sự đi cho Emacs 24, bạn sẽ sử dụng các chức năng không tương thích, vì vậy gói của bạn sẽ không tải thành công, cho dù bạn có ngăn chặn nó một cách rõ ràng hay không. Vì vậy, tiết kiệm cho mình mã thừa :)


TL; DR (+ kinh nghiệm cá nhân)

Trước hết, xin đừng đổi tên gói của bạn. Rất ít người dùng có thể theo dõi tin tức trên từng gói đã cài đặt. Vì vậy, nhiều người dùng sẽ không ngay lập tức nhận ra rằng gói đã được đổi tên và tiếp tục sử dụng phiên bản lỗi thời mà không cần thông báo hoặc cảnh báo.Có hiệu quả, bạn sẽ loại phạt Emacs 24 người sử dụng gói của bạn.

Thêm phụ thuộc đặc biệt để ngăn cập nhật tình cờ qua gói.el. Thêm tài liệu nổi bật, gói của bạn yêu cầu Emacs 24, như trong phần đầu tiên của Github Readme. Sau đó, để cho vấn đề còn lại. Bất cứ điều gì khác có khả năng rắc rối hơn là nó có giá trị.

Trong kinh nghiệm cá nhân của mình, người dùng Emacs không ngu ngốc (ít nhất, phần lớn không phải là). Họ đọc tài liệu. Họ hiểu tài liệu.

Người dùng của Emacs 23 biết rằng Emac của họ đã lỗi thời. Nhiều người trong số họ mong đợi sự không tương thích và vỡ. Nếu gói đột nhiên phá vỡ cho họ, họ sẽ tìm kiếm lời khuyên trên Github, nhận ra rằng gói không có sẵn cho Emacs 23 nữa, và quay trở lại bản phát hành cuối cùng, hoặc (hy vọng) nâng cấp Emacs của họ.

+2

Bất kể phụ thuộc trình quản lý gói nào, hãy đảm bảo rằng (giả sử thư viện của bạn nằm trong điều khiển phiên bản!), Bạn tạo một nhánh cho phiên bản Emacs 23 của thư viện trước khi bắt đầu hack trên thân cây. Bằng cách đó, người dùng ít nhất giữ lại khả năng lấy một phiên bản tương thích từ kho lưu trữ (và với một nguồn/công thức thích hợp với el-get, có thể cài đặt và cập nhật thường xuyên từ chi nhánh Emacs 23). – phils

+0

@phils Không phải là một thẻ trên phiên bản tương thích cuối cùng là đủ, nếu anh ta không có ý định hỗ trợ Emacs 23 nữa? – lunaryorn

+0

Để tâm trí của tôi, điều này chắc chắn là một trường hợp cho một chi nhánh. Thẻ sẽ được sử dụng cho các bản phát hành cụ thể trong một chi nhánh. Ngay cả khi bạn không có kế hoạch để hỗ trợ nó, không phân nhánh giảm giá khả năng chấp nhận các bản vá lỗi từ những người khác (nhưng tôi vẫn gọi nó là một chi nhánh bất kể điều đó). Với một VCS như git, các thẻ và các nhánh rất thuận tiện gần như giống nhau. Với sự thích của phân nhánh Subversion * là * nặng hơn, tuy nhiên nó sẽ là một thư viện Emacs hiếm có một kho lưu trữ quá lớn để làm cho một mối quan tâm. – phils

Các vấn đề liên quan