Mercurial > hg > xemacs-beta
diff lisp/package-admin.el @ 1365:02909207294a
[xemacs-hg @ 2003-03-20 13:19:56 by youngs]
2003-03-20 Steve Youngs <youngs@xemacs.org>
* menubar-items.el (default-menubar): Add a "Pre-Release Download
Sites" submenu to "Tools -> Packages" menu.
Filter the package download sites menus through
`menu-split-long-menu'.
* obsolete.el (pui-add-install-directory): New.
(package-get-download-menu): New.
* package-admin.el: (package-admin-add-single-file-package):
Removed.
(package-admin-get-install-dir): Don't rely on an installed
xemacs-base package to guess where a package needs to be installed
to.
(package-admin-get-manifest-file): Whitespace clean up.
(package-admin-check-manifest): Use `directory-sep-char' to
compute regexp.
Only search 'lisp' and 'man' directories to determine package
name.
Don't error is xemacs-base package isn't installed, just don't
sort the MANIFEST file and issue a warning.
(package-admin-add-binary-package): Whitespace clean up.
(package-admin-get-lispdir): Ditto.
(package-admin-delete-binary-package): Use `with-temp-buffer'
instead of creating a temporary buffer manually.
* package-get.el: (package-get-remote): Change custom type so that
only either a single directory or remote host:directory can be
selected.
(package-get-download-sites): Put the sites into alphabetical
order of country.
Make the description element be "Country (site)" instead of the
other way around.
(package-get-pre-release-download-sites): New.
(package-get-require-signed-base-updates): Default to t.
(package-get-download-menu): Removed.
(package-get-locate-file): Change to reflect new format of
'package-get-remote'.
(package-get-update-base-from-buffer): Whitespace clean up and
remove an unneccessary 'when'.
(package-get-interactive-package-query): Whitespace clean up.
(package-get-update-all): Ditto.
(package-get-all): Ditto.
(package-get-init-package): Ditto.
(package-get-info): New.
(package-get): Bring into line with new format of
'package-get-remote'.
Error if non-Mule XEmacsen try to install Mule packages.
Don't rely on a Mule package having 'mule-base' in its
"REQUIRES" to determine if it is a Mule package or not,
instead we test "CATEGORY".
Better handling of the situation where a partial package tarball
exists on the local hard drive from a previous interupted
download.
Clean up after a failed package install.
(package-get-set-version-prop): Removed.
(package-get-installedp): Whitespace clean up.
* package-ui.el: Whitespace clean up.
(pui-info-buffer): Make it a defcustom.
(pui-directory-exists): Removed.
(pui-package-dir-list): Removed.
(pui-add-install-directory): Removed.
(package-ui-download-menu): New.
(package-ui-pre-release-download-menu): New.
(pui-set-local-package-get-directory): New.
(pui-package-symbol-char): Whitespace clean up.
(pui-update-package-display): Ditto.
(pui-toggle-package): Ditto.
(pui-toggle-package-key): Ditto.
(pui-toggle-package-delete): Ditto.
(pui-toggle-package-delete-key): Ditto.
(pui-toggle-package-event): Ditto.
(pui-toggle-verbosity-redisplay): Ditto.
(pui-install-selected-packages): Ditto.
(pui-help-echo): Ditto.
(pui-display-info): Ditto.
(pui-list-packages): Ditto.
* packages.el: Whitespace clean up.
author | youngs |
---|---|
date | Thu, 20 Mar 2003 13:19:59 +0000 |
parents | 79940b592197 |
children | 69a674f5861f |
line wrap: on
line diff
--- a/lisp/package-admin.el Wed Mar 19 22:52:25 2003 +0000 +++ b/lisp/package-admin.el Thu Mar 20 13:19:59 2003 +0000 @@ -114,25 +114,6 @@ hook is called *before* the package is deleted. The hook function is passed two arguments: the package name, and the install directory.") -;;;###autoload -(defun package-admin-add-single-file-package (file destdir &optional pkg-dir) - "Install a single file Lisp package into XEmacs package hierarchy. -`file' should be the full path to the lisp file to install. -`destdir' should be a simple directory name. -The optional `pkg-dir' can be used to override the default package hierarchy -\(car \(last late-packages))." - (interactive "fLisp File: \nsDestination: ") - (when (null pkg-dir) - (setq pkg-dir (car (last late-packages)))) - (let ((destination (concat pkg-dir "/lisp/" destdir)) - (buf (get-buffer-create package-admin-temp-buffer))) - (call-process "add-little-package.sh" - nil - buf - t - ;; rest of command line follows - package-admin-xemacs file destination))) - (defun package-admin-install-function-mswindows (file pkg-dir buffer) "Install function for mswindows." (let ((default-directory (file-name-as-directory pkg-dir))) @@ -152,15 +133,7 @@ ;; Don't assume GNU tar. (if (shell-command (concat "gunzip -c " filename " | tar xvf -") buffer) 0 - 1) - )) - -; (call-process "add-big-package.sh" -; nil -; buffer -; t -; ;; rest of command line follows -; package-admin-xemacs file pkg-dir)) + 1))) (defun package-admin-get-install-dir (package pkg-dir &optional mule-related) "If PKG-DIR is non-nil return that, @@ -187,45 +160,35 @@ ;; Ok we need to guess (if mule-related (package-admin-get-install-dir 'mule-base nil nil) - (if (eq package 'xemacs-base) - (car (last late-packages)) - (package-admin-get-install-dir 'xemacs-base nil nil))))))) - - + (car (last late-packages))))))) (defun package-admin-get-manifest-file (pkg-topdir package) "Return the name of the MANIFEST file for package PACKAGE. Note that PACKAGE is a symbol, and not a string." - (let (dir) - (setq dir (expand-file-name "pkginfo" pkg-topdir)) - (expand-file-name (concat "MANIFEST." (symbol-name package)) dir) - )) + (let ((dir (file-name-as-directory + (expand-file-name "pkginfo" pkg-topdir)))) + (expand-file-name (concat "MANIFEST." (symbol-name package)) dir))) (defun package-admin-check-manifest (pkg-outbuf pkg-topdir) "Check for a MANIFEST.<package> file in the package distribution. If it doesn't exist, create and write one. PKG-OUTBUF is the buffer that holds the output from `tar', and PKG-TOPDIR is the top-level directory under which the package was installed." - (let ( (manifest-buf " *pkg-manifest*") - old-case-fold-search regexp package-name pathname regexps) - ;; Save and restore the case-fold-search status. - ;; We do this in case we have to screw with it (as it the case of - ;; case-insensitive filesystems such as MS Windows). - (setq old-case-fold-search case-fold-search) + (let ((manifest-buf " *pkg-manifest*") + (old-case-fold-search case-fold-search) + regexp package-name pathname regexps) (unwind-protect (save-excursion ;; Probably redundant. - (set-buffer (get-buffer pkg-outbuf)) ;; Probably already the - ;; current buffer. + (set-buffer (get-buffer pkg-outbuf)) ;; Probably already the current buffer. (goto-char (point-min)) ;; Make filenames case-insensitive, if necessary (if (eq system-type 'windows-nt) (setq case-fold-search t)) - ;; We really should compute the regexp. - ;; However, directory-sep-char is currently broken, but we need - ;; functional code *NOW*. - (setq regexp "\\bpkginfo[\\/]MANIFEST\\...*") + (setq regexp (concat "\\bpkginfo" + (char-to-string directory-sep-char) + "MANIFEST\\...*")) ;; Look for the manifest. (if (not (re-search-forward regexp nil t)) @@ -234,22 +197,18 @@ ;; Yuk. We weren't passed the package name, and so we have ;; to dig for it. Look for it as the subdirectory name below - ;; "lisp", "man", "info", or "etc". + ;; "lisp", or "man". ;; Here, we don't use a single regexp because we want to search ;; the directories for a package name in a particular order. - ;; The problem is that packages could have directories like - ;; "etc/sounds/" or "etc/photos/" and we don't want to get - ;; these confused with the actual package name (although, in - ;; the case of "etc/sounds/", it's probably correct). (if (catch 'done - (let ( (dirs '("lisp" "info" "man" "etc")) rexp) + (let ((dirs '("lisp" "man")) + rexp) (while dirs (setq rexp (concat "\\b" (car dirs) "[\\/]\\([^\\/]+\\)[\//]")) (if (re-search-forward rexp nil t) (throw 'done t)) - (setq dirs (cdr dirs)) - ))) + (setq dirs (cdr dirs))))) (progn (setq package-name (buffer-substring (match-beginning 1) (match-end 1))) @@ -277,22 +236,16 @@ (buffer-substring (match-beginning 1) (match-end 1))) - (throw 'found-path t) - )) - (setq regexps (cdr regexps)) - ) - ) + (throw 'found-path t))) + (setq regexps (cdr regexps)))) (progn ;; found a pathname -- add it to the manifest ;; buffer (save-excursion (set-buffer manifest-buf) (goto-char (point-max)) - (insert pathname "\n") - ) - )) - (forward-line 1) - ) + (insert pathname "\n")))) + (forward-line 1)) ;; Processed all lines. ;; Now, create the file, pkginfo/MANIFEST.<pkgname> @@ -312,25 +265,16 @@ ;; Put the files in sorted order (if-fboundp 'sort-lines (sort-lines nil (point-min) (point-max)) - (error 'unimplemented - "`xemacs-base' not installed?")) + (warn "`xemacs-base' not installed, MANIFEST.%s not sorted" + package-name)) ;; Write the file. ;; Note that using `write-region' *BYPASSES* any check ;; to see if XEmacs is currently editing/visiting the ;; file. - (write-region (point-min) (point-max) pathname) - ) - (kill-buffer manifest-buf) - ) - (progn - ;; We can't determine the package name from an extracted - ;; file in the tar output buffer. - )) - )) - ) + (write-region (point-min) (point-max) pathname)) + (kill-buffer manifest-buf)))))) ;; Restore old case-fold-search status - (setq case-fold-search old-case-fold-search)) - )) + (setq case-fold-search old-case-fold-search)))) ;;;###autoload (defun package-admin-add-binary-package (file &optional pkg-dir) @@ -338,8 +282,7 @@ (interactive "fPackage tarball: ") (let ((buf (get-buffer-create package-admin-temp-buffer)) (status 1) - start err-list - ) + start err-list) (setq pkg-dir (package-admin-get-install-dir 'unknown pkg-dir)) ;; Ensure that the current directory doesn't change (save-excursion @@ -361,17 +304,11 @@ (if (re-search-forward (car err-list) nil t) (progn (setq status 1) - (throw 'done nil) - )) - (setq err-list (cdr err-list)) - ) - ) + (throw 'done nil))) + (setq err-list (cdr err-list)))) ;; Make sure that the MANIFEST file exists - (package-admin-check-manifest buf pkg-dir) - )) - ) - status - )) + (package-admin-check-manifest buf pkg-dir)))) + status)) (defun package-admin-rmtree (directory) "Delete a directory and all of its contents, recursively. @@ -406,13 +343,12 @@ (setq package-lispdir (expand-file-name (symbol-name package) package-lispdir)) (file-accessible-directory-p package-lispdir)) - package-lispdir) - )) + package-lispdir))) (defun package-admin-delete-binary-package (package pkg-topdir) "Delete a binary installation of PACKAGE below directory PKG-TOPDIR. PACKAGE is a symbol, not a string." - (let ( (tmpbuf " *pkg-manifest*") manifest-file package-lispdir dirs file) + (let (manifest-file package-lispdir dirs file) (setq pkg-topdir (package-admin-get-install-dir package pkg-topdir)) (setq manifest-file (package-admin-get-manifest-file pkg-topdir package)) (run-hook-with-args 'package-delete-hook package pkg-topdir) @@ -421,8 +357,7 @@ ;; The manifest file exists! Use it to delete the old distribution. (message "Removing old files for package \"%s\" ..." package) (sit-for 0) - (setq tmpbuf (get-buffer-create tmpbuf)) - (with-current-buffer tmpbuf + (with-temp-buffer (buffer-disable-undo) (erase-buffer) (insert-file-contents manifest-file) @@ -454,66 +389,30 @@ ;; Delete empty directories. (if dirs - (let ( (orig-default-directory default-directory) - ;; directory files file - ) - ;; Make sure we preserve the existing `default-directory'. - ;; JV, why does this change the default directory? Does it indeed? - (unwind-protect - (progn - ;; Warning: destructive sort! - (setq dirs (nreverse (sort dirs 'string<))) -; ;; For each directory ... -; (while dirs -; (setq directory (file-name-as-directory (car dirs))) -; (setq files (directory-files directory)) -; ;; Delete the directory if it's empty. -; (if (catch 'done -; (while files -; (setq file (car files)) -; (if (and (not (string= file ".")) -; (not (string= file ".."))) -; (throw 'done nil)) -; (setq files (cdr files)) -; ) -; t) -; ( -; (delete-directory directory)) -; (setq dirs (cdr dirs)) -; ) - ;; JV, On all OS's that I know of delete-directory fails on - ;; on non-empty dirs anyway - (mapc - (lambda (dir) - (condition-case () - (delete-directory dir))) - dirs)) - (setq default-directory orig-default-directory) - ))) - ) - (kill-buffer tmpbuf) + (progn + (mapc + (lambda (dir) + (condition-case () + (delete-directory dir))) + dirs))) ;; Delete the MANIFEST file ;; (set-file-modes manifest-file 438) ;; 438 -> #o666 ;; Note. Packages can have MANIFEST in MANIFEST. (condition-case () (delete-file manifest-file) (error nil)) ;; Do warning? - (message "Removing old files for package \"%s\" ... done" package)) - ;; The manifest file doesn't exist. Fallback to just deleting the - ;; package-specific lisp directory, if it exists. - ;; - ;; Delete old lisp directory, if any - ;; Gads, this is ugly. However, we're not supposed to use `concat' - ;; in the name of portability. - (when (setq package-lispdir (package-admin-get-lispdir pkg-topdir - package)) - (message "Removing old lisp directory \"%s\" ..." - package-lispdir) - (sit-for 0) - (package-admin-rmtree package-lispdir) - (message "Removing old lisp directory \"%s\" ... done" - package-lispdir) - )) + (message "Removing old files for package \"%s\" ... done" package))) + ;; The manifest file doesn't exist. Fallback to just deleting the + ;; package-specific lisp directory, if it exists. + ;; + ;; Delete old lisp directory, if any + ;; Gads, this is ugly. However, we're not supposed to use `concat' + ;; in the name of portability. + (setq package-lispdir (package-admin-get-lispdir pkg-topdir package)) + (message "Removing old lisp directory \"%s\" ..." package-lispdir) + (sit-for 0) + (package-admin-rmtree package-lispdir) + (message "Removing old lisp directory \"%s\" ... done" package-lispdir)) ;; Delete the package from the database of installed packages. (package-delete-name package)))