mirror of
https://github.com/dimitri/el-get.git
synced 2024-09-29 04:58:53 +08:00
Fix #835: el-get-update treat prop removal now
Use the new source or abort if non-whitelisted properties are changed. fixes #835
This commit is contained in:
parent
d5b6d874bd
commit
aa0aae272b
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue
Block a user