From aa0aae272bf1160becc45d2343bb990489009bb1 Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Fri, 31 Aug 2012 23:43:50 +0200 Subject: [PATCH] Fix #835: el-get-update treat prop removal now Use the new source or abort if non-whitelisted properties are changed. fixes #835 --- el-get-status.el | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/el-get-status.el b/el-get-status.el index 38d88967..8d6f500e 100644 --- a/el-get-status.el +++ b/el-get-status.el @@ -238,6 +238,22 @@ are not." else do (setq disallowed (plist-put disallowed k v)) finally return (list update disallowed))) +(defun el-get-non-whitelisted-properties-changed-p (old-source new-source) + "Test if non-whitelisted properties are changed." + (loop for k in (set-difference + (remove-duplicates + (append (loop for (k _) on old-source by 'cddr collect k) + (loop for (k _) on new-source by 'cddr collect k))) + el-get-status-recipe-update-whitelist) + for in-old-p = (plist-member old-source k) + for in-new-p = (plist-member new-source k) + for old-val = (plist-get old-source k) + for new-val = (plist-get new-source k) + if (or (and (not in-old-p) in-new-p) ; added + (and (not in-new-p) in-old-p) ; removed + (not (equal old-val new-val))) ; changed + return t)) + (defun* el-get-merge-properties-into-status (package-or-source &optional package-status-alist &key noerror skip-non-updatable) @@ -291,7 +307,7 @@ non-whitelisted changes, and no error will be raised. append (list k v)))) (destructuring-bind (update disallowed) (el-get-classify-new-properties cached-recipe source) - (when disallowed + (when (el-get-non-whitelisted-properties-changed-p cached-recipe source) ;; Emit a verbose message if `noerror' is t (but still quit ;; the function). (funcall (if noerror 'el-get-verbose-message 'error) @@ -307,11 +323,9 @@ Maybe you should use `el-get-update' or `el-get-reinstall' on %s instead?" (el-get-source-name cached-recipe)) (return-from el-get-merge-properties-into-status)) (when update - (loop for (k v) on update by 'cddr - do (plist-put cached-recipe k v)) (if save-to-file - (el-get-save-package-status package "installed" cached-recipe) + (el-get-save-package-status package "installed" source) (plist-put (cdr (assq package package-status-alist)) - 'recipe cached-recipe)))))) + 'recipe source)))))) (provide 'el-get-status)