Subject: bug#65752: 29.1; package-vc-install fails to install Helm package

From: Philip Kaludercic <[email-masked]>
Date: Sat, 09 Sep 2023 08:22:26 +0000

Thierry Volpiatto <[email-masked]> writes:

> Philip Kaludercic <[email-masked]> writes:
>
>> Thierry Volpiatto <[email-masked]> writes:
>>
>>> When running:
>>>
>>> (package-vc-install '(helm-core
>>>                       :url "https://github.com/emacs-helm/helm.git"
>>>                       :main-file "helm-core.el"))
>>>
>>> package-vc-install installs helm-core as intended but also make a full
>>> install of helm package in a helm-core directory; All its dependencies
>>> are also installed which is not expected.
>>
>> Does this have a practical consequence or cause usability problems?
>
> Of course, no body want to have such an installation.

But is this "just" an aesthetic issues, or does it break something?  If
the former, I'd say that this is a regrettable circumstance, but not
much can be done.  If actual, usability issues arise, then that is a
different matter.

>>> At the end I have two directories, ..elpa/helm-core and
>>> ../elpa/helm-core-2023..., the former containing all the helm files and
>>> the second only the helm-core files.
>>
>> I am afraid this is the consequence of maintaining multiple packages
>> inside the same git repository/directory.
>
> Ok, but this is something that exists and is handy for the developer.

I understand that, but my hope is that this we can dissuade developers
from using it, because of issues like these.  Feats such as these have
been achieved in the past, like with the usage of derived modes or the
standardisation of package headers.

Note that this doesn't mean you have to use separate Git repositories.
You can continue working in a single repository on multiple branches,
that are simultaneously checked out in separate worktrees.

>> Given the intentions of package-vc, to make contributing to packages
>> easier by giving users a direct checkout of the development
>> dependencies, I currently do not see a way around this issue :/
>
> Perhaps look at how straight works (it fetch the recipes from package
> site i.e. MElpa or Elpa)?

As far as I know, their approach is not applicable (they check out the
repository in a separate directory, then symlink the files into a
separate directory that it then loaded -- which doesn't give the users a
direct checkout anymore), because they have different goals.  Keep in
mind that straight is package manager onto itself, while package-vc is
an extension of package.el, so comparing the two doesn't always work
out.

>>> Thanks.
>>>
>>>
>>>
>>> In GNU Emacs 29.1 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo
>>>  version 1.16.0, Xaw3d scroll bars) of 2023-08-16 built on IPad-S340
>>> Windowing system distributor 'The X.Org Foundation', version 11.0.12101004
>>> System Description: Linux Mint 21.2
>>>
>>> Configured using:
>>>  'configure CFLAGS=-O8 --bindir=/usr/local/sbin/emacs-29.1
>>>  --with-mailutils --with-cairo --with-x-toolkit=lucid
>>>  --without-tree-sitter --without-native-compilation'
>>>
>>> Configured features:
>>> ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
>>> JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NOTIFY
>>> INOTIFY PDUMPER PNG RSVG SECCOMP SOUND THREADS TIFF TOOLKIT_SCROLL_BARS
>>> X11 XAW3D XDBE XIM XINPUT2 XPM LUCID ZLIB
>>>
>>> Important settings:
>>>   value of $LANG: fr_FR.UTF-8
>>>   locale-coding-system: utf-8-unix
>>>
>>> Major mode: 
>>>
>>> Minor modes in effect:
>>>   emms-mode-line-mode: t
>>>   emms-playing-time-display-mode: t
>>>   emms-playing-time-mode: t
>>>   server-mode: t
>>>   psession-mode: t
>>>   psession-savehist-mode: t
>>>   global-undo-tree-mode: t
>>>   undo-tree-mode: t
>>>   global-git-gutter-mode: t
>>>   display-time-mode: t
>>>   winner-mode: t
>>>   tv-save-place-mode: t
>>>   helm-epa-mode: t
>>>   helm-descbinds-mode: t
>>>   helm-top-poll-mode: t
>>>   helm-adaptive-mode: t
>>>   helm-mode: t
>>>   helm-minibuffer-history-mode: t
>>>   helm-ff-icon-mode: t
>>>   shell-dirtrack-mode: t
>>>   helm-popup-tip-mode: t
>>>   async-bytecomp-package-mode: t
>>>   dired-async-mode: t
>>>   minibuffer-depth-indicate-mode: t
>>>   gcmh-mode: t
>>>   tooltip-mode: t
>>>   global-eldoc-mode: t
>>>   eldoc-mode: t
>>>   show-paren-mode: t
>>>   mouse-wheel-mode: t
>>>   file-name-shadow-mode: t
>>>   global-font-lock-mode: t
>>>   font-lock-mode: t
>>>   column-number-mode: t
>>>   line-number-mode: t
>>>   transient-mark-mode: t
>>>   auto-composition-mode: t
>>>   auto-encryption-mode: t
>>>   auto-compression-mode: t
>>>
>>> Load-path shadows:
>>> /home/thierry/.emacs.d/elpa/boxquote-20220919.714/boxquote hides ~/elisp/boxquote
>>>
>>> Features:
>>> (shadow epa-mail face-remap emacsbug addressbook-bookmark tv-mu4e-config
>>> config-w3m mu4e-contrib mu4e-patch mu4e mu4e-org org-config ob-gnuplot
>>> org-crypt org-protocol org ob ob-tangle ob-ref ob-lob ob-table ob-exp
>>> org-macro org-src ob-comint org-pcomplete org-list org-footnote
>>> org-faces org-entities ob-emacs-lisp ob-core ob-eval org-cycle org-table
>>> ol org-fold org-fold-core org-keys oc org-loaddefs org-version
>>> org-compat org-macs mu4e-notification notifications mu4e-main mu4e-view
>>> mu4e-mime-parts gnus-art mm-uu mml2015 mm-view mml-smime smime dig
>>> gnus-sum gnus-group gnus-undo gnus-start gnus-dbus gnus-cloud nnimap
>>> nnmail mail-source utf7 nnoo gnus-spec gnus-int gnus-range gnus-win gnus
>>> nnheader range appt diary-lib diary-loaddefs cal-menu calendar
>>> cal-loaddefs mu4e-headers mu4e-thread mu4e-compose mu4e-draft
>>> mu4e-actions smtpmail mu4e-search mu4e-lists mu4e-bookmarks mu4e-mark
>>> mu4e-message shr pixel-fill kinsoku url-file svg dom flow-fill hl-line
>>> mu4e-contacts mu4e-update mu4e-folders mu4e-context mu4e-query-items
>>> mu4e-server mu4e-modeline mu4e-vars mu4e-helpers mu4e-config mu4e-window
>>> ido mu4e-obsolete helm-ring char-fold image-file image-converter dired-x
>>> ffap helm-core-autoloads popup-autoloads wfnames-autoloads
>>> async-autoloads loaddefs-gen tar-mode arc-mode archive-mode jka-compr
>>> cl-print cl-indent helm-firefox shortdoc helm-dabbrev package-vc
>>> lisp-mnt em-unix em-term term disp-table ehelp em-script em-prompt em-ls
>>> em-hist em-pred em-glob em-extpipe em-cmpl em-dirs esh-var em-basic
>>> em-banner em-alias esh-mode eshell esh-cmd generator esh-ext esh-opt
>>> esh-proc esh-io esh-arg esh-module esh-groups esh-util esh-toggle
>>> cl-extra helm-command helm-elisp helm-eval edebug debug backtrace
>>> find-func smerge-mode helm-x-files helm-for-files helm-bookmark
>>> helm-info bookmark emms-config emms-librefm-stream
>>> emms-librefm-scrobbler emms-playlist-limit emms-i18n emms-history
>>> emms-score emms-stream-info emms-metaplaylist-mode emms-bookmarks
>>> emms-cue emms-mode-line-icon emms-browser sort emms-volume
>>> emms-volume-sndioctl emms-volume-mixerctl emms-volume-pulse
>>> emms-volume-amixer emms-playlist-sort emms-last-played emms-player-xine
>>> emms-player-mpd tq emms-lyrics emms-url emms-streams emms-show-all
>>> emms-tag-editor emms-tag-tracktag emms-mark emms-mode-line emms-cache
>>> emms-info-native bindat emms-info-exiftool emms-info-tinytag
>>> emms-info-metaflac emms-info-opusinfo emms-info-ogginfo
>>> emms-info-mp3info emms-playlist-mode emms-player-vlc emms-player-mpv
>>> emms-playing-time emms-info emms-later-do emms-player-mplayer
>>> emms-player-simple emms-source-playlist emms-source-file locate
>>> emms-setup emms emms-compat emms-auto helm-external helm-net mm-archive
>>> message sendmail yank-media rfc822 mml mml-sec gnus-util mailabbrev
>>> gmm-utils mailheader mm-decode mm-bodies mm-encode mail-utils gnutls
>>> network-stream url-cache url-http url-auth mail-parse rfc2231 rfc2047
>>> rfc2045 mm-util ietf-drums mail-prsvr url-gw nsm puny tramp-archive
>>> tramp-gvfs tramp-cache time-stamp zeroconf dbus xml finder-inf
>>> helm-packages helm-ls-git vc-git diff-mode vc vc-dispatcher
>>> emacs-news-mode noutline outline flymake-shellcheck cus-start
>>> flymake-proc flymake project warnings thingatpt sh-script smie treesit
>>> executable bug-reference naquadah-theme server imenu psession frameset
>>> undo-tree diff queue pcase git-gutter mule-util dired-extension time
>>> winner describe-variable help-fns radix-tree help-mode tv-utils
>>> tv-save-place.el advice init-helm epa derived epg rfc6068 epg-config
>>> helm-epa isl helm-descbinds all-the-icons all-the-icons-faces
>>> data-material data-weathericons data-octicons data-fileicons
>>> data-faicons data-alltheicons cus-edit pp icons wid-edit helm-sys popup
>>> helm-adaptive helm-mode helm-misc helm-files image-dired
>>> image-dired-tags image-dired-external image-dired-util xdg image-mode
>>> exif filenotify tramp tramp-loaddefs trampver tramp-integration files-x
>>> tramp-compat rx shell pcomplete parse-time iso8601 time-date
>>> helm-buffers helm-occur helm-tags helm-locate helm-grep wgrep-helm wgrep
>>> grep compile text-property-search comint ansi-osc ring helm-regexp
>>> format-spec ansi-color helm-utils helm-help helm-types
>>> helm-extensions-autoloads helm-autoloads helm helm-global-bindings
>>> helm-easymenu edmacro kmacro helm-core easy-mmode async-bytecomp
>>> helm-source helm-multi-match helm-lib dired-async async dired-aux dired
>>> dired-loaddefs mb-depth avoid cus-load gcmh boxquote-autoloads
>>> gcmh-autoloads ledger-mode-autoloads markdown-mode-autoloads
>>> osm-autoloads compat-autoloads rainbow-mode-autoloads info w3m-load
>>> w3m-autoloads package browse-url url url-proxy url-privacy url-expand
>>> url-methods url-history url-cookie generate-lisp-file url-domsuf
>>> url-util mailcap url-handlers url-parse auth-source cl-seq eieio
>>> eieio-core cl-macs password-cache json subr-x map byte-opt gv bytecomp
>>> byte-compile url-vars cl-loaddefs cl-lib rmc iso-transl tooltip cconv
>>> eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type
>>> elisp-mode mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd
>>> fontset image regexp-opt fringe tabulated-list replace newcomment
>>> text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow
>>> isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax
>>> font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic
>>> indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
>>> tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
>>> romanian slovak czech european ethiopic indian cyrillic chinese
>>> composite emoji-zwj charscript charprop case-table epa-hook
>>> jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
>>> theme-loaddefs faces cus-face macroexp files window text-properties
>>> overlay sha1 md5 base64 format env code-pages mule custom widget keymap
>>> hashtable-print-readable backquote threads dbusbind inotify lcms2
>>> dynamic-setting system-font-setting font-render-setting cairo x-toolkit
>>> xinput2 x multi-tty make-network-process emacs)
>>>
>>> Memory information:
>>> ((conses 16 1632011 277793)
>>>  (symbols 48 46585 25)
>>>  (strings 32 368359 41647)
>>>  (string-bytes 1 10334018)
>>>  (vectors 16 95280)
>>>  (vector-slots 8 2002230 281875)
>>>  (floats 8 2332 1240)
>>>  (intervals 56 21405 3242)
>>>  (buffers 976 120))
>>> <#secure method=pgpmime mode=sign>