package-vc 的使用问题

我最近从 straight 切换到了 package-vc,很多包都很顺利,但是有一个包出现了问题,就是 advance-words-count.el 这个包。

我是用如下代码来安装它:

(use-package advance-words-count
  :vc (advance-words-count :url "https://github.com/LdBeth/advance-words-count.el" :rev "master")
  )

就会出现这样的错误:

Debugger entered--Lisp error: (error "Version must be a string")
  error("Version must be a string")
  version-to-list((0))
  package-vc--unpack-1(#s(package-desc :name advance-words-count :version nil :summary "No description available." :reqs nil :kind vc :archive nil :dir "/home/thysrael/.emacs.d/elpa/advance-words-count/" :extras nil :signed nil) "/home/thysrael/.emacs.d/elpa/advance-words-count/")
  package-vc--unpack(#s(package-desc :name advance-words-count :version nil :summary "No description available." :reqs nil :kind vc :archive nil :dir "/home/thysrael/.emacs.d/elpa/advance-words-count/" :extras nil :signed nil) (:url "https://github.com/LdBeth/advance-words-count.el") "master")
  package-vc-install((advance-words-count :url "https://github.com/LdBeth/advance-words-count.el") "master")
  use-package-vc-install((advance-words-count (:url "https://github.com/LdBeth/advance-words-count.el") "master") nil)
  (progn (use-package-vc-install '(advance-words-count (:url "https://github.com/LdBeth/advance-words-count.el") "master") nil) (if (fboundp 'advance-words-count) nil (autoload #'advance-words-count "advance-words-count" nil t)))
  (progn (progn (use-package-vc-install '(advance-words-count (:url "https://github.com/LdBeth/advance-words-count.el") "master") nil) (if (fboundp 'advance-words-count) nil (autoload #'advance-words-count "advance-words-count" nil t))))
  eval((progn (progn (use-package-vc-install '(advance-words-count (:url "https://github.com/LdBeth/advance-words-count.el") "master") nil) (if (fboundp 'advance-words-count) nil (autoload #'advance-words-count "advance-words-count" nil t)))) t)
  elisp--eval-last-sexp(nil)
  #f(compiled-function () #<bytecode 0x632c08f4fbc2>)()
  eval-last-sexp(nil)
  funcall-interactively(eval-last-sexp nil)
  meow--keypad-execute(eval-last-sexp)
  meow--keypad-try-execute()
  meow--keypad-handle-input-event(101)
  meow--keypad-handle-input-with-keymap(101)
  meow-keypad-start-with("C-x")
  meow--execute-kbd-macro("C-x")
  meow-dispatch_5()
  funcall-interactively(meow-dispatch_5)
  meow--keypad-execute(meow-dispatch_5)
  meow--keypad-try-execute()
  meow--keypad-handle-input-event(106)
  meow--keypad-handle-input-with-keymap(106)
  meow-keypad-start-with(nil)
  meow-keypad()
  funcall-interactively(meow-keypad)
  command-execute(meow-keypad)

我不知道该怎么解决,来求教坛友了。

此外,我还注意到当我使用 :vc 关键字安装包的时候,似乎 package.el 还是会先从 package-archive 中遍历一遍,然后再下载,这就引入了极大的开销,请问有什么方法可以避免吗?

:rev :newest

在 package-vc.el 的 486 行开始出现问题

(thread-last
  (mapconcat #'identity require-lines " ")
  package-read-from-string
  lm--prepare-package-dependencies
  (nconc deps)
  (setq deps))

这里的 lm--prepare-package-dependencies 调用,对于这个包中的某一个依赖,返回的是 (pos-tip (0)),但是正常的返回值应该是 (pos-tip "0") ,不知道中途出现了什么问题。

另外导致这个问题出现是因为包中的 Package-Requires: 字段中的包没有写版本号,但这不应该是包作者的问题,应该是个 bug。

我找找问题去。

Version识别有问题,必须用Package-Version

请问有什么办法 workaround 吗?我尝试 fork 了一下,填入了 “0.4.5” 这个 version,但是依然会报错。

;; Package-Requires: (pos-tip "20240209.837")

正确的依赖列表是 ((p1 v1) (p2 v2) ...) ,比如

;; Package-Requires: ((emacs "29.1") (cl-lib "1.0"))

试试这个:

;; Package-Requires: ((pos-tip "0"))

另外这个包有两个文件,可能都需要修改一下。

1 个赞