2011-12-27 29 views
8

Tôi đang cố gắng để tải lên gói đầu tiên của tôi để Hackage (yay!), Và tôi đã nhận lỗi này:Haskell: Kiểm tra một gói chống lại nhiều phiên bản của cơ sở cho Hackage

The dependency 'build-depends: base' does not specify an upper bound on the version number. Each major release of the 'base' package changes the API in various ways and most packages will need some changes to compile with it. The recommended practise is to specify an upper bound on the version of the 'base' package. This ensures your package will continue to build when a new major version of the 'base' package is released. If you are not sure what upper bound to use then use the next major version. For example if you have tested your package with 'base' version 2 and 3 then use 'build-depends: base >= 2 && < 4'.

Mà có vẻ như một cách hoàn hảo có thể chấp nhận lý do từ chối gói của tôi.

Có một công cụ tốt để kiểm tra gói của tôi đối với các phiên bản khác nhau của base để tôi có thể xem giới hạn đó là gì (thay vì chỉ đoán)? Điều tốt nhất tôi có thể nghĩ đến là sử dụng một số kịch bản shell để làm một cái gì đó như:

% for v in $BASE_VERSIONS 
do 
    cabal install base-$v &&\ 
    cabal configure --enable-tests &&\ 
    cabal build &&\ 
    cabal test && echo "$v ok" || echo "$v fail" 
done 

Nhưng tôi cảm thấy như không nên có một cái gì đó tốt hơn.

Trả lời

9

Đây là một ý tưởng rất tồi tệ! Bạn phải không phải là cơ sở nâng cấp hoặc any other packages that come with GHC (những người có - trong cột thẻ) hoặc mọi thứ sẽ phá vỡ khủng khiếp.

Cách duy nhất để kiểm tra với phiên bản cũ hơn là cài đặt GHC cũ hơn và thử nghiệm với điều đó. Tôi sẽ đề nghị chỉ cần thử nó trên 7.0.4 và 7.2.2; hỗ trợ các phiên bản cũ hơn có lẽ là một sự lãng phí thời gian những ngày này.

Nếu không, chỉ cần chỉ định base >= VERSION && < 5, trong đó VERSION là phiên bản mà GHC của bạn có. Hoặc base == 4.* và hy vọng điều tốt nhất :)

Trong tất cả các mức độ nghiêm trọng, API của cơ sở không thực sự thay đổi nhiều, do đó bạn không gặp phải nhiều vấn đề với điều này.

Để thử nghiệm chương trình của bạn với các phiên bản gói khác nhau nói chung mà không làm phiền kho lưu trữ chính của bạn ~/.cabal, tôi khuyên bạn nên cabal-dev; một cái gì đó như

$ cabal-dev install 'pkg==VERSION' 
$ cabal-dev install 
$ cabal-dev test 

nên làm điều đó.

Nhân tiện, bạn có thể làm cabal check để được cảnh báo về các vấn đề như thế này trước khi tải gói của bạn lên Hackage.

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