Function: org-babel-sha1-hash

org-babel-sha1-hash is an autoloaded, interactive and byte-compiled function defined in ob-core.el.gz.

Signature

(org-babel-sha1-hash &optional INFO CONTEXT)

Documentation

Generate a sha1 hash based on the value of INFO.

CONTEXT specifies the context of evaluation. It can be :eval,
:export, :tangle. A nil value means :eval.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/org/ob-core.el.gz
;;;###autoload
(defun org-babel-sha1-hash (&optional info context)
  "Generate a sha1 hash based on the value of INFO.
CONTEXT specifies the context of evaluation.  It can be `:eval',
`:export', `:tangle'.  A nil value means `:eval'."
  (interactive)
  (let ((print-level nil)
	(info (or info (org-babel-get-src-block-info)))
	(context (or context :eval)))
    (setf (nth 2 info)
	  (sort (copy-sequence (nth 2 info))
		(lambda (a b) (string< (car a) (car b)))))
    (let* ((rm (lambda (lst)
		 (dolist (p '("replace" "silent" "none"
			      "discard" "append" "prepend"))
		   (setq lst (remove p lst)))
		 lst))
	   (norm (lambda (arg)
		   (let ((v (if (and (listp (cdr arg)) (null (cddr arg)))
				(copy-sequence (cdr arg))
			      (cdr arg))))
		     (when (and v (not (and (sequencep v)
					  (not (consp v))
					  (= (length v) 0))))
		       (cond
			((and (listp v) ; lists are sorted
			      (member (car arg) '(:result-params)))
			 (sort (funcall rm v) #'string<))
			((and (stringp v) ; strings are sorted
			      (member (car arg) '(:results :exports)))
			 (mapconcat #'identity (sort (funcall rm (split-string v))
						     #'string<) " "))
			(t v))))))
	   ;; expanded body
	   (lang (nth 0 info))
	   (params (nth 2 info))
	   (body (if (org-babel-noweb-p params context)
		     (org-babel-expand-noweb-references info)
		   (nth 1 info)))
	   (expand-cmd (intern (concat "org-babel-expand-body:" lang)))
	   (assignments-cmd (intern (concat "org-babel-variable-assignments:"
					    lang)))
	   (expanded
	    (if (fboundp expand-cmd) (funcall expand-cmd body params)
	      (org-babel-expand-body:generic
	       body params (and (fboundp assignments-cmd)
				(funcall assignments-cmd params))))))
      (let* ((it (format "%s-%s"
                         (mapconcat
                          #'identity
                          (delq nil (mapcar (lambda (arg)
                                            (let ((normalized (funcall norm arg)))
                                              (when normalized
                                                (format "%S" normalized))))
                                          (nth 2 info))) ":")
                         expanded))
             (hash (sha1 it)))
        (when (called-interactively-p 'interactive) (message hash))
        hash))))