| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 | ;;; org-track.el --- Track the most recent Org-mode version available.;;;; Copyright (C) 2009-2021 Free Software Foundation, Inc.;;;; Author: Bastien Guerry <bzg@gnu.org>;;         Eric S Fraga   <e.fraga at ucl.ac dot uk>;;         Sebastian Rose <sebastian_rose at gmx dot de>;;         The Worg people https://orgmode.org/worg/;; Keywords: outlines, hypermedia, calendar, wp;; Homepage: https://orgmode.org;; Version: 6.29a;;;; Released under the GNU General Public License version 3;; see: https://www.gnu.org/licenses/gpl-3.0.html;;;; This file is not part of GNU Emacs.;;;; This program is free software: you can redistribute it and/or modify;; it under the terms of the GNU General Public License as published by;; the Free Software Foundation, either version 3 of the License, or;; (at your option) any later version.;; This program is distributed in the hope that it will be useful,;; but WITHOUT ANY WARRANTY; without even the implied warranty of;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the;; GNU General Public License for more details.;; You should have received a copy of the GNU General Public License;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Commentary:;;;; WARNING: This library is obsolete, you should use the make targets;; to keep track of Org latest developments.;;;; Download the latest development tarball, unpack and optionally compile it;;;; Usage:;;;;   (require 'org-track);;;;   ;; ... somewhere in your setup (use customize):;;;;   (setq org-track-directory "~/test/");;   (setq org-track-compile-sources nil);;   (setq org-track-remove-package t);;;;   M-x org-track-update RET(require 'url-parse)(require 'url-handlers)(autoload 'url-file-local-copy "url-handlers")(autoload 'url-generic-parse-url "url-parse");;; Variables:(defgroup org-track nil  "Track the most recent Org-mode version available.To use org-track, adjust `org-track-directory'.Org will download the archived latest git version for you,unpack it into that directory (i.e. a subdirectory`org-mode/' is added), create the autoloads file`org-loaddefs.el' for you and, optionally, compile thesources.All you'll have to do is call `M-x org-track-update' fromtime to time."  :group 'org)(defcustom org-track-directory (concat user-emacs-directory "org/lisp")  "Directory where your org-mode/ directory lives.If that directory does not exist, it will be created."  :type 'directory)(defcustom org-track-compile-sources t  "If `nil', never compile org-sources.Org will only create the autoloads file `org-loaddefs.el' foryou then. If `t', compile the sources, too.Note, that emacs preferes compiled elisp files overnon-compiled ones."  :type 'boolean)(defcustom org-track-org-url "https://orgmode.org/"  "The URL where the package to download can be found.Please append a slash."  :type 'string)(defcustom org-track-org-package "org-latest.tar.gz"  "The basename of the package you use.Defaults to the development version of Org-mode.This should be a *.tar.gz package, since emacs provides allyou need to unpack it."  :type 'string)(defcustom org-track-remove-package nil  "Remove org-latest.tar.gz after updates?"  :type 'boolean);;; Frontend(defun org-track-update ()  "Update to current Org-mode version.Also, generate autoloads and evtl. compile the sources."  (interactive)  (let* ((base (file-truename org-track-directory))         (org-exists (file-exists-p                      (file-truename                       (concat base "/org-mode/lisp/org.el"))))         (nobase (not (file-directory-p                       (file-truename org-track-directory)))))    (if nobase        (when (y-or-n-p               (format "Directory %s does not exist. Create it?" base))          (make-directory base t)          (setq nobase nil)))    (if nobase        (message "Not creating %s - giving up." org-track-directory)      (condition-case err          (progn            (org-track-fetch-package)            (org-track-compile-org))        (error (message "%s" (error-message-string err)))))));;; tar related functions;; `url-retrieve-synchronously' fetches files synchronously. How can we ensure;; that? If the maintainers of that package decide, that an assynchronous;; download might be better??? (used by `url-file-local-copy');;;###autoload(defun org-track-fetch-package (&optional directory)  "Fetch Org package depending on `org-track-fetch-package-extension'.If DIRECTORY is defined, unpack the package there, i.e. add thesubdirectory org-mode/ to DIRECTORY."  (interactive "Dorg-track directory: ")  (let* ((pack (concat                (if (string-match "/$" org-track-org-url)                    org-track-org-url                  (concat org-track-org-url "/"))                org-track-org-package))         (base (file-truename                (or directory org-track-directory)))         (target (file-truename                  (concat base "/" org-track-org-package)))         url download tarbuff)    (message "Fetching to %s - this might take some time..."  base)    (setq url (url-generic-parse-url pack))    (setq download (url-file-local-copy url)) ;; errors if fail    (copy-file download target t)    (delete-file download)    ;; (tar-mode) leads to dubious errors. We use the auto-mode-alist to    ;; ensure tar-mode is used:    (add-to-list 'auto-mode-alist '("org-latest\\.tar\\.gz\\'" . tar-mode))    (setq tarbuff (find-file target))    (with-current-buffer tarbuff ;; with-temp-buffer does not work with tar-mode??      (tar-untar-buffer))    (kill-buffer tarbuff)    (if org-track-remove-package        (delete-file target))));;; Compile Org-mode sources;;;###autoload(defun org-track-compile-org (&optional directory)  "Compile all *.el files that come with org-mode.Generate the autoloads file `org-loaddefs.el'.DIRECTORY is where the directory org-mode/ lives (i.e. the          parent directory of your local repo."  (interactive)  ;; file-truename expands the filename and removes double slash, if exists:  (setq directory (file-truename                   (concat                    (or directory                        (file-truename (concat org-track-directory "/org-mode/lisp")))                    "/")))  (add-to-list 'load-path directory)  (let ((list-of-org-files (file-expand-wildcards (concat directory "*.el"))))    ;; create the org-loaddefs file    (require 'autoload)    (setq esf/org-install-file (concat directory "org-loaddefs.el"))    (find-file esf/org-install-file)    (erase-buffer)    (mapc (lambda (x)            (generate-file-autoloads x))          list-of-org-files)    (insert "\n(provide (quote org-loaddefs))\n")    (save-buffer)    (kill-buffer)    (byte-compile-file esf/org-install-file t)    (mapc (lambda (f)            (if (file-exists-p (concat f "c"))                (delete-file (concat f "c"))))          list-of-org-files)    (if org-track-compile-sources        (mapc (lambda (f) (byte-compile-file f)) list-of-org-files))))(provide 'org-track);;; org-track.el ends here
 |