9.2
8 Enigma API: Dependencies Subcommand
| (require enigma/subcommands/dependencies) | |
| package: enigma-app | |
procedure
(install-emacs-lisp-files-dependencies start-path extra-emacs-flags)
→
exact-integer? (listof hash?) start-path : path-string? extra-emacs-flags : (listof string?)
Install dependencies of Emacs Lisp packages found under
start-path.
Pass extra-emacs-flags as extra flags.
Returns the values that indicate: exact-integer? total installation success and a list of objects that describe properties of installed dependencies.
The source code of this module:
#lang racket/base (require racket/contract/base) (require "../emacs/file/content-guess.rkt") (require "../emacs/file/context.rkt") (require "../emacs/package/archives.rkt") (require "../emacs/path/load-path.rkt") (require "../emacs/system/run-emacs.rkt") (provide (contract-out [install-emacs-lisp-files-dependencies (-> path-string? (listof string?) (values exact-integer? (listof hash?)))])) (define (install-remote-emacs-package package-name extra-emacs-flags) (define package-bootstrap-expr `(progn (setq package-archives (quote ,(get-emacs-package-archives))) (package-initialize) (package-install (quote ,package-name)))) (define cmdline-args (append (make-emacs-cmdline-args '() extra-emacs-flags) `("-batch" "--eval" ,(format "~s" package-bootstrap-expr)))) (eprintf " Installing remote package: ~v\n" package-name) (define exit-code (run-emacs cmdline-args)) (when (= 0 exit-code) (eprintf " Install of remote package ~v succeeded\n" package-name)) exit-code) (define (install-emacs-lisp-files-dependencies start-path extra-emacs-flags) (define result-code (make-parameter 0)) (define-values (emacs-lisp-files _load-path) (find-emacs-lisp-context start-path)) (define refresh-result (refresh-emacs-package-archives extra-emacs-flags)) (when (> refresh-result 0) (result-code refresh-result)) (define result-hash-rev (for/fold ([results '()]) ([emacs-lisp-file emacs-lisp-files]) (define version (guess-file-version emacs-lisp-file)) (define dependencies (guess-file-dependencies emacs-lisp-file)) (cond [(and version (not (null? dependencies))) (eprintf " Found dependencies: ~v in file ~a\n" dependencies emacs-lisp-file) (define exit-codes (for/list ([package-name dependencies]) (install-remote-emacs-package package-name extra-emacs-flags))) (define first-failure-exit-code (for/first ([exit-code exit-codes] #:when (> exit-code 0)) exit-code)) (define successful? (not first-failure-exit-code)) (when (not successful?) (result-code first-failure-exit-code)) (define h (hash 'dependencies (format "~s" dependencies) 'file-path (path->string emacs-lisp-file) 'successful? successful?)) (cons h results)] [else results]))) (define result-hash (reverse result-hash-rev)) (values (result-code) result-hash))