2016-12-01 23 views
5

Tôi đang làm việc trên gói lua đầu tiên của mình, và tôi vô cùng bối rối về những gì để đặt tên cho (các) rockspec của tôi và nơi đặt chúng. Mỗi gói lua phổ biến tôi xem xét dường như đối phó với rockspecs khác nhau. Điều này rất khác so với Ruby, trong đó mỗi viên đá quý chỉ có một đơn gemspec. Dưới đây là một số ví dụ:Cách tốt nhất để quản lý các tệp rockarec luarocks là gì và tại sao?

  • lua-cliargs: a rockspec đơn trong thư mục gốc của dự án, (ví dụ lua_cliargs-3.0-1.rockspec)
  • ldoc: a rockspec đơn trong thư mục gốc của dự án, được đặt tên với scm thay vì một số phiên bản (ví dụ ldoc-scm-2.rockspec)
  • lua-MessagePack: nhiều, rockspecs phiên bản tên lưu trữ trong một thư mục cấp cao nhất rockspec/ (ví dụ lua-messagepack-0.1.0-1.rockspec ... lua-messagepack-0.3.4-1.rockspec), tiếp theo là một số với một phiên bản lua thêm chèn vào trước các phiên bản gói (ví dụ lua-messagepack-lua53-0.3.6-1.rockspec). Đôi khi có hai bản rockspecs cho cùng một phiên bản gói, một phiên bản chứa lua53 và một không.
  • luafilesystem: nhiều, rockspecs phiên bản tên lưu trữ trong một thư mục cấp cao nhất /rockspec (ví dụ luafilesystem-1.3.0-1.rockspec ... luafilesystem-1.6.1-1.rockspec), tiếp theo là một số có cvs thay vì một số phiên bản gói chèn vào trước các phiên bản gói (ví dụ luafilesystem-cvs-1.rockspec, luafilesystem-cvs-2.rockspec).
  • lpeg: không rockspec ở tất cả
  • luasocket: một rockspec trong thư mục gốc chứa scm thay vì một số gói (ví dụ luasocket-scm-0.rockspec), một thư mục /rockspec chứa một rockspec duy nhất với một số gói (ví dụ luasocket-3.0rc2-1.rockspec)

Bây giờ, this question giải thích tại sao người ta sẽ có một "làm việc" tập tin rockspec và một thư mục riêng biệt đầy đủ các rockspecs release-phiên bản, nhưng tôi vẫn có một số câu hỏi:

  1. Bản sửa đổi rockspec là gì? Wiki luarocks nói rằng các gói phát hành nên được gắn thẻ trong git với số phiên bản và ví dụ mà nó đưa ra không bao gồm bản sửa đổi rockspec. Nếu rockspec của tôi là trong VCS, và tôi gắn thẻ một cam kết cụ thể, sau đó không có hiệu quả sửa chữa các rockspec (s) bao gồm trong cam kết đó và do đó phiên bản? Bản sửa đổi sau này cho rockspec không thể có trong cam kết được gắn thẻ.
  2. Làm cách nào để lpeg được liệt kê trên luarocks nhưng thiếu rockspec?
  3. Wiki luarocks nói rằng scm nên được sử dụng thay cho số phiên bản gói nếu bạn muốn rockspec của bạn tham chiếu đến HEAD. Nhưng kể từ khi HEAD liên tục thay đổi và rockspec phải liệt kê tất cả các tệp, có vẻ như cần phải liên tục tăng số revision của rocksec scm để theo kịp với bất kỳ tệp đã thêm hoặc xóa nào. Người ta có thể giải quyết vấn đề này bằng cách không sử dụng số bản sửa đổi nào cả cho scm các điểm phát sóng, nhưng những cái tôi thấy có số bản sửa đổi thấp (ví dụ: ldoc-scm-2.rockspec). Đây có phải là một sai lầm?
  4. Có bất kỳ ví dụ nào ở trên được coi là phương pháp hay nhất không?

Trả lời

5

Bản sửa đổi rockspec là gì?

Bản sửa đổi rockspec là phiên bản của chính tệp rockspec. Giả sử bạn phát hành phiên bản Foo 1.0; bạn tạo một rockspec foo-1.0-1.rockspec. Sau đó bạn tìm hiểu rằng để có được Foo 1.0 để biên dịch trong FreeBSD, bạn cần phải vượt qua thêm một lá cờ -D; mã nguồn không cần thay đổi gì cả. Bạn chỉnh sửa rockspec thêm platform override section và gửi lại cho luarocks.orgfoo-1.0-2.rockspec.

Nếu rockspec của tôi nằm trong VCS và tôi gắn thẻ một cam kết cụ thể, sau đó không sửa chữa hiệu quả (các) rockspec được bao gồm trong cam kết đó và do đó phiên bản?

