summaryrefslogtreecommitdiff
path: root/elpa/req-package-20180605.1141/req-package.el
diff options
context:
space:
mode:
Diffstat (limited to 'elpa/req-package-20180605.1141/req-package.el')
-rw-r--r--elpa/req-package-20180605.1141/req-package.el494
1 files changed, 0 insertions, 494 deletions
diff --git a/elpa/req-package-20180605.1141/req-package.el b/elpa/req-package-20180605.1141/req-package.el
deleted file mode 100644
index d209d50..0000000
--- a/elpa/req-package-20180605.1141/req-package.el
+++ /dev/null
@@ -1,494 +0,0 @@
-;;; req-package.el --- A use-package wrapper for package runtime dependencies management
-
-;; Copyright (C) 2013-2018 Edward Knyshov
-
-;; Author: Edward Knyshov <edvorg@gmail.com>
-;; 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