From 3f4a0d5370ae6c34afe180df96add3b8522f4af1 Mon Sep 17 00:00:00 2001 From: mattkae Date: Wed, 11 May 2022 09:23:58 -0400 Subject: initial commit --- elpa/req-package-20180605.1141/req-package-args.el | 31 ++ .../req-package-20180605.1141/req-package-args.elc | Bin 0 -> 1150 bytes .../req-package-autoloads.el | 50 +++ .../req-package-cycles.el | 35 ++ .../req-package-cycles.elc | Bin 0 -> 1572 bytes .../req-package-20180605.1141/req-package-hooks.el | 26 ++ .../req-package-hooks.elc | Bin 0 -> 1236 bytes elpa/req-package-20180605.1141/req-package-pkg.el | 15 + elpa/req-package-20180605.1141/req-package.el | 494 +++++++++++++++++++++ elpa/req-package-20180605.1141/req-package.elc | Bin 0 -> 19471 bytes 10 files changed, 651 insertions(+) create mode 100644 elpa/req-package-20180605.1141/req-package-args.el create mode 100644 elpa/req-package-20180605.1141/req-package-args.elc create mode 100644 elpa/req-package-20180605.1141/req-package-autoloads.el create mode 100644 elpa/req-package-20180605.1141/req-package-cycles.el create mode 100644 elpa/req-package-20180605.1141/req-package-cycles.elc create mode 100644 elpa/req-package-20180605.1141/req-package-hooks.el create mode 100644 elpa/req-package-20180605.1141/req-package-hooks.elc create mode 100644 elpa/req-package-20180605.1141/req-package-pkg.el create mode 100644 elpa/req-package-20180605.1141/req-package.el create mode 100644 elpa/req-package-20180605.1141/req-package.elc (limited to 'elpa/req-package-20180605.1141') diff --git a/elpa/req-package-20180605.1141/req-package-args.el b/elpa/req-package-20180605.1141/req-package-args.el new file mode 100644 index 0000000..bdcbab1 --- /dev/null +++ b/elpa/req-package-20180605.1141/req-package-args.el @@ -0,0 +1,31 @@ +;;; req-package-args.el --- summary: +;;; commentary: +;;; code: + +(require 'dash) + +(defconst req-package-keywords '(:require :force)) + +(defun req-package-args-take-args (args acc) + "Take all args until next keyword." + (cond ((or (null args) + (and (keywordp (car args)) + (or (-contains? use-package-keywords (car args)) + (-contains? req-package-keywords (car args))))) (list (reverse acc) args)) + (t (req-package-args-take-args (cdr args) (cons (car args) acc))))) + +(defun req-package-args-extract-arg (key args acc) + "Extract KEY value from ARGS list accummulating with ACC." + (if (null args) + (list nil (reverse acc)) + (if (eq (car args) key) + (let* ((REST (cdr args)) + (ALL (req-package-args-take-args REST nil)) + (KEY-ARGS (car ALL)) + (REST-ARGS (cadr ALL))) + (list KEY-ARGS + (append (reverse acc) REST-ARGS))) + (req-package-args-extract-arg key (cdr args) (cons (car args) acc))))) + +(provide 'req-package-args) +;;; req-package-args ends here diff --git a/elpa/req-package-20180605.1141/req-package-args.elc b/elpa/req-package-20180605.1141/req-package-args.elc new file mode 100644 index 0000000..a810b81 Binary files /dev/null and b/elpa/req-package-20180605.1141/req-package-args.elc differ diff --git a/elpa/req-package-20180605.1141/req-package-autoloads.el b/elpa/req-package-20180605.1141/req-package-autoloads.el new file mode 100644 index 0000000..25b04f0 --- /dev/null +++ b/elpa/req-package-20180605.1141/req-package-autoloads.el @@ -0,0 +1,50 @@ +;;; req-package-autoloads.el --- automatically extracted autoloads +;; +;;; Code: + +(add-to-list 'load-path (directory-file-name + (or (file-name-directory #$) (car load-path)))) + + +;;;### (autoloads nil "req-package" "req-package.el" (0 0 0 0)) +;;; Generated autoloads from req-package.el + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "req-package" '("req-package"))) + +;;;*** + +;;;### (autoloads nil "req-package-args" "req-package-args.el" (0 +;;;;;; 0 0 0)) +;;; Generated autoloads from req-package-args.el + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "req-package-args" '("req-package-"))) + +;;;*** + +;;;### (autoloads nil "req-package-cycles" "req-package-cycles.el" +;;;;;; (0 0 0 0)) +;;; Generated autoloads from req-package-cycles.el + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "req-package-cycles" '("req-package-cycles-"))) + +;;;*** + +;;;### (autoloads nil "req-package-hooks" "req-package-hooks.el" +;;;;;; (0 0 0 0)) +;;; Generated autoloads from req-package-hooks.el + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "req-package-hooks" '("add-hook-exec" "req-package-hooks-"))) + +;;;*** + +;;;### (autoloads nil nil ("req-package-pkg.el") (0 0 0 0)) + +;;;*** + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; coding: utf-8 +;; End: +;;; req-package-autoloads.el ends here diff --git a/elpa/req-package-20180605.1141/req-package-cycles.el b/elpa/req-package-20180605.1141/req-package-cycles.el new file mode 100644 index 0000000..73d982e --- /dev/null +++ b/elpa/req-package-20180605.1141/req-package-cycles.el @@ -0,0 +1,35 @@ +;;; req-package-cycles.el --- summary: +;;; commentary: +;;; code: + +(require 'dash) + +(defvar req-package-cycles-count 0 + "Number of cycles detected.") + +(defun req-package-cycles-detect-traverse-impl (graph visited cur path) + "Traverse for cycles look up implementation" + (puthash cur t visited) + (if (not (-contains? path cur)) + (-each (gethash cur graph nil) + (lambda (dependent) + (req-package-cycles-detect-traverse-impl graph visited dependent (cons cur path)))) + (progn (setq req-package-cycles-count (+ req-package-cycles-count 1)) + (req-package--log-error "cycle detected: %s" (cons cur path))))) + +(defun req-package-cycles-detect-traverse (graph visited) + "Traverse for cycles look up" + (maphash (lambda (key value) + (if (null (gethash key visited nil)) + (req-package-cycles-detect-traverse-impl graph visited key nil))) + graph) + (if (not (eq 0 req-package-cycles-count)) + (message "%s cycle(s) detected. see M-x req-package--log-open-log" + req-package-cycles-count))) + +(defun req-package-cycles-detect (graph) + (setq req-package-cycles-count 0) + (req-package-cycles-detect-traverse graph (make-hash-table :size 200))) + +(provide 'req-package-cycles) +;;; req-package-cycles ends here diff --git a/elpa/req-package-20180605.1141/req-package-cycles.elc b/elpa/req-package-20180605.1141/req-package-cycles.elc new file mode 100644 index 0000000..8e0a89b Binary files /dev/null and b/elpa/req-package-20180605.1141/req-package-cycles.elc differ diff --git a/elpa/req-package-20180605.1141/req-package-hooks.el b/elpa/req-package-20180605.1141/req-package-hooks.el new file mode 100644 index 0000000..b12d2c3 --- /dev/null +++ b/elpa/req-package-20180605.1141/req-package-hooks.el @@ -0,0 +1,26 @@ +;;; req-package-hooks.el --- summary: +;;; commentary: +;;; code: + +(defun req-package-hooks-mode-loaded-p (mode) + "Return true if MODE is loaded now." + (or (assoc mode minor-mode-list) (equal major-mode mode))) + +(defun req-package-hooks-add-execute-impl (m h f) + "Add function F to hook H and execute it if mode M is already activated" + (add-hook h f) + (if (req-package-hooks-mode-loaded-p m) + (funcall f))) + +(defun req-package-hooks-add-execute (m f) + "Add function F to mode M and execute it if already activated" + (let ((h (intern (concat (symbol-name m) "-hook")))) + (req-package-hooks-add-execute-impl m h f))) + +(defun add-hook-exec (m f &optional ff) + (if ff + (req-package-hooks-add-execute-impl m f ff) + (req-package-hooks-add-execute m f))) + +(provide 'req-package-hooks) +;;; req-package-hooks ends here diff --git a/elpa/req-package-20180605.1141/req-package-hooks.elc b/elpa/req-package-20180605.1141/req-package-hooks.elc new file mode 100644 index 0000000..ad47738 Binary files /dev/null and b/elpa/req-package-20180605.1141/req-package-hooks.elc differ diff --git a/elpa/req-package-20180605.1141/req-package-pkg.el b/elpa/req-package-20180605.1141/req-package-pkg.el new file mode 100644 index 0000000..bab68a3 --- /dev/null +++ b/elpa/req-package-20180605.1141/req-package-pkg.el @@ -0,0 +1,15 @@ +(define-package "req-package" "20180605.1141" "A use-package wrapper for package runtime dependencies management" + '((use-package "1.0") + (dash "2.7.0") + (log4e "0.2.0") + (ht "0")) + :commit "a77da72931914ac5f3f64dc61fe9dc3522b2817e" :authors + '(("Edward Knyshov" . "edvorg@gmail.com")) + :maintainer + '("Edward Knyshov" . "edvorg@gmail.com") + :keywords + '("dotemacs" "startup" "speed" "config" "package") + :url "https://github.com/edvorg/req-package") +;; Local Variables: +;; no-byte-compile: t +;; End: diff --git a/elpa/req-package-20180605.1141/req-package.el b/elpa/req-package-20180605.1141/req-package.el new file mode 100644 index 0000000..d209d50 --- /dev/null +++ b/elpa/req-package-20180605.1141/req-package.el @@ -0,0 +1,494 @@ +;;; req-package.el --- A use-package wrapper for package runtime dependencies management + +;; Copyright (C) 2013-2018 Edward Knyshov + +;; Author: Edward Knyshov +;; Created: 25 Dec 2013 +;; Version: 1.3 +;; Package-Requires: ((use-package "1.0") (dash "2.7.0") (log4e "0.2.0") (ht "0")) +;; Keywords: dotemacs startup speed config package +;; X-URL: https://github.com/edvorg/req-package + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 3, or (at +;; your option) any later version. + +;; This program is distributed in the hope that it will be useful, but +;; WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;; Table of Contents +;; ───────────────── + +;; 1 req-package +;; .. 1.1 Description +;; .. 1.2 Usage +;; .. 1.3 Logging +;; .. 1.4 Migrate from use-package +;; .. 1.5 Note +;; .. 1.6 Contribute +;; .. 1.7 Changelog +;; ..... 1.7.1 `v1.3' +;; ..... 1.7.2 `v1.2' +;; ..... 1.7.3 `v1.1' +;; ..... 1.7.4 `v1.0' +;; ..... 1.7.5 `v0.9' +;; ..... 1.7.6 `v0.8' +;; ..... 1.7.7 `v0.7' +;; ..... 1.7.8 `v0.6' +;; ..... 1.7.9 `v0.5' +;; ..... 1.7.10 `v0.4.2' +;; ..... 1.7.11 `v0.4.1' +;; ..... 1.7.12 `v0.4-all-cycles' +;; ..... 1.7.13 `v0.3-cycles' +;; ..... 1.7.14 `v0.2-auto-fetch' + + +;; 1 req-package +;; ═════════════ + +;; [file:https://img.shields.io/badge/license-GPL_3-green.svg] +;; [file:http://melpa.org/packages/req-package-badge.svg] +;; [file:http://stable.melpa.org/packages/req-package-badge.svg] +;; [file:https://travis-ci.org/edvorg/req-package.svg] +;; [file:https://coveralls.io/repos/edvorg/req-package/badge.svg?branch=develop&service=github] + + +;; [file:https://img.shields.io/badge/license-GPL_3-green.svg] +;; http://www.gnu.org/licenses/gpl-3.0.txt + +;; [file:http://melpa.org/packages/req-package-badge.svg] +;; http://melpa.org/#/req-package + +;; [file:http://stable.melpa.org/packages/req-package-badge.svg] +;; http://stable.melpa.org/#/req-package + +;; [file:https://travis-ci.org/edvorg/req-package.svg] +;; https://travis-ci.org/edvorg/req-package + +;; [file:https://coveralls.io/repos/edvorg/req-package/badge.svg?branch=develop&service=github] +;; https://coveralls.io/github/edvorg/req-package?branch=develop + +;; 1.1 Description +;; ─────────────── + +;; `req-package' provides dependency management for use-package. This +;; allows to write simple and modular configs. Migration from +;; use-package is simple and syntax is almost same. + + +;; 1.2 Usage +;; ───────── + +;; Load req-package: + +;; ┌──── +;; │ (require 'req-package) +;; │ +;; │ (req-package use-package-el-get ;; prepare el-get support for use-package (optional) +;; │ :force t ;; load package immediately, no dependency resolution +;; │ :config +;; │ (add-to-list 'el-get-recipe-path "~/.emacs.d/el-get/el-get/recipes") +;; │ (el-get 'sync) +;; │ (use-package-el-get-setup)) +;; └──── + +;; Define required packages with dependencies using `:require'. Use +;; `:force t' if you want to avoid dependency management and load right +;; now. Use `:el-get t' or `:el-get package-name' if you want to install +;; from el-get (Requires `use-package-el-get' package setup like +;; described above). + +;; ┌──── +;; │ ;; init-dired.el +;; │ +;; │ (req-package dired) ;; this form is optional as it doesn't have any configuration +;; │ +;; │ (req-package dired-single +;; │ :require dired ;; depends on dired +;; │ :config (...)) +;; │ +;; │ (req-package dired-isearch +;; │ :require dired ;; depends on dired +;; │ :config (...)) +;; │ +;; │ ;; init-lua.el +;; │ +;; │ (req-package lua-mode +;; │ :config (...)) +;; │ +;; │ (req-package flymake-lua +;; │ :require flymake lua-mode +;; │ :config (...)) +;; │ +;; │ ;; init-flymake.el +;; │ +;; │ (req-package flymake +;; │ :config (...)) +;; │ +;; │ (req-package flymake-cursor +;; │ :require flymake +;; │ :config (...)) +;; │ +;; │ (req-package flymake-custom +;; │ :require flymake +;; │ :load-path "/path/to/file/directory" +;; │ :config (...)) +;; └──── + +;; Solve dependencies, install and load packages in right order: + +;; ┌──── +;; │ ;; order doesn't matter here +;; │ (require 'init-dired) +;; │ (require 'init-lua) +;; │ (require 'init-flymake) +;; │ (req-package-finish) +;; └──── + + +;; 1.3 Logging +;; ─────────── + +;; You can use `req-package--log-open-log' to see, what is happening with +;; your configuration. You can choose log level in `req-package' group +;; by `req-package-log-level' custom. These log levels are supported: +;; `fatal', `error', `warn', `info', `debug', `trace'. + + +;; 1.4 Migrate from use-package +;; ──────────────────────────── + +;; Just replace all `(use-package ...)' with `(req-package [:require +;; DEPS] ...)' and add `(req-package-finish)' at the end of your +;; configuration file. There is a `:force' keyword which simulates plain +;; old use-package behavior. + + +;; 1.5 Note +;; ──────── + +;; More complex req-package usage example can be found at +;; [https://github.com/edvorg/emacs-configs]. + +;; Use `load-dir' package to load all `*.el' files in a dir (e.g +;; `~/.emacs.d/init.d') + + +;; 1.6 Contribute +;; ────────────── + +;; Please, pull-request your changes to `develop' branch. Master is used +;; for automatic *release* package builds by travis-ci. + + +;; 1.7 Changelog +;; ───────────── + +;; 1.7.1 `v1.3' +;; ╌╌╌╌╌╌╌╌╌╌╌╌ + +;; • :el-get keyword support moved to separate package +;; [use-package-el-get] + + +;; [use-package-el-get] https://github.com/edvorg/use-package-el-get + + +;; 1.7.2 `v1.2' +;; ╌╌╌╌╌╌╌╌╌╌╌╌ + +;; • add :el-get keyword + + +;; 1.7.3 `v1.1' +;; ╌╌╌╌╌╌╌╌╌╌╌╌ + +;; • due to use-package being mature enough drop providers system + + +;; 1.7.4 `v1.0' +;; ╌╌╌╌╌╌╌╌╌╌╌╌ + +;; • once you called `req-package-finish' you are able reload package +;; just by reload `req-package' form +;; • proper errors handling. see `req-package--log-open-log' for messages +;; • smart add-hook which invokes function if mode is loaded +;; • refactor providers system +;; • no need to use progn in :init and :config sections +;; • no need to use list literal in :require section +;; • `:loader' keyword now accepts loaders as keywords or as functions. +;; e.g. `:el-get', `:elpa', `:built-in', `:path' and `my-loader-fn' +;; • `req-package-force' replaced with `:force' keyword + + +;; 1.7.5 `v0.9' +;; ╌╌╌╌╌╌╌╌╌╌╌╌ + +;; • `:loader' keyword support + + +;; 1.7.6 `v0.8' +;; ╌╌╌╌╌╌╌╌╌╌╌╌ + +;; • bugfixes + + +;; 1.7.7 `v0.7' +;; ╌╌╌╌╌╌╌╌╌╌╌╌ + +;; • fixed some issues with packages installation. all packages will be +;; installed at bootstrap time +;; • custom package providers support by `req-package-providers' +;; • priority feature for cross provider packages loading. you can +;; choose, what to try first - elpa, el-get, or something else + + +;; 1.7.8 `v0.6' +;; ╌╌╌╌╌╌╌╌╌╌╌╌ + +;; • `el-get' support + + +;; 1.7.9 `v0.5' +;; ╌╌╌╌╌╌╌╌╌╌╌╌ + +;; • Major system refactoring. +;; • Fixed bugs with defered loading. +;; • Significant performance optimization. +;; • `max-specpdl-size', `max-lisp-eval-depth' issues completely solved. +;; • Flexible `:require' keyword parsing. + + +;; 1.7.10 `v0.4.2' +;; ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ + +;; • Bug fixes. + + +;; 1.7.11 `v0.4.1' +;; ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ + +;; • Various tweaks and bug fixes. + + +;; 1.7.12 `v0.4-all-cycles' +;; ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ + +;; • All cycles of your dependencies will be printed now. +;; • Also there are more handy log messages and some bug fixes. + + +;; 1.7.13 `v0.3-cycles' +;; ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ + +;; • There are nice error messages about cycled dependencies now. +;; • Cycles printed in a way: `pkg1 -> [pkg2 -> ...] pkg1'. +;; • It means there is a cycle around `pkg1'. + + +;; 1.7.14 `v0.2-auto-fetch' +;; ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ + +;; • There is no need of explicit `:ensure' in your code now. +;; • When you req-package it adds `:ensure' if package is available in +;; your repos. +;; • Also package deps `:ensure''d automatically too. +;; • Just write `(req-package pkg1 :require pkg2)' and all you need will +;; be installed. + +;;; Code: + +(eval-when-compile (require 'cl)) +(require 'package) + +(defun req-package-bootstrap (package) + "Refresh package archives, check PACKAGE presence and install if it's not installed." + (if (null (require package nil t)) + (progn (let* ((ARCHIVES (if (null package-archive-contents) + (progn (package-refresh-contents) + package-archive-contents) + package-archive-contents)) + (AVAIL (assoc package ARCHIVES))) + (if AVAIL + (package-install package)))))) + +(req-package-bootstrap 'use-package) +(req-package-bootstrap 'dash) +(req-package-bootstrap 'log4e) +(req-package-bootstrap 'ht) + +(require 'use-package) +(require 'dash) +(require 'log4e) +(require 'ht) + +(require 'req-package-hooks) +(require 'req-package-args) +(require 'req-package-cycles) + +(defgroup req-package nil + "A package loading system" + :group 'emacs) + +(defcustom req-package-log-level 'info + "Minimal log level, may be any level supported by log4e." + :group 'req-package) + +(defvar req-package-required-by (make-hash-table :size 200 :test 'equal) + "Package symbol -> list of packages dependent on it.") + +(defvar req-package-deps-left (make-hash-table :size 200 :test 'equal) + "Package symbol -> loaded dependencies counter.") + +(defvar req-package-evals (make-hash-table :size 200 :test 'equal) + "Package symbol -> loading code prepared for evaluation.") + +(defvar req-package-branches (make-hash-table :size 200 :test 'equal)) + +(defun req-package-patch-config (pkg form) + "Wrap package PKG :config FORM into progn with callbacks." + (list 'progn + (list 'req-package-handle-loading (list 'quote pkg) (list 'lambda () form)) + (list 'req-package-loaded (list 'quote pkg)))) + +(defun req-package-eval-form (EVAL) + "Logs, macroexpands and evaluates EVAL form." + (req-package--log-trace "eval %s" EVAL) + (eval (macroexpand-all EVAL))) + +(defun req-package-eval (pkg) + "Evaluate package PKG request." + (let* ((DEFAULT (req-package-gen-eval pkg (list 'progn) (req-package-patch-config pkg nil) nil)) + (EVAL (gethash pkg req-package-evals DEFAULT)) + (PKG pkg)) + (req-package-handle-loading PKG (lambda () (req-package-eval-form EVAL))))) + +(defun req-package-loaded (pkg) + "Called after package PKG loaded to continue dependency graph traverse." + (req-package--log-info "package loaded: %s" pkg) + (let* ((EVALS (-reduce-from + (lambda (memo dependent) + (let* ((DEPS-LEFT (- (gethash dependent req-package-deps-left 0) 1))) + (puthash dependent DEPS-LEFT req-package-deps-left) + (if (equal 0 DEPS-LEFT) + (cons dependent memo) + memo))) + nil + (gethash (car pkg) req-package-required-by nil)))) + (-each EVALS (lambda (pkg) + (puthash pkg -1 req-package-deps-left) + (req-package-eval pkg))))) + +(defun req-package-handle-loading (pkg f) + "Error handle for package PKG loading process by calling F." + (condition-case-unless-debug e + (funcall f) + (error (req-package--log-error (format "Unable to load package %s -- %s" pkg e))))) + +(defun req-package-gen-eval (package init config rest) + "Generate eval for PACKAGE." + (let* ((package (car package))) + (append (list 'use-package package) + (list :init init) + (list :config config) + rest))) + +(defun req-package-schedule (PKG DEPS EVAL) + (let* ((DEPS-LEFT (gethash PKG req-package-deps-left 0)) + (BRANCHES (ht-get req-package-branches (car PKG)))) + (req-package--log-debug "package requested: %s %s" PKG EVAL) + (puthash PKG EVAL req-package-evals) + (ht-set req-package-branches (car PKG) (cons PKG BRANCHES)) + (if (= DEPS-LEFT -1) + (progn ;; package already been loaded before, just eval again + (req-package-handle-loading PKG (lambda () (req-package-eval-form EVAL))) + DEPS-LEFT) + (progn ;; insert package in dependency graph + (puthash PKG 0 req-package-deps-left) + (-each DEPS + (lambda (req) + (let* ((REQUIRED-BY (gethash req req-package-required-by nil)) + (DEPS-LEFT (gethash PKG req-package-deps-left 0)) + (REQ-DEPS-LEFT (gethash req req-package-deps-left 0)) + (BRANCHES (ht-get req-package-branches req))) + (ht-set req-package-branches req BRANCHES) + (when (not (equal -1 REQ-DEPS-LEFT)) + (puthash req (cons PKG REQUIRED-BY) req-package-required-by) + (puthash PKG (+ DEPS-LEFT 1) req-package-deps-left))))))))) + +(defmacro req-package (pkg &rest args) + "Add package PKG with ARGS to target list." + `(let* ((PKG ',pkg) + (ARGS ',args) + (SPLIT1 (req-package-args-extract-arg :require ARGS nil)) + (SPLIT2 (req-package-args-extract-arg :init (cadr SPLIT1) nil)) + (SPLIT3 (req-package-args-extract-arg :config (cadr SPLIT2) nil)) + (SPLIT4 (req-package-args-extract-arg :force (cadr SPLIT3) nil)) + (DEPS (-flatten (car SPLIT1))) + (INIT (cons 'progn (car SPLIT2))) + (PKG (list PKG DEPS)) + (CONFIG (req-package-patch-config PKG (cons 'progn (car SPLIT3)))) + (FORCE (caar SPLIT4)) + (REST (cadr SPLIT4)) + (EVAL (req-package-gen-eval PKG INIT CONFIG REST))) + (if FORCE + (progn ;; load avoiding dependency management + (req-package--log-debug "package force-requested: %s %s" PKG EVAL) + (req-package-handle-loading PKG (lambda () (req-package-eval-form EVAL)))) + (req-package-schedule PKG DEPS EVAL)))) + +(defmacro req-package-force (pkg &rest args) + `(let* ((PKG ',pkg) + (ARGS ',args)) + (eval (macroexpand-all (apply 'list 'req-package PKG :force t ARGS))))) + +(defun req-package-finish () + "Start loading process, call this after all req-package invocations." + ;; (req-package-cycles-detect req-package-required-by) ;; FIXME + (req-package--log-debug "package requests finished: %s packages are waiting" + (hash-table-count req-package-branches)) + (maphash (lambda (req branches) + (when (not branches) + (let* ((REQ-PKG (list req nil)) + (CURRENT (gethash REQ-PKG req-package-deps-left 0))) + (puthash REQ-PKG CURRENT req-package-deps-left)))) + req-package-branches) + (maphash (lambda (key value) + (when (equal (gethash key req-package-deps-left 0) 0) + (puthash key -1 req-package-deps-left) + (req-package-eval key))) + req-package-deps-left)) + +(put 'req-package 'lisp-indent-function 'defun) +(put 'req-package-force 'lisp-indent-function 'defun) +(put 'req-package-hooks-add-execute 'lisp-indent-function 'defun) +(put 'req-package-hooks-add-execute-impl 'lisp-indent-function 'defun) + +(defconst req-package-font-lock-keywords + '(("(\\(req-package\\|req-package-force\\)\\_>[ \t']*\\(\\(?:\\sw\\|\\s_\\)+\\)?" + (1 font-lock-keyword-face) + (2 font-lock-constant-face nil t)))) + +(font-lock-add-keywords 'emacs-lisp-mode req-package-font-lock-keywords) + +(log4e:deflogger "req-package" "%t [%l] %m" "%H:%M:%S") +(req-package--log-set-level req-package-log-level) +(req-package--log-enable-logging) +(req-package--log-clear-log) + +(provide 'req-package) + +;; Local Variables: +;; indent-tabs-mode: nil +;; End: +;;; req-package.el ends here diff --git a/elpa/req-package-20180605.1141/req-package.elc b/elpa/req-package-20180605.1141/req-package.elc new file mode 100644 index 0000000..58c1eac Binary files /dev/null and b/elpa/req-package-20180605.1141/req-package.elc differ -- cgit v1.2.1