Emacs personal configuration
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

69 行
2.6KB

  1. (require-package 'marmalade)
  2. ;;; Handy code for uploading new versions of my own packages to marmalade
  3. (autoload 'marmalade-upload-buffer "marmalade")
  4. (defun sanityinc/parse-git-version (s)
  5. "Return numeric version array parsed from S, or nil."
  6. (ignore-errors (version-to-list s)))
  7. (defun latest-version-from-git-tag ()
  8. (let ((versions
  9. (remove-if #'null
  10. (mapcar #'sanityinc/parse-git-version
  11. (split-string (shell-command-to-string "git tag"))))))
  12. (sort versions #'version-list-<)
  13. (package-version-join (car (last versions)))))
  14. (defun update-version-header (val)
  15. (save-excursion
  16. (goto-char (point-min))
  17. (re-search-forward "^;;;? ?Version:")
  18. (kill-line)
  19. (insert " " val)))
  20. (defun submit-tar-to-marmalade (buf)
  21. (interactive "bSubmit buffer library as tar: ")
  22. (with-current-buffer buf
  23. (let* ((tag (or (latest-version-from-git-tag) (error "Not tagged")))
  24. (library-name (file-name-nondirectory (file-name-sans-extension buffer-file-name)))
  25. (package-dir-name (concat library-name "-" tag))
  26. (temp-working-dir (make-temp-file "emacs-marmalade" t))
  27. (dest (expand-file-name package-dir-name temp-working-dir))
  28. (tar-cmd (or (executable-find "gtar")
  29. (executable-find "tar")))
  30. (tar (concat dest ".tar")))
  31. (message "Building package in %s" dest)
  32. (make-directory dest)
  33. (let ((command-line (format "cp *.el %s && (cd %s && perl -spi -e 's/\\{\\{VERSION\\}\\}/%s/' *.el) && (cd %s && %s cvf %s %s)" dest dest tag temp-working-dir tar-cmd tar package-dir-name)))
  34. (shell-command command-line))
  35. (save-excursion
  36. (shell-command (format "open %s" temp-working-dir))
  37. ;; (find-file tar)
  38. ;; (marmalade-upload-buffer (current-buffer))
  39. ;; (delete-directory temp-working-dir t)
  40. ))))
  41. (defun submit-to-marmalade (buf)
  42. "Submit the elisp library in BUF to Marmalade."
  43. (interactive
  44. (list
  45. (let ((buffers (loop for b in (mapcar 'buffer-name (buffer-list))
  46. when (with-current-buffer b
  47. (and buffer-file-name
  48. (eq major-mode 'emacs-lisp-mode)))
  49. collect b)))
  50. (completing-read "Submit buffer: " buffers nil t nil nil (car buffers)))))
  51. (with-current-buffer buf
  52. (let ((tag (latest-version-from-git-tag)))
  53. (unless tag
  54. (error "Not tagged"))
  55. (update-version-header tag)
  56. (marmalade-upload-buffer buf)
  57. (revert-buffer t t)
  58. (message "Submitted version %s to marmalade" tag))))
  59. (provide 'init-marmalade)