Có. Nhưng đó không phải là một vấn đề, bởi vì các rockspec được sử dụng khi xây dựng không phải là một trong những bao gồm với phân phối nguồn. Tệp .src.rock là tệp lưu trữ chứa tệp .rockspec và tarball mã nguồn (hoặc thanh toán nguồn trong một thư mục con nếu rockspec sử dụng giao thức SCM chẳng hạn như git://). Thật vậy, điều này dẫn đến một vấn đề về trứng và gà trong đó bản nhạc rockspec mới nhất cho Foo 1.0 không có khi kiểm tra thẻ v1.0 theo cách thủ công từ Github, nhưng đó không phải là luồng công việc dự kiến: khi sử dụng LuaRocks, một người dùng thường sẽ sử dụng luarocks install foo; và nếu họ muốn kiểm tra các rockspec cho một dự án, họ sẽ truy cập trang cho Foo tại luarocks.org hoặc họ sẽ xem xét các rockspec được lưu trữ trong HEAD, đó là nơi mọi người dừng lại đầu tiên. Lưu ý rằng tình huống gà và trứng tương tự xảy ra nếu một người muốn phân phối một tarball nguồn chứa một rockspec và sau đó muốn đặt tarball source.url và số source.md5 tương ứng của nó trong rockspec. Có một MD5 có ngụ ý rằng bản thân rockspec không thể ở bên trong tarball. Một cách xung quanh nó là chỉ đơn giản là tránh trường source.md5, hoặc bỏ qua các rockspec khi đóng gói tarball. Đây là tình huống tương tự sẽ xảy ra trong một sẽ bao gồm siêu dữ liệu gói phân phối Linux trong một tarball ngược dòng; nó hiển nhiên hơn ở đây bởi vì thượng lưu và đóng gói có xu hướng là cùng một người.

Làm thế nào lpeg có thể được liệt kê trên luarocks nhưng thiếu rockspec?

Có lẽ vì đây là trường hợp hiếm hoi mà thượng lưu và đóng gói không phải là cùng một người. Roberto Ierusalimschy phát hành lpeg, nhưng tính đến tháng 12 năm 2016, các rockspecs cho nó được tải lên bởi Gary Vaughan.

[...] những cái tôi thấy có số sửa đổi thấp (ví dụ: ldoc-scm-2.rockspec). Đây có phải là một sai lầm?

Điều này có thể có nhiều lý do và có thể do nhầm lẫn hay không.

  • Nếu rockspec sử dụng make nội dung sẵn có, khi đó rockspec scm sẽ không thay đổi khi tệp được thêm hoặc xóa;
  • Một số dự án không chỉ thay đổi tập hợp các tệp đó thường xuyên, do đó bản sửa đổi vẫn còn thấp;
  • Một số nhà phát triển lưu giữ các phiến đá scm tại -0 (như trong "không phải bản sửa đổi được phát hành") và không bao giờ tải chúng lên luarocks.org (chỉ giữ các phiên bản được phát hành ở đó).Vì vậy, một trong những bạn nhận được khi bạn lấy một bản sửa đổi git là một hợp lệ cho ảnh chụp đó. Tăng cường sửa đổi là một thực tế dự kiến ​​cho rockspecs phát hành để luarocks.org;
  • Các rockspec có thể thực sự lỗi thời và sau đó đó là một sai lầm.

Có bất kỳ ví dụ nào ở trên được coi là phương pháp hay nhất không?

Khách quan mà nói, kể từ khi tập tin rockspec sử dụng khi một chạy luarocks install foo là một gói bên trong các tập tin .src.rock, lưu giữ riêng với tài liệu lưu trữ nguồn, không có hậu quả thực tế lớn như là nơi chính xác trong cây nguồn một nhà phát triển lưu trữ rockspecs của họ. Đó là vấn đề của tổ chức cá nhân.

Giữ mới nhất scm rockspec ở gốc có lợi thế nhỏ là nó sẽ tự động được chọn bởi luarocks make nếu muốn tạo bản dựng từ cây được kiểm tra cục bộ.

Nhưng miễn là các bản rockspec được tải lên máy chủ với luarocks upload foo, trải nghiệm người dùng cuối sẽ giống nhau, bất kể vị trí các cột đá nằm trong cây nguồn.

+1

_'mã nguồn cần thay đổi ở tất cả'_ '->' _'mã nguồn không cần thay đổi gì cả'_? – Oka

+1

Điều này thật tuyệt vời, cảm ơn câu trả lời nhanh chóng và kỹ lưỡng! –

+0

@Oka: lỗi chính tả, cảm ơn! T và N là các phím liền kề trong Dvorak :) –

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