Subject: bug#60418: [PATCH] Add :vc keyword to use-package

From: Eli Zaretskii <[email-masked]>
Date: Fri, 05 May 2023 21:45:01 +0300

> From: Philip Kaludercic <[email-masked]>
> Cc: [email-masked],  [email-masked],
>   [email-masked],  [email-masked]
> Date: Fri, 05 May 2023 17:15:42 +0000
> 
> Eli Zaretskii <[email-masked]> writes:
> 
> >> No, the commit of the latest release is interpreted the same way as
> >> elpa-admin.el does, namely the last revision that modified the "Version"
> >> header.  If no such commit can be found, then a message is printed out
> >> and the installation continues under the assumption that the package is
> >> using a rolling-release model.
> >
> > I thought package-vc-install is used (or at least can be used) to
> > fetch the latest HEAD from the upstream repository?  I even thought
> > this was its main raison d'être?
> >
> > If that's not true, does it mean we have no means for package users to
> > track the latest development code of a package?
> 
> This is true, for package-vc-install, but the idea was not do this for
> the :vc keyword to use-package.

But I wrote the above as a comment to a patch to package-vc.el, not to
use-package.  So why use-package is relevant here?

> My understanding is that the main
> interest here is to install packages that are not available via package
> archives.  And as use-package is a popular means of bootstrapping a
> configuration, it seems the right approach to use the commit of the
> latest revision, instead of just any commit to avoid instability.

My understanding is that the :rev keyword allows to use any value that
is acceptable to package-vc-install.  I understand that in most cases
users will want to install the latest, but once we decided to support
:rev, we must allow any valid value there.  Right?

>    By default, this function installs the last revision of the
>    package available from its repository.  If REV is a string, it
>    describes the revision to install, as interpreted by the VC
>    backend.  The special value `:last-release' (interactively, the
>    prefix argument), will use the commit of the latest release, if
>    it exists.  The latest revision is determined by the latest
                     ^^^^^^^^^^^^^^^
"last release", not "latest revision": you are explaining what the
previous sentence said.

>    revision to modify the \"Version\" header of the main file.
> 
> But I couldn't come up with an elegant way to avoid the passive voice in
> the last sentence.

Here's one way:

  The last release is the latest revision which changed the
  \"Version:\" header of the package's main Lisp file.