Merge branch 'master' of git://github.com/milkypostman/melpa

This commit is contained in:
Alessandro Piras 2013-01-13 19:03:39 +01:00
commit 69e2d1eac6
136 changed files with 600 additions and 108 deletions

1
.gitignore vendored
View file

@ -1,6 +1,7 @@
/sync
/packages/*.tar
/packages/*.el
/packages/*-readme.txt
/packages/archive-contents
/working/*/
/html/index.html

6
.gitmodules vendored
View file

@ -1,3 +1,9 @@
[submodule "epkgs"]
path = epkgs
url = https://github.com/milkypostman/epkgs.git
[submodule "util/ecukes"]
path = util/ecukes
url = https://github.com/rejeep/ecukes.git
[submodule "util/espuds"]
path = util/espuds
url = https://github.com/rejeep/espuds.git

20
.travis.yml Normal file
View file

@ -0,0 +1,20 @@
language: emacs-lisp
before_install:
- if [ "$EMACS" = 'emacs-snapshot' ]; then
sudo add-apt-repository -y ppa:cassou/emacs &&
sudo apt-get update -qq &&
sudo apt-get install -qq
emacs-snapshot-el emacs-snapshot-gtk emacs-snapshot;
fi
- if [ "$EMACS" = 'emacs24' ]; then
sudo add-apt-repository -y ppa:cassou/emacs &&
sudo apt-get update -qq &&
sudo apt-get install -qq
emacs24 emacs24-el emacs24-common-non-dfsg;
fi
env:
#- EMACS=emacs
- EMACS=emacs24
#- EMACS=emacs-snapshot
script:
./run-travis-ci.sh

View file

