diff options
Diffstat (limited to 'pearl.el')
| -rw-r--r-- | pearl.el | 32 |
1 files changed, 16 insertions, 16 deletions
@@ -3820,22 +3820,22 @@ isn't in `pearl-saved-queries'." (let ((entry (assoc name pearl-saved-queries))) (unless entry (user-error "No saved query named %s" name)) - (let* ((spec (cdr entry)) - (filter (plist-get spec :filter)) - (sort (plist-get spec :sort)) - (order (plist-get spec :order)) - (existing-url (plist-get spec :linear-view-url)) - (effective-url (or view-url existing-url)) - (synced-at (format-time-string "%Y-%m-%dT%H:%M:%SZ" nil t)) - (new-spec (append (list :filter filter) - (when sort (list :sort sort)) - (when order (list :order order)) - (list :linear-view-id view-id - :linear-view-team-id team-id - :linear-view-shared shared - :linear-view-synced-at synced-at) - (when effective-url - (list :linear-view-url effective-url))))) + ;; Copy the existing spec and plist-put each sync key on top. Earlier + ;; versions rebuilt the spec from `:filter', `:sort', `:order' + the four + ;; sync keys, which silently dropped any other key on the entry -- a + ;; future `:description', a user-added annotation, or any new schema + ;; field would vanish on every re-sync. Copy-then-put preserves + ;; everything the user (or future pearl code) attached. + (let* ((synced-at (format-time-string "%Y-%m-%dT%H:%M:%SZ" nil t)) + (new-spec (copy-sequence (cdr entry)))) + (setq new-spec (plist-put new-spec :linear-view-id view-id)) + (setq new-spec (plist-put new-spec :linear-view-team-id team-id)) + (setq new-spec (plist-put new-spec :linear-view-shared shared)) + (setq new-spec (plist-put new-spec :linear-view-synced-at synced-at)) + ;; Only touch :linear-view-url when this call supplied one; a re-sync + ;; whose API response somehow lacks the URL must not erase the prior. + (when view-url + (setq new-spec (plist-put new-spec :linear-view-url view-url))) (setq pearl-saved-queries (cons (cons name new-spec) (assoc-delete-all name (copy-sequence pearl-saved-queries)))) |
