-
Notifications
You must be signed in to change notification settings - Fork 451
Dev notes on package install and initialization procedures
el-get calls el-get-init-and-install which calls
el-get-do-install on non-installed package and then
el-get-do-init on installed ones.
el-get-do-install calls the :install method for a package like
this: (funcall install package url 'el-get-post-install). Taking
:git as an example, el-get-git-pull then runs git clone
asynchronously using el-get-start-process-list and
el-get-post-install becomes the sentinel function, so it gets
called after the installation really finishes.
At this point the package has been downloaded and unpacked in
~/.emacs.d/el-get/<package>.
el-get-post-install runs any method specific :install-hooks, and
then calls (el-get-build package commands nil sync 'el-get-post-install-build) (except for :type builtin, which calls
el-get-post-install-build directly).
el-get-build passes the build commands to el-get-start-process,
with a complicated lambda expression as the final-func. So in
all, at this stage we build (according to el-get-build-commands), do
byte-compilation, optionally do info installation (via
el-get-install-or-init-info which calls el-get-build again,
recursively). And finally we should end up at
el-get-post-install-build.
(defun el-get-post-install-build (package)
"Function to call after building the package while installing it."
(el-get-save-package-status package "installed")
(el-get-invalidate-autoloads package) ; that will also update them
(el-get-do-init package)
(run-hook-with-args 'el-get-post-install-hooks package))el-get-post-install-hooks is only
(el-get-post-install-notification) (unless the user has added more
hooks).
el-get -> el-get-init-and-install -> el-get-do-init is the main
starting point (we can also get there via el-get-reload -> el-get-init -> el-get-do-init.
el-get-do-init first adds the package directory to load-path, then
loads :autoloads listed files, if any (NOTE: it's not the extracted
;;;###autoload cookies; this is more like pre-load than auto-load,
though it's intended to be used with package supplied autoload
files).
Then run the :prepare and :before blocks.
- For lazy packages,
eval-after-loadthe:post-initand:afterblocks. - For non-lazy packages, load any files listed in
:load, require any features listed in:features(NOTE::featuresskipped for:type elpa, maybe wrongly, see #969), and then run the:post-initand:afterblocks.
Finally, run el-get-post-init-hooks, which will usually be just
el-get-post-init-message, except for when this hook is used to daisy
chain asynchronous installs and updates.
Calculated by el-get-dependencies.
Use by:
-
el-get-init: init all dependencies before the package itself. -
el-get-install: install dependencies before the package itself. -
el-get-update: installs any new dependencie before updating. -
el-get-cleanup: decide what to keep. -
el-get-init-and-install: likeel-get-initandel-get-install.