@ -1,4 +1,6 @@
# MELPA
# MELPA
[![Build Status](https://travis-ci.org/milkypostman/melpa.png?branch=master)](https://travis-ci.org/milkypostman/melpa)
MELPA is a growing collection of `package.el`-compatible Emacs Lisp
packages built automatically on our server from the upstream source
@ -19,7 +21,7 @@ details.
* [Usage](#usage)
* [Contributing](#contributing-new-packages)
* [Package Format](#package-format)
* [Server Scripts](#server-scripts)
* [Build Scripts](#build-scripts)
* [API](#api)
* [MELPA Package](#melpa-package)
* [About](#about)
@ -32,7 +34,7 @@ call to `package-initialize` in your `init.el` file.
(add-to-list 'package-archives
'("melpa" . "http://melpa.milkbox.net/packages/") t)
Since `package.el` doesn't allow locking packages to certain version,
we also provide a package `melpa.el` which contains code to allow
restricting packages to specific repositories. This allows someone to
@ -52,11 +54,7 @@ guidelines,
* Upstream source must be stored in an authoritative
[SCM](http://en.wikipedia.org/wiki/Software_configuration_management)
repository or on the Emacswiki.
<!-- * Package must be actively developed and not otherwise included in a -->
<!-- different ELPA archive. Packages that are better suited for -->
<!-- [marmalade](http://marmalade-repo.org/) -->
* Submit one pull request per recipe. You can create multiple
branches and create a pull request for each branch.
@ -64,16 +62,16 @@ guidelines,
specifying only files relevant to the package. See the
[Package Format](#package-format) section for more information on
specifying package files.
* The package name should match the name of the feature provided. See
the `package` function for more information.
* Packages should adhere to the `package.el` format as specified by
`(info "(elisp) Packaging")`. More information on this format is
provided by the
[marmalade package manual](http://marmalade-repo.org/doc-files/package.5.html).
### Testing
@ -86,7 +84,7 @@ Let `<NAME>` denote the name of the recipe to submit.
3. Confirm your package build properly by running
make recipes/<NAME>
4. Install the file you built by running `package-install-file` from
within Emacs and specifying the newly built package in the directory
specified by `package-build-archive-dir` (default: `packages/`
@ -104,7 +102,7 @@ helps simplify this process.
Packages are specified by files in the `recipes` directory. You can
contribute a new package by adding a new file under `recipes` using
the following form,
the following form (`[...]` denotes optional or conditional values),
```elisp
(<package-name>
@ -112,22 +110,14 @@ the following form,
[:url "<repo url>"]
[:repo "github-user/repo-name"]
[:module "cvs-module"]
[:files ("<file1>", ...)])
[:files ("<file1>" ...)])
```
- `package-name`
a lisp symbol that has the same name as the package being specified.
- `:url`
specifies the URL of the version control repository. *required for
the `git`, `bzr`, `hg`, `darcs`, `svn` and `cvs` fetchers*
- `:module`
specifies the module of a CVS repository to check out. Defaults to to
`package-name`. Only used with `:fetcher cvs`, and otherwise ignored.
- `:fetcher`
specifies the type of repository that `:url` points to. Right now
(one of `git, github, bzr, hg, darcs, svn, cvs, wiki`) specifies the type of repository that `:url` points to. Right now
package-build supports [git][git], [github][github],
[bazaar (bzr)][bzr], [mercurial (hg)][hg],
[subversion (svn)][svn], [cvs][cvs] [darcs][darcs], and
@ -143,13 +133,27 @@ differs from the package name being built. In the case of the `github`
fetcher, use `:repo` instead of `:url`; the git URL will then be
deduced.
- `:url`
specifies the URL of the version control repository. *required for
the `git`, `bzr`, `hg`, `darcs`, `svn` and `cvs` fetchers.*
- `:repo`
specifies the github repository and is of the form `github-user/repo-name`. *required for the `github` fetcher*.
- `:module`
specifies the module of a CVS repository to check out. Defaults to to
`package-name`. Only used with `:fetcher cvs`, and otherwise ignored.
- `:files`
optional property specifying the explicit files used to build the
package. Automatically populated by matching all `.el` files in the
root of the repository. This is necessary when there are multiple
package. Automatically populated by matching all `.el` files in the
root of the repository. This is necessary when there are multiple
`.el` files in the repository but the package should only be built
from a subset. *Any file in any path in the repository is copied to
the root of the package*
from a subset. *Any file specifed at any path in the repository is
copied to the root of the package.* More complex options are
available, submit an
[Issue](https://github.com/milkypostman/melpa/issues) if the specified
package requires more complex file specification.
[git]: http://git-scm.com/
[github]: https://github.com/
@ -174,7 +178,7 @@ Since there is only one `.el` file, this package only needs the `:url` and `:fet
(ido-ubiquitous
:url "https://github.com/DarwinAwardWinner/ido-ubiquitous.git"
:fetcher git)
```
```
### Multiple Packages in one Repository
@ -191,7 +195,7 @@ contains the *starter-kit* package along with extra packages in the
:url "https://github.com/technomancy/emacs-starter-kit.git"
:fetcher git
:files ("modules/starter-kit-bindings.el"))
```
```
Notice that `:files` is not specified for `starter-kit` since
package-build will automatically add all `.el` files in the root
@ -202,10 +206,10 @@ files specified explicitly.
### Multiple Files in Multiple Directories
There are special cases when we need
There are special cases when we need
There are special cases where creation of the package comes from many
different sub-directories in the repository and the destination
sub-directories need to be explicitly set.
sub-directories need to be explicitly set.
Consider the `flymake-perlcritic` recipe,
@ -230,7 +234,7 @@ first element to be the destination directory. These can be embedded
further, such as the following---hypothetical---entry for `:files`,
```elisp
("*.el" ("snippets"
("*.el" ("snippets"
("html-mode" "snippets/html-mode/*")
("python-mode" "snippets/python-mode/*")))
```
@ -316,17 +320,17 @@ format.
* `clean-packages` -- remove all compiled packages from the `packages` directory.
* `clean-json` -- remove all JSON files.
Note that these scripts require an Emacs with `package.el` installed,
such as Emacs 24. If you have an older version of Emacs, you can get a
suitable `package.el` [here](http://bit.ly/pkg-el23).
[melpa]: http://melpa.milkbox.net
## API
All repository code is contained in the `package-build.el`.
All repository code is contained in the `package-build.el`.
### Functions
@ -397,7 +401,7 @@ which packages will be enabled (whitelist packages only) or excluded
`package-archives`, PACKAGE is a symbol of a package in that
archive to exclude. Any specified package is excluded regardless
of the value of `package-archive-enable-alist`
If a particular ARCHIVE has an entry in
`package-archive-enable-alist` then only packages
@ -422,4 +426,3 @@ You can install the package manually by pasting this into yoru `*scratch*` buffe
*MELPA* is *Milkypostman's ELPA* or *Milkypostman's Experimental Lisp
Package Archive* if you're not into the whole brevity thing.

View file

@ -0,0 +1,8 @@
Feature: Initialization
Scenario: read recipes
Given read recipes
Scenario: package-build initialization
Given initialization

View file

@ -0,0 +1,22 @@
(Given "^initialization$"
(lambda ()
(package-build-initialize)))
(Given "^read recipes$"
(lambda ()
(pb/read-recipes)))
(Given "^capture messages to \\(.+\\)$"
(lambda (varby)
(message "****** %s" varby)
(collect-messages-to varby)))
(Given "^package initialization$"
(lambda ()
(package-initialize)))
(Then "^\\(.+\\) should be empty"
(lambda (var)
(message "//////// %s" (eval (intern var)))
(let ((varsym (intern var)))
(assert (not (eval varsym)) nil "Variable %s is not empty." var))))

43
features/support/env.el Normal file
View file

@ -0,0 +1,43 @@
;; This is an example of how you could set up this file. This setup
;; requires a directory called util in the project root and that the
;; util directory contains the testing tools ert and espuds.
(let* ((features-directory
(file-name-directory
(directory-file-name (file-name-directory load-file-name))))
(project-directory
(file-name-directory
(directory-file-name features-directory))))
(setq melpa-root-path project-directory)
(setq melpa-util-path (expand-file-name "util" melpa-root-path)))
(add-to-list 'load-path melpa-root-path)
(add-to-list 'load-path (expand-file-name "espuds" melpa-util-path))
(require 'package-build)
(require 'ert)
(require 'espuds)
(Setup
;; Before anything has run
)
(Before
;; Before each scenario is run
(defmacro collect-messages-to (var)
(let ((varsym (intern (eval var))))
(set varsym '())
`(defadvice message (before message (format-string &rest args) activate)
(add-to-list ',varsym (ignore-errors (format format-string args))))
))
)
(After
;; After each scenario is run
)
(Teardown
;; After when everything has been run
)

View file

@ -13,11 +13,13 @@
<%
require 'json'
archive_json = JSON.parse(File.open("../archive.json").read)
recipe_json = JSON.parse(File.open("../recipes.json").read)
headers = ["Package", "Version", "Description", "Source"]
headers = ["Package", "Version", "Description", "Recipe", "Source"]
data = archive_json.keys.sort.map do |pkgname|
versions, deps, descr, pkgtype = archive_json[pkgname]
recipe = recipe_json[pkgname]
version = versions.join('.')
pkgurl = "packages/#{pkgname}-#{version}." + (pkgtype == "single" ? "el" : "tar")
recipe_url = "https://github.com/milkypostman/melpa/blob/master/recipes/#{pkgname}"
@ -25,10 +27,17 @@
if descr =~ /(.*?)(\s*-\*-.*?)?\s*\[source:\s*(\w+)\]\s*/
descr, source = $1, $3
end
["<a name=\"#{pkgname}\"></a>[#{pkgname}](#{pkgurl})", version, descr, "[#{source}](#{recipe_url})"]
source_url =
case source
when 'github' then "https://github.com/#{recipe['repo']}"
when 'wiki' then recipe.key?('files') ? nil : "http://www.emacswiki.org/emacs/#{pkgname}.el"
end
["<a name=\"#{pkgname}\"></a>[#{pkgname}](#{pkgurl})", version, descr, "[recipe](#{recipe_url})", source_url ? "[#{source}](#{source_url})" : ""]
end
colwidth = [0,0,0, 9]
colwidth = [0,0,0,0, 9]
data.map do |row|
row.to_enum(:each_with_index).map do |e,i|
@ -100,26 +109,11 @@ You can then customize two variables:
## Known Issues
Due to the way the HTTP routing works on my provider, the HTTP/1.1
connection will time out for long package installs--where the
package is large and takes a while to compile--like *magit* or *evil*. If you run into problems with complaints about the response from the web server consider adding
**Note:** *This fix are included in the `melpa.el` package.*
<!-- <script src="https://gist.github.com/1679208.js"> </script> -->
(setq url-http-attempt-keepalives nil)
This makes things a tad more slow but means that the install completes
correctly. Otherwise the connection times out and the install goes haywire.
### Fixes for `package.el`
**Note:** *These fixes are included in the `melpa.el` package.*
There are a number of small bugs in Emacs24's `package.el`. First,
when installing dependencies, the packages were not getting
initialized. Second, the order for dependencies was coming out
backwards for what I needed. Both problems are
easily patched by some *advice*.
There is a small bug in Emacs24's `package.el` the order for
dependencies comes out backwards for what I needed. the problem is
patched by some *advice*.
<!-- <script src="https://gist.github.com/1679232.js"> </script> -->
@ -131,17 +125,6 @@ backwards for what I needed. Both problems are
(setq requirements (reverse requirements))
(print requirements))
If you are not using Emacs24 from HEAD, you may also need this to initialize packages after they are downloaded and installed.
(defadvice package-download-tar
(after package-download-tar-initialize activate compile)
"initialize the package after compilation"
(package-initialize))
(defadvice package-download-single
(after package-download-single-initialize activate compile)
"initialize the package after compilation"
(package-initialize))
## Updating Packages
@ -159,3 +142,9 @@ packages using git, subversion, mercurial, and darcs. This covers
most of the packages that I am interested in.
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/datatables/1.9.4/jquery.dataTables.min.js" type="text/javascript"></script>
<script language="javascript">
$("table").dataTable({bPaginate: false, bLengthChange: false});
$('div.dataTables_filter input').focus().attr("placeholder", "Enter filter terms");
</script>

View file

@ -43,6 +43,7 @@
(require 'cl)
(require 'package)
(require 'lisp-mnt)
(defcustom package-build-working-dir (expand-file-name "working/")
"Directory in which to keep checkouts."
@ -65,6 +66,9 @@
(defvar package-build-archive-alist nil
"List of already-built packages, in the standard package.el format.")
(defvar package-build-initialized nil
"Determines if package-build has been initialized.")
;;; Internal functions
(defun pb/slurp-file (file-name)
@ -90,7 +94,7 @@
;; which break date-to-time
(date-to-time (replace-regexp-in-string "/" "-" s))))))
(concat (format-time-string "%Y%m%d." time)
(format "%d" (or (parse-integer (format-time-string "%H%M" time)) 0)))))
(format "%d" (or (string-to-number (format-time-string "%H%M" time)) 0)))))
(defun pb/string-match-all (regex str &optional group)
"Find every match for `REGEX' within `STR', returning the full match string or group `GROUP'."
@ -138,10 +142,9 @@ In turn, this function uses the :fetcher option in the config to
choose a source-specific fetcher function, which it calls with
the same arguments."
(let ((repo-type (plist-get config :fetcher)))
(message (format "%s " repo-type))
(message "Fetcher: %s" repo-type)
(unless (eq 'wiki repo-type)
(message (format "%s\n"
(or (plist-get config :repo) (plist-get config :url)))))
(message "Source: %s\n" (or (plist-get config :repo) (plist-get config :url))))
(funcall (intern (format "pb/checkout-%s" repo-type))
name config cwd)))
@ -177,11 +180,30 @@ seconds; the server cuts off after 10 requests in 20 seconds.")
(url-copy-file download-url filename t))
(when (zerop (nth 7 (file-attributes filename)))
(error "Wiki file %s was empty - has it been removed?" filename))
(with-current-buffer (pb/with-wiki-rate-limit
(url-retrieve-synchronously wiki-url))
(message (format "%s\n" download-url))
(pb/find-parse-time
"Last edited \\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} [0-9]\\{2\\}:[0-9]\\{2\\} [A-Z]\\{3\\}\\)"))))
;; The Last-Modified response header for the download is actually
;; correct for the file, but we have no access to that
;; header. Instead, we must query the non-raw emacswiki page for
;; the file.
;; Since those Emacswiki lookups are time-consuming, we maintain a
;; foo.el.stamp file containing ("SHA1" . "PARSED_TIME")
(let* ((new-content-hash (secure-hash 'sha1 (pb/slurp-file filename)))
(stamp-file (concat filename ".stamp"))
(stamp-info (pb/read-from-file stamp-file))
(prev-content-hash (car stamp-info)))
(if (and prev-content-hash
(string-equal new-content-hash prev-content-hash))
;; File has not changed, so return old timestamp
(progn
(message "%s is unchanged" filename)
(cdr stamp-info))
(message "%s has changed - checking mod time" filename)
(let ((new-timestamp
(with-current-buffer (pb/with-wiki-rate-limit
(url-retrieve-synchronously wiki-url))
(pb/find-parse-time
"Last edited \\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\} [0-9]\\{2\\}:[0-9]\\{2\\} [A-Z]\\{3\\}\\)"))))
(pb/dump (cons new-content-hash new-timestamp) stamp-file)
new-timestamp)))))
(defun pb/checkout-wiki (name config dir)
"Checkout package NAME with config CONFIG from the EmacsWiki into DIR."
@ -228,11 +250,11 @@ seconds; the server cuts off after 10 requests in 20 seconds.")
(defun pb/princ-exists (dir)
"Print a message that the contents of DIR will be updated."
(message (format "updating %s\n" dir)))
(message "Updating %s" dir))
(defun pb/princ-checkout (repo dir)
"Print a message that REPO will be checked out into DIR."
(message (format "cloning %s to %s\n" repo dir)))
(message "Cloning %s to %s" repo dir))
(defun pb/checkout-svn (name config dir)
"Check package NAME with config CONFIG out of svn into DIR."
@ -430,6 +452,35 @@ The file is written to `package-build-working-dir'."
(or (mapcar (lambda (fn) (concat dir "/" fn)) files)
(list dir)))))
(defun pb/find-package-commentary (file-path)
"Get commentary section from FILE-PATH."
(when (file-exists-p file-path)
(with-temp-buffer
(insert-file-contents file-path)
(lm-commentary))))
(defun pb/write-pkg-readme (commentary file-name)
"Write COMMENTARY to the FILE-NAME-readme.txt file."
(when commentary
(with-temp-buffer
(insert commentary)
;; Adapted from `describe-package-1'.
(goto-char (point-min))
(save-excursion
(when (re-search-forward "^;;; Commentary:\n" nil t)
(replace-match ""))
(while (re-search-forward "^\\(;+ ?\\)" nil t)
(replace-match ""))
(goto-char (point-min))
(when (re-search-forward "\\`\\( *\n\\)+" nil t)
(replace-match "")))
(delete-trailing-whitespace)
(let ((coding-system-for-write buffer-file-coding-system))
(write-region nil nil
(expand-file-name (concat file-name "-readme.txt")
package-build-archive-dir))))))
(defun pb/get-package-info (file-path)
"Get a vector of package info from the docstrings in FILE-PATH."
(when (file-exists-p file-path)
@ -464,7 +515,6 @@ The file is written to `package-build-working-dir'."
(nth 1 pkgfile-info)))
(error "No define-package found in %s" file-path)))))
(defun pb/merge-package-info (pkg-info name version config)
"Return a version of PKG-INFO updated with NAME, VERSION and info from CONFIG.
If PKG-INFO is nil, an empty one is created."
@ -478,12 +528,14 @@ If PKG-INFO is nil, an empty one is created."
(defun pb/dump-archive-contents ()
"Dump the list of built packages back to the archive-contents file."
(package-build-initialize)
(pb/dump (cons 1 package-build-archive-alist)
(expand-file-name "archive-contents"
package-build-archive-dir)))
(defun pb/add-to-archive-contents (pkg-info type)
"Add the built archive with info PKG-INFO and TYPE to `package-build-archive-alist'."
(package-build-initialize)
(let* ((name (intern (aref pkg-info 0)))
(requires (aref pkg-info 1))
(desc (or (aref pkg-info 2) "No description available."))
@ -515,6 +567,7 @@ If PKG-INFO is nil, an empty one is created."
Note that the working directory (if present) is not deleted by
this function, since the archive list may contain another version
of the same-named package which is to be kept."
(package-build-initialize)
(print (format "Removing archive: %s" archive-entry))
(let ((archive-file (pb/archive-file-name archive-entry)))
(when (file-exists-p archive-file)
@ -523,10 +576,29 @@ of the same-named package which is to be kept."
(remove archive-entry package-build-archive-alist))
(pb/dump-archive-contents))
(defun pb/read-recipe (file-name)
(let ((pkg-info (pb/read-from-file file-name)))
(if (string= (symbol-name (car pkg-info))
(file-name-nondirectory file-name))
pkg-info
(error "Recipe '%s' contains mismatched package name '%s'"
(file-name-nondirectory file-name)
(car pkg-info)))))
(defun pb/read-recipes ()
"Return a list of data structures for all recipes in `package-build-recipes-dir'."
(mapcar 'pb/read-from-file
(directory-files package-build-recipes-dir t "^[^.]")))
(loop for file-name in (directory-files package-build-recipes-dir t "^[^.]")
collect (pb/read-recipe file-name)))
(defun pb/read-recipes-ignore-errors ()
"Return a list of data structures for all recipes in `package-build-recipes-dir'."
(loop for file-name in (directory-files package-build-recipes-dir t "^[^.]")
for pkg-info = (condition-case err (pb/read-recipe file-name)
('error (message (error-message-string err))
nil))
when pkg-info
collect pkg-info))
(defun pb/expand-file-specs (dir specs &optional subdir)
@ -583,6 +655,7 @@ FILES is a list of (SOURCE . DEST) relative filepath pairs."
(defun pb/package-name-completing-read ()
"Prompt for a package name, returning a symbol."
(package-build-initialize)
(intern (completing-read "Package: " package-build-alist)))
(defun pb/find-source-file (target files)
@ -595,6 +668,7 @@ FILES is a list of (SOURCE . DEST) relative filepath pairs."
(defun package-build-archive (name)
"Build a package archive for package NAME."
(interactive (list (pb/package-name-completing-read)))
(package-build-initialize)
(let* ((file-name (symbol-name name))
(cfg (or (cdr (assoc name package-build-alist))
(error "Cannot find package %s" file-name)))
@ -602,10 +676,11 @@ FILES is a list of (SOURCE . DEST) relative filepath pairs."
(file-name-as-directory
(expand-file-name file-name package-build-working-dir))))
(message (format "\n;;; %s\n" file-name))
(message "\n;;; %s\n" file-name)
(let* ((version (pb/checkout name cfg pkg-cwd))
(files (pb/expand-config-file-list pkg-cwd cfg))
(default-directory package-build-working-dir))
(default-directory package-build-working-dir)
(start-time (current-time)))
(cond
((not version)
(message "Unable to check out repository for %s" name))
@ -622,23 +697,34 @@ FILES is a list of (SOURCE . DEST) relative filepath pairs."
(when (file-exists-p pkg-target)
(delete-file pkg-target t))
(copy-file pkg-source pkg-target)
(pb/write-pkg-readme (and (> (length pkg-info) 4) (aref pkg-info 4))
file-name)
(pb/add-to-archive-contents pkg-info 'single)))
((< 1 (length files))
(let* ((pkg-dir (concat file-name "-" version))
(pkg-file (concat file-name "-pkg.el"))
(pkg-file-source (or (pb/find-source-file pkg-file files)
pkg-file))
(file-source (concat file-name ".el"))
(pkg-source (or (pb/find-source-file file-source files)
file-source))
(pkg-info
(pb/merge-package-info
(let ((default-directory pkg-cwd))
(or (pb/get-pkg-file-info pkg-file-source)
;; some packages (like magit) provide name-pkg.el.in
(pb/get-pkg-file-info (concat pkg-file ".in"))
(pb/get-package-info (concat file-name ".el"))))
(pb/get-package-info pkg-source)))
file-name
version
cfg)))
(let ((default-directory pkg-cwd))
(pb/write-pkg-readme (pb/find-package-commentary pkg-source)
file-name))
(when (file-exists-p pkg-dir)
(delete-directory pkg-dir t nil))
@ -662,6 +748,9 @@ FILES is a list of (SOURCE . DEST) relative filepath pairs."
(t (error "Unable to find files matching recipe patterns")))
(pb/dump-archive-contents)
(message "Built in %.3fs, finished at %s"
(time-to-seconds (time-since start-time))
(current-time-string))
file-name)))
;;;###autoload
@ -676,7 +765,7 @@ FILES is a list of (SOURCE . DEST) relative filepath pairs."
(if (y-or-n-p (format "Save file %s? " buffer-file-name))
(save-buffer)
(error "Aborting")))
(package-build-initialize)
(package-build-reinitialize)
(package-build-archive (intern (file-name-nondirectory (buffer-file-name)))))
(defun package-build-archive-ignore-errors (pkg)
@ -698,6 +787,7 @@ FILES is a list of (SOURCE . DEST) relative filepath pairs."
(defun package-build-all ()
"Build all packages in the `package-build-alist'."
(interactive)
(package-build-initialize)
(let ((failed (loop for pkg in (mapcar 'car package-build-alist)
when (not (package-build-archive-ignore-errors pkg))
collect pkg)))
@ -711,22 +801,28 @@ FILES is a list of (SOURCE . DEST) relative filepath pairs."
(defun package-build-cleanup ()
"Remove previously-built packages that no longer have recipes."
(interactive)
(package-build-initialize)
(let* ((known-package-names (mapcar 'car package-build-alist))
(stale-archives (loop for built in package-build-archive-alist
when (not (memq (car built) known-package-names))
collect built)))
(mapc 'pb/remove-archive stale-archives)))
(defun package-build-reinitialize ()
(interactive)
(setq package-build-initialized nil)
(package-build-initialize))
(defun package-build-initialize ()
"Load the recipe and archive-contents files."
(interactive)
(setq package-build-alist (pb/read-recipes)
package-build-archive-alist
(cdr (pb/read-from-file
(expand-file-name "archive-contents"
package-build-archive-dir)))))
(package-build-initialize)
(unless package-build-initialized
(setq package-build-initialized t
package-build-alist (pb/read-recipes-ignore-errors)
package-build-archive-alist
(cdr (pb/read-from-file
(expand-file-name "archive-contents"
package-build-archive-dir))))))
;; Utility functions
(autoload 'json-encode "json")
@ -734,11 +830,13 @@ FILES is a list of (SOURCE . DEST) relative filepath pairs."
(defun package-build-alist-as-json (fn)
(interactive)
(package-build-initialize)
(with-temp-file fn
(insert (json-encode package-build-alist))))
(defun package-build-archive-alist-as-json (fn)
(interactive)
(package-build-initialize)
(with-temp-file fn
(insert (json-encode package-build-archive-alist))))
@ -747,6 +845,7 @@ FILES is a list of (SOURCE . DEST) relative filepath pairs."
;; Local Variables:
;; coding: utf-8
;; byte-compile-warnings: (not cl-functions)
;; eval: (checkdoc-minor-mode 1)
;; End:

1
recipes/ack-menu Normal file
View file

@ -0,0 +1 @@
(ack-menu :repo "chumpage/ack-menu" :fetcher github)

1
recipes/applescript-mode Normal file
View file

@ -0,0 +1 @@
(applescript-mode :fetcher github :repo "ieure/applescript-mode")

1
recipes/auto-indent-mode Normal file
View file

@ -0,0 +1 @@
(auto-indent-mode :fetcher github :repo "mlf176f2/auto-indent-mode.el")

1
recipes/awk-it Normal file
View file

@ -0,0 +1 @@
(awk-it :fetcher wiki)

3
recipes/bbdb-vcard Normal file
View file

@ -0,0 +1,3 @@
(bbdb-vcard :repo "tohojo/bbdb-vcard"
:fetcher github
:files ("bbdb-vcard.el" "vcard.el"))

View file

@ -1,3 +1,4 @@
(buster-snippets
:repo "magnars/buster-snippets.el"
:fetcher github)
:fetcher github
:files ("*.el" "snippets"))

1
recipes/cache Normal file
View file

@ -0,0 +1 @@
(cache :fetcher github :repo "nflath/cache")

1
recipes/chicken-scheme Normal file
View file

@ -0,0 +1 @@
(chicken-scheme :fetcher github :repo "dleslie/chicken-scheme.el")

1
recipes/circe Normal file
View file

@ -0,0 +1 @@
(circe :fetcher github :repo "jorgenschaefer/circe" :files ("lisp/*.el"))

1
recipes/column-marker Normal file
View file

@ -0,0 +1 @@
(column-marker :fetcher wiki)

1
recipes/creole Normal file
View file

@ -0,0 +1 @@
(creole :fetcher github :repo "nicferrier/elwikicreole" :files ("creole.el"))

1
recipes/crosshairs Normal file
View file

@ -0,0 +1 @@
(crosshairs :fetcher wiki)

1
recipes/cursor-chg Normal file
View file

@ -0,0 +1 @@
(cursor-chg :fetcher wiki)

1
recipes/dart-mode Normal file
View file

@ -0,0 +1 @@
(dart-mode :fetcher github :repo "nex3/dart-mode")

4
recipes/dircmp Normal file
View file

@ -0,0 +1,4 @@
(dircmp
:fetcher github
:repo "matthewlmcclure/dircmp-mode"
:files ("*.el" "*.sh"))

1
recipes/dired-efap Normal file
View file

@ -0,0 +1 @@
(dired-efap :fetcher wiki)

1
recipes/dna-mode Normal file
View file

@ -0,0 +1 @@
(dna-mode :fetcher github :repo "jhgorrell/dna-mode-el")

1
recipes/dropbox Normal file
View file

@ -0,0 +1 @@
(dropbox :fetcher github :repo "pavpanchekha/dropbox.el")

1
recipes/easy-after-load Normal file
View file

@ -0,0 +1 @@
(easy-after-load :fetcher github :repo "pd/easy-after-load")

1
recipes/el-mock Normal file
View file

@ -0,0 +1 @@
(el-mock :fetcher wiki)

4
recipes/elmine Normal file
View file

@ -0,0 +1,4 @@
(elmine
:repo "leoc/elmine"
:fetcher github
:files ("elmine.el"))

1
recipes/elpa-audit Normal file
View file

@ -0,0 +1 @@
(elpa-audit :fetcher github :repo "purcell/elpa-audit")

1
recipes/elpy Normal file
View file

@ -0,0 +1 @@
(elpy :fetcher github :repo "jorgenschaefer/elpy")

View file

@ -0,0 +1,3 @@
(emagician-fix-spell-memory :repo "jonnay/emagicians-starter-kit"
:fetcher github
:files ("emagician-fix-spell-memory.el"))

3
recipes/ercn Normal file
View file

@ -0,0 +1,3 @@
(ercn
:fetcher github
:repo "leathekd/ercn")

View file

@ -1 +0,0 @@
(ergoemacs-keybindings :url "http://ergoemacs.googlecode.com/svn/trunk/ergoemacs/ergoemacs-keybindings" :fetcher svn)

8
recipes/ergoemacs-mode Normal file
View file

@ -0,0 +1,8 @@
(ergoemacs-mode
:url "https://code.google.com/p/ergoemacs/"
:files ("ergoemacs/ergoemacs-keybindings/*.el"
"ergoemacs/ergoemacs-keybindings/*.svg"
"ergoemacs/ergoemacs-keybindings/*.ahk"
"ergoemacs/ergoemacs-keybindings/bash-us.txt"
"ergoemacs/ergoemacs-keybindings/os_x_qwerty.dict.txt")
:fetcher git)

View file

@ -0,0 +1,4 @@
(es-auto-auto-indent
:repo "sabof/es-auto-auto-indent"
:fetcher github
:files ("*.el"))

View file

@ -0,0 +1,4 @@
(es-edit-color-stamp
:repo "sabof/es-edit-color-stamp"
:fetcher github
:files ("*.el" ("qt_color_picker" "qt_color_picker/*.pro" "qt_color_picker/*.cpp")))

3
recipes/es-lib Normal file
View file

@ -0,0 +1,3 @@
(es-lib :repo "sabof/es-lib"
:fetcher github
:files ("*.el"))

4
recipes/es-shift-text Normal file
View file

@ -0,0 +1,4 @@
(es-shift-text
:repo "sabof/es-shift-text"
:fetcher github
:files ("*.el"))

3
recipes/evil-paredit Normal file
View file

@ -0,0 +1,3 @@
(evil-paredit :repo "roman/evil-paredit"
:fetcher github
:files ("evil-paredit.el"))

4
recipes/extend-dnd Normal file
View file

@ -0,0 +1,4 @@
(extend-dnd
:fetcher github
:repo "mlf176f2/extend-dnd"
:files ("extend-dnd.el" "dir" "extend-dnd.info"))

1
recipes/flex-autopair Normal file
View file

@ -0,0 +1 @@
(flex-autopair :fetcher github :repo "uk-ar/flex-autopair")

1
recipes/flymake-easy Normal file
View file

@ -0,0 +1 @@
(flymake-easy :fetcher github :repo "purcell/flymake-easy")

4
recipes/fold-this Normal file
View file

@ -0,0 +1,4 @@
(fold-this
:fetcher github
:repo "magnars/fold-this.el"
:files ("fold-this.el"))

4
recipes/fsharp-mode Normal file
View file

@ -0,0 +1,4 @@
(fsharp-mode
:fetcher github
:repo "fsharp/fsharpbinding"
:files ("emacs/fsharp-mode*.el" "emacs/inf-fsharp-mode.el"))

View file

@ -1,3 +1,4 @@
(gap-mode
:fetcher hg
:url "https://bitbucket.org/gvol/gap-mode")
:url "https://bitbucket.org/gvol/gap-mode"
:files ("*.el" "emacs.gaprc"))

1
recipes/gitty Normal file
View file

@ -0,0 +1 @@
(gitty :fetcher github :repo "jorgenschaefer/gitty")

1
recipes/gnus-alias Normal file
View file

@ -0,0 +1 @@
(gnus-alias :fetcher wiki)

1
recipes/grep-a-lot Normal file
View file

@ -0,0 +1 @@
(grep-a-lot :fetcher github :repo "ZungBang/emacs-grep-a-lot")

2
recipes/guide-key Normal file
View file

@ -0,0 +1,2 @@
(guide-key :repo "kbkbkbkb1/guide-key" :fetcher github)

1
recipes/haste Normal file
View file

@ -0,0 +1 @@
(haste :fetcher github :repo "rlister/emacs-haste-client")

View file

@ -1 +1 @@
(header-button :repo "tarsius/header-button" :fetcher github)
(header-button :repo "emacsattic/header-button" :fetcher github)

1
recipes/helm-ls-git Normal file
View file

@ -0,0 +1 @@
(helm-ls-git :repo "emacs-helm/helm-ls-git" :fetcher github)

View file

@ -0,0 +1 @@
(helm-git :repo "emacs-helm/helm-mercurial-queue" :fetcher github)

1
recipes/heroku Normal file
View file

@ -0,0 +1 @@
(heroku :fetcher github :repo "technomancy/heroku.el")

1
recipes/hide-lines Normal file
View file

@ -0,0 +1 @@
(hide-lines :fetcher wiki)

1
recipes/http-twiddle Normal file
View file

@ -0,0 +1 @@
(http-twiddle :fetcher github :repo "hassy/http-twiddle")

1
recipes/idle-require Normal file
View file

@ -0,0 +1 @@
(idle-require :fetcher github :repo "nschum/idle-require.el")

1
recipes/iflipb Normal file
View file

@ -0,0 +1 @@
(iflipb :url "http://hg.rosdahl.net/iflipb" :fetcher hg)

3
recipes/instapaper Normal file
View file

@ -0,0 +1,3 @@
(instapaper
:fetcher hg
:url "https://bitbucket.org/jfm/emacs-instapaper")

1
recipes/itail Normal file
View file

@ -0,0 +1 @@
(itail :repo "re5et/itail" :fetcher github)

3
recipes/javadoc-lookup Normal file
View file

@ -0,0 +1,3 @@
(javadoc-lookup :repo "skeeto/javadoc-lookup"
:fetcher github
:files ("*.el" ("webcache" "webcache/*")))

3
recipes/jedi Normal file
View file

@ -0,0 +1,3 @@
(jedi :fetcher github
:repo "tkf/emacs-jedi"
:files ("jedi*"))

1
recipes/key-chord Normal file
View file

@ -0,0 +1 @@
(key-chord :fetcher wiki)

1
recipes/kill-ring-search Normal file
View file

@ -0,0 +1 @@
(kill-ring-search :fetcher github :repo "nschum/kill-ring-search.el")

1
recipes/lacarte Normal file
View file

@ -0,0 +1 @@
(lacarte :fetcher wiki)

4
recipes/linear-undo Normal file
View file

@ -0,0 +1,4 @@
(linear-undo
:fetcher github
:repo "k-talo/linear-undo.el"
:files ("linear-undo.el"))

1
recipes/macro-math Normal file
View file

@ -0,0 +1 @@
(macro-math :fetcher github :repo "nschum/macro-math.el")

1
recipes/mag-menu Normal file
View file

@ -0,0 +1 @@
(mag-menu :repo "chumpage/mag-menu" :fetcher github)

View file

@ -0,0 +1 @@
(magit-commit-training-wheels :repo "re5et/magit-commit-training-wheels" :fetcher github)

4
recipes/markup Normal file
View file

@ -0,0 +1,4 @@
(markup
:repo "leoc/markup.el"
:fetcher github
:files ("markup.el"))

1
recipes/mongo Normal file
View file

@ -0,0 +1 @@
(mongo :fetcher github :repo "m2ym/mongo-el" :files ("mongo.el" "bson.el"))

4
recipes/namespaces Normal file
View file

@ -0,0 +1,4 @@
(namespaces
:fetcher github
:repo "chrisbarrett/elisp-namespaces"
:files ("namespaces.el"))

4
recipes/ncl-mode Normal file
View file

@ -0,0 +1,4 @@
(ncl-mode
:repo "yyr/ncl-mode"
:fetcher github
:files ("*.el"))

3
recipes/notmuch Normal file
View file

@ -0,0 +1,3 @@
(notmuch :url "git://git.notmuchmail.org/git/notmuch"
:fetcher git
:files ("emacs/*.el"))

4
recipes/nyan-mode Normal file
View file

@ -0,0 +1,4 @@
(nyan-mode
:fetcher github
:repo "TeMPOraL/nyan-mode"
:files ("nyan-mode.el" "img"))

1
recipes/occidental-theme Normal file
View file

@ -0,0 +1 @@
(occidental-theme :repo "olcai/occidental-theme" :fetcher github)

1
recipes/octomacs Normal file
View file

@ -0,0 +1 @@
(octomacs :fetcher github :repo "jhelwig/octomacs")

1
recipes/org-bullets Normal file
View file

@ -0,0 +1 @@
(org-bullets :fetcher github :repo "sabof/org-bullets")

4
recipes/org-mac-iCal Normal file
View file

@ -0,0 +1,4 @@
(org-mac-iCal
:fetcher git
:url "git://orgmode.org/org-mode.git"
:files ("contrib/lisp/org-mac-iCal.el"))

View file

@ -0,0 +1,4 @@
(org-mac-link-grabber
:fetcher git
:url "git://orgmode.org/org-mode.git"
:files ("contrib/lisp/org-mac-link-grabber.el"))

View file

@ -1 +1,4 @@
(org-outlook :fetcher github :repo "mlf176f2/org-outlook.el" :files ("*.el" "*.vbs"))
(org-outlook
:repo "mlf176f2/org-outlook.el"
:fetcher github
:files ("org-outlook.el" "dir" "org-outlook.info"))

View file

@ -1 +1 @@
(org-readme :fetcher github :repo "mlf176f2/org-readme")
(org-readme :fetcher github :repo "mlf176f2/org-readme" :files ("org-readme.el" "dir" "org-readme.info"))

4
recipes/osx-location Normal file
View file

@ -0,0 +1,4 @@
(osx-location
:fetcher github
:repo "purcell/osx-location"
:files ("*.el" "EmacsLocationHelper"))

1
recipes/otter-mode Normal file
View file

@ -0,0 +1 @@
(otter-mode :fetcher github :repo "scvalex/script-fu" :files ("otter-mode.el"))

4
recipes/pabbrev Normal file
View file

@ -0,0 +1,4 @@
(pabbrev
:fetcher hg
:url "https://code.google.com/p/phillord-emacs-packages/"
:files ("pabbrev.el"))

1
recipes/page-break-lines Normal file
View file

@ -0,0 +1 @@
(page-break-lines :fetcher github :repo "purcell/page-break-lines")

4
recipes/paredit-menu Normal file
View file

@ -0,0 +1,4 @@
(paredit-menu
:fetcher hg
:url "https://code.google.com/p/phillord-emacs-packages/"
:files ("paredit-menu.el"))

1
recipes/pcmpl-args Normal file
View file

@ -0,0 +1 @@
(pcmpl-args :fetcher github :repo "JonWaltman/pcmpl-args.el")

4
recipes/pcre2el Normal file
View file

@ -0,0 +1,4 @@
(pcre2el
:fetcher github
:repo "joddie/pcre2el"
:files ("pcre2el.el"))

1
recipes/persp-mode Normal file
View file

@ -0,0 +1 @@
(persp-mode :repo "Bad-ptr/persp-mode.el" :fetcher github)

View file

@ -1 +1 @@
(pomodoro :fetcher github :repo "docgnome/pomodoro.el")
(pomodoro :fetcher github :repo "baudtack/pomodoro.el")

4
recipes/pos-tip Normal file
View file

@ -0,0 +1,4 @@
(pos-tip
:repo "syohex/pos-tip"
:fetcher github
:files ("pos-tip.el"))

1
recipes/pov-mode Normal file
View file

@ -0,0 +1 @@
(pov-mode :fetcher git :url "git://gitorious.org/pov-mode/pov-mode.git")

4
recipes/pylint Normal file
View file

@ -0,0 +1,4 @@
(pylint
:url "http://hg.logilab.org/pylint"
:fetcher hg
:files ("elisp/pylint.el"))

1
recipes/quickref Normal file
View file

@ -0,0 +1 @@
(quickref :fetcher "github" :repo "pd/quickref.el")

View file

@ -1 +0,0 @@
(rainbow-mode :repo "emacsmirror/rainbow-mode" :fetcher github)

1
recipes/request Normal file
View file

@ -0,0 +1 @@
(request :repo "tkf/emacs-request" :fetcher github)

1
recipes/rnc-mode Normal file
View file

@ -0,0 +1 @@
(rnc-mode :fetcher github :repo "TreeRex/rnc-mode")

Some files were not shown because too many files have changed in this diff Show more