mirror of
https://github.com/roswell/roswell.git
synced 2026-09-10 07:16:17 -04:00
52 lines
1.9 KiB
Common Lisp
52 lines
1.9 KiB
Common Lisp
#!/bin/sh
|
|
#|-*- mode:lisp -*-|#
|
|
#|Update installed systems.
|
|
exec ros -Q -m roswell -N roswell -- $0 "$@"
|
|
|#
|
|
(progn ;;init forms
|
|
(roswell:ensure-asdf)
|
|
(roswell:include '("update-git" "update-hg" "update-default")))
|
|
|
|
(defpackage :ros.script.update.3692404755
|
|
(:use :cl :roswell.util))
|
|
(in-package :ros.script.update.3692404755)
|
|
|
|
(defvar *update-functions*
|
|
(list (module "update" "git")
|
|
(module "update" "hg")
|
|
(module "update" "default")))
|
|
|
|
(defun main (&rest argv)
|
|
(if argv
|
|
(or
|
|
;; security? update for specific version of impl. (future work.Should have it for alisp)
|
|
(let ((func (module "update" (first argv))))
|
|
(when func (apply func (rest argv)))
|
|
func)
|
|
;; update systems
|
|
(dolist (alias argv)
|
|
(loop
|
|
with path = (ignore-errors
|
|
(make-pathname
|
|
:type nil :name nil
|
|
:defaults (asdf:system-source-file (asdf:find-system alias))))
|
|
for f in *update-functions*
|
|
for r = (and path (funcall f path))
|
|
when r do (roswell:roswell `("install" ,alias))
|
|
until r
|
|
finally (unless r (format *error-output* "no update function for ~A~%" alias)))))
|
|
(format *error-output* "~&Usage: ~A update [Method [params ...]]/systems ~%~%Methods:~%~{~A~%~}"
|
|
(roswell:opt "argv0")
|
|
(let*
|
|
((* (directory (make-pathname :defaults *load-pathname*
|
|
:name :wild
|
|
:type "lisp")))
|
|
(* (mapcar #'pathname-name *))
|
|
(* (remove-if-not #'(lambda (x)
|
|
(ignore-errors (string= x "update-" :end1 7)))
|
|
*))
|
|
(* (mapcar #'(lambda (x) (subseq x 7)) *)))
|
|
*))))
|
|
|
|
;;; vim: set ft=lisp lisp:
|