]> code.delx.au - gnu-emacs-elpa/commitdiff
Fix up deployment script
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 15 Aug 2013 16:20:16 +0000 (12:20 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 15 Aug 2013 16:20:16 +0000 (12:20 -0400)
admin/archive-contents.el
packages/README
packages/f90-interface-browser/f90-interface-browser.el

index e2154df2a813fa5c635a50985981f3e1f3737280..2d588e9f91f7879d9226e10836e7a36e2dbe0767 100644 (file)
 (defconst archive-re-no-dot "\\`\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*"
   "Regular expression matching all files except \".\" and \"..\".")
 
+(defun archive--version-to-list (vers)
+  (when vers
+    (let ((l (version-to-list vers)))
+      ;; Signal an error for things like "1.02" which is parsed as "1.2".
+      (assert (equal vers (package-version-join l)))
+      l)))
+
 (defun archive--convert-require (elt)
   (list (car elt)
-       (version-to-list (car (cdr elt)))))
+       (archive--version-to-list (car (cdr elt)))))
 
 (defun archive--strip-rcs-id (str)
   "Strip RCS version ID from the version string STR.
@@ -44,7 +51,7 @@ Otherwise return nil."
     (when (string-match "\\`[ \t]*[$]Revision:[ \t]+" str)
       (setq str (substring str (match-end 0))))
     (condition-case nil
-       (if (version-to-list str)
+       (if (archive--version-to-list str)
            str)
       (error nil))))
 
@@ -79,10 +86,12 @@ Delete backup files also."
              (push (if (car simple-p)
                        (apply #'archive--process-simple-package
                               dir pkg (cdr simple-p))
-                      (apply 'archive--write-pkg-file dir pkg (cdr simple-p))
+                      (if simple-p
+                          (apply #'archive--write-pkg-file
+                                 dir pkg (cdr simple-p)))
                      (archive--process-multi-file-package dir pkg))
                    packages)))
-       (error (error "Error in %s: %S" dir v))))
+       ((debug error) (error "Error in %s: %S" dir v))))
     (with-temp-buffer
       (pp (nreverse packages) (current-buffer))
       (write-region nil nil "archive-contents"))))
@@ -156,8 +165,7 @@ REQ is a list of requirements.
 Otherwise, return nil."
   (let* ((pkg-file (expand-file-name (concat pkg "-pkg.el") dir))
         (mainfile (expand-file-name (concat pkg ".el") dir))
-         (files (directory-files dir nil "\\.el\\'"))
-        version description req)
+         (files (directory-files dir nil "\\.el\\'")))
     (setq files (delete (concat pkg "-pkg.el") files))
     (setq files (delete (concat pkg "-autoloads.el") files))
     (cond
@@ -168,17 +176,20 @@ Otherwise, return nil."
        (goto-char (point-min))
        (if (not (looking-at ";;;.*---[ \t]*\\(.*?\\)[ \t]*\\(-\\*-.*-\\*-[ \t]*\\)?$"))
             (error "Can't parse first line of %s" mainfile)
-          (setq description (match-string 1))
-          (setq version
-                (or (archive--strip-rcs-id (lm-header "package-version"))
-                    (archive--strip-rcs-id (lm-header "version"))
-                    (error "Missing `version' header")))
           ;; Grab the other fields, which are not mandatory.
-          (let ((requires-str (lm-header "package-requires")))
-            (if requires-str
-                (setq req (mapcar 'archive--convert-require
-                                  (car (read-from-string requires-str))))))
-          (list (= (length files) 1) version description req))))
+          (let* ((description (match-string 1))
+                 (version
+                  (or (archive--strip-rcs-id (lm-header "package-version"))
+                      (archive--strip-rcs-id (lm-header "version"))
+                      (error "Missing `version' header")))
+                 (requires-str (lm-header "package-requires"))
+                 (pt (lm-header "package-type"))
+                 (simple (if pt (equal pt "simple") (= (length files) 1)))
+                 (req
+                  (if requires-str
+                      (mapcar 'archive--convert-require
+                              (car (read-from-string requires-str))))))
+            (list simple version description req)))))
      ((not (file-exists-p pkg-file))
       (error "Can find single file nor package desc file in %s" dir)))))
 
@@ -207,7 +218,8 @@ Rename DIR/PKG.el to PKG-VERS.el, delete DIR, and return the descriptor."
       (basic-save-buffer)               ;Less chatty than save-buffer.
       (kill-buffer)))
   (delete-directory dir t)
-  (cons (intern pkg) (vector (version-to-list vers) req desc 'single)))
+  (cons (intern pkg) (vector (archive--version-to-list vers)
+                             req desc 'single)))
 
 (defun archive--make-changelog (dir srcdir)
   "Export Git log info of DIR into a ChangeLog file."
@@ -239,12 +251,18 @@ Rename DIR/PKG.el to PKG-VERS.el, delete DIR, and return the descriptor."
 Rename DIR/ to PKG-VERS/, and return the descriptor."
   (let* ((exp (archive--multi-file-package-def dir pkg))
         (vers (nth 2 exp))
-        (req (mapcar 'archive--convert-require (nth 4 exp))))
+         (req-exp (nth 4 exp))
+        (req (mapcar 'archive--convert-require
+                      (if (eq 'quote (car-safe req-exp)) (nth 1 req-exp)
+                        (when req-exp
+                          (error "REQ should be a quoted constant: %S"
+                                 req-exp))))))
     (unless (equal (nth 1 exp) pkg)
       (error (format "Package name %s doesn't match file name %s"
                     (nth 1 exp) pkg)))
     (rename-file dir (concat pkg "-" vers))
-    (cons (intern pkg) (vector (version-to-list vers) req (nth 3 exp) 'tar))))
+    (cons (intern pkg) (vector (archive--version-to-list vers)
+                               req (nth 3 exp) 'tar))))
 
 (defun archive--multi-file-package-def (dir pkg)
   "Return the `define-package' form in the file DIR/PKG-pkg.el."
index 426de05dc5ac526cdd585fad1d3619e4ce641580..5b1c430b095d883b504ca55ba62e9f29a08deb83 100644 (file)
@@ -11,24 +11,39 @@ This means that you can safely work on the next version here without
 worrying about the unstable code making it to GNU ELPA, and simply update
 the "version" when you want to release the new code.
 
-* External branches:
-
-Some packages have an external upstream branch.
-You should ideally be able to "bzr merge <URL>" from them, and it often
-works, but it generally requires some hand-holding to set it up.
-More specifically, the first "bzr merge" (ideally done when installing the
-package into `elpa') needs to be a "bzr join" since there's no
-common ancestor.  Worse, "bzr join" doesn't work so well with bzr-git, so
-you need to do a bit of gymnastics:
-
-   git clone <giturl>   # Done because bzr-git works better locally
-   bzr branch <localgit> tmp
-   cd tmp
-   bzr mkdir .newroot
-   bzr mv * .newroot/
-   ... maybe other bzr mv .<blabla> .newroot/ ...
-   bzr split .newroot
-   mv .newroot .../elpa/packages/<package>
-   cd .../elpa/packages/
-   bzr join <package>
-   
+* Format
+
+Each package should follow the ELPA packaging conventions, but there are
+some differences due to the way the deployment script creates the packages
+and the web-pages from this source code:
+- Multi-file packages can put the package metadata in the main <pkg>.el file
+  in the format used for single-file packages, in which case the script
+  will auto-generate the <pkg>-pkg.el file.
+- the "URL:" header (or :url property) can be used to specify the home page
+  of the package, if it's maintained externally.
+- A "News:" section (or "NEWS" file) can/should be used to list the
+  user-visible changes of each version.
+- The "Package-Type: simple" header can be used to force the creation
+  of a single-file package even when there are several Elisp files in
+  the source (the other files will simply be ignored).
+
+* External branches
+
+Some packages are maintained in external branches.  These should be
+appropriately listed in the `externals-list' file.
+There are two different cases: subtrees and externals.
+
+In both cases, a copy of the code is kept in the `elpa' repository and
+should be sync'd with the upstream every once in a while.  This copy may
+include local changes, tho ideally these should be kept to a minimum.
+
+In the `subtree' case, the copy of the code is kept here in the
+corresponding `packages/<pkg>' directory.  You should be able to "git
+merge -s subtree" from the upstream branch.
+
+In the `external' case, the copy of the code is not kept here but in the
+`externals/<pkg>' branch in the `elpa' repository.
+You can check out all the external packages into the `packages' directory
+with the command:
+
+   make externals
index c33996cc76440c414b39d81fe063897f0eca0966..19e786234b7cfa1c75560c794ec286e90697e899 100644 (file)
@@ -4,8 +4,9 @@
 
 ;; Author: Lawrence Mitchell <wence@gmx.li>
 ;; Created: 2011-07-06
-;; Available-from: http://github.com/wence-/f90-iface/
+;; URL: http://github.com/wence-/f90-iface/
 ;; Version: 1.1
+;; Package-Type: simple
 
 ;; COPYRIGHT NOTICE