[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/hyperdrive 2d3f038790 3/3: Change: (hyperdrive-delete) Mov
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/hyperdrive 2d3f038790 3/3: Change: (hyperdrive-delete) Move into hyperdrive.el and autoload |
Date: |
Fri, 6 Oct 2023 04:01:18 -0400 (EDT) |
branch: elpa/hyperdrive
commit 2d3f038790afc86f7c0daa9d4dbaaeba6addd914
Author: Joseph Turner <joseph@ushin.org>
Commit: Joseph Turner <joseph@ushin.org>
Change: (hyperdrive-delete) Move into hyperdrive.el and autoload
---
hyperdrive-dir.el | 1 +
hyperdrive-lib.el | 40 ----------------------------------------
hyperdrive-menu.el | 1 +
hyperdrive.el | 41 +++++++++++++++++++++++++++++++++++++++++
4 files changed, 43 insertions(+), 40 deletions(-)
diff --git a/hyperdrive-dir.el b/hyperdrive-dir.el
index 018a0da7a6..ff0c3963ed 100644
--- a/hyperdrive-dir.el
+++ b/hyperdrive-dir.el
@@ -233,6 +233,7 @@ With point on header, returns directory entry."
(declare-function hyperdrive-find-file "hyperdrive")
(declare-function hyperdrive-up "hyperdrive")
+(declare-function hyperdrive-delete "hyperdrive")
(declare-function hyperdrive-download "hyperdrive")
(declare-function hyperdrive-describe-hyperdrive "hyperdrive-describe")
;; `hyperdrive-menu' is defined with `transient-define-prefix', which
diff --git a/hyperdrive-lib.el b/hyperdrive-lib.el
index f7cca8064b..09e3f1de94 100644
--- a/hyperdrive-lib.el
+++ b/hyperdrive-lib.el
@@ -877,46 +877,6 @@ HYPERDRIVE's public metadata file."
(hyperdrive-persist hyperdrive)
hyperdrive))
-(cl-defun hyperdrive-delete (entry &key (then #'ignore) (else #'ignore))
- "Delete ENTRY, then call THEN with response.
-Call ELSE with `plz-error' struct if request fails.
-Interactively, read ENTRY with `hyperdrive-read-entry'."
- (declare (indent defun))
- (interactive
- (let* ((entry (hyperdrive--context-entry))
- (description (hyperdrive-entry-description entry))
- (buffer (current-buffer)))
- (when (and (hyperdrive--entry-directory-p entry)
- (or (eq entry hyperdrive-current-entry)
- (string= ".." (alist-get 'display-name
(hyperdrive-entry-etc entry)))))
- (hyperdrive-user-error "Won't delete from within"))
- (when (and (yes-or-no-p (format "Delete «%s»? " description))
- (or (not (hyperdrive--entry-directory-p entry))
- (yes-or-no-p (format "Recursively delete «%s»? "
description))))
- (list entry
- :then (lambda (_)
- (when (and (buffer-live-p buffer)
- (eq 'hyperdrive-dir-mode (buffer-local-value
'major-mode buffer)))
- (with-current-buffer buffer
- (revert-buffer)))
- (hyperdrive-message "Deleted: «%s» (Deleted files can be
accessed from prior versions of the hyperdrive.)" description))
- :else (lambda (plz-error)
- (hyperdrive-message "Unable to delete «%s»: %S"
description plz-error))))))
- (hyperdrive-api 'delete (hyperdrive-entry-url entry)
- :as 'response
- :then (lambda (response)
- (pcase-let* (((cl-struct plz-response headers) response)
- ((map etag) headers)
- (nonexistent-entry (hyperdrive-copy-tree entry t)))
- (unless (hyperdrive--entry-directory-p entry)
- ;; FIXME: hypercore-fetch bug doesn't update version
- ;; number when deleting a directory.
- (setf (hyperdrive-entry-version nonexistent-entry)
(string-to-number etag))
- (hyperdrive--fill-latest-version (hyperdrive-entry-hyperdrive
entry) headers)
- (hyperdrive-update-nonexistent-version-range
nonexistent-entry))
- (funcall then response)))
- :else else))
-
(cl-defun hyperdrive-purge-no-prompt (hyperdrive &key then else)
"Purge all data corresponding to HYPERDRIVE, then call THEN with response.
diff --git a/hyperdrive-menu.el b/hyperdrive-menu.el
index 2b80674b7a..8a87f7ba72 100644
--- a/hyperdrive-menu.el
+++ b/hyperdrive-menu.el
@@ -38,6 +38,7 @@
;;;; Declarations
(declare-function hyperdrive-dir--entry-at-point "hyperdrive-dir")
+(declare-function hyperdrive-delete "hyperdrive")
(declare-function hyperdrive-set-nickname "hyperdrive")
(declare-function hyperdrive-set-petname "hyperdrive")
diff --git a/hyperdrive.el b/hyperdrive.el
index fed152a496..360f18d54f 100644
--- a/hyperdrive.el
+++ b/hyperdrive.el
@@ -362,6 +362,47 @@ for more information. See `hyperdrive-read-entry' and
(interactive (list (hyperdrive-read-url :prompt "Open hyperdrive URL")))
(hyperdrive-open (hyperdrive-url-entry url)))
+;;;###autoload
+(cl-defun hyperdrive-delete (entry &key (then #'ignore) (else #'ignore))
+ "Delete ENTRY, then call THEN with response.
+Call ELSE with `plz-error' struct if request fails.
+Interactively, read ENTRY with `hyperdrive-read-entry'."
+ (declare (indent defun))
+ (interactive
+ (let* ((entry (hyperdrive--context-entry))
+ (description (hyperdrive-entry-description entry))
+ (buffer (current-buffer)))
+ (when (and (hyperdrive--entry-directory-p entry)
+ (or (eq entry hyperdrive-current-entry)
+ (string= ".." (alist-get 'display-name
(hyperdrive-entry-etc entry)))))
+ (hyperdrive-user-error "Won't delete from within"))
+ (when (and (yes-or-no-p (format "Delete «%s»? " description))
+ (or (not (hyperdrive--entry-directory-p entry))
+ (yes-or-no-p (format "Recursively delete «%s»? "
description))))
+ (list entry
+ :then (lambda (_)
+ (when (and (buffer-live-p buffer)
+ (eq 'hyperdrive-dir-mode (buffer-local-value
'major-mode buffer)))
+ (with-current-buffer buffer
+ (revert-buffer)))
+ (hyperdrive-message "Deleted: «%s» (Deleted files can be
accessed from prior versions of the hyperdrive.)" description))
+ :else (lambda (plz-error)
+ (hyperdrive-message "Unable to delete «%s»: %S"
description plz-error))))))
+ (hyperdrive-api 'delete (hyperdrive-entry-url entry)
+ :as 'response
+ :then (lambda (response)
+ (pcase-let* (((cl-struct plz-response headers) response)
+ ((map etag) headers)
+ (nonexistent-entry (hyperdrive-copy-tree entry t)))
+ (unless (hyperdrive--entry-directory-p entry)
+ ;; FIXME: hypercore-fetch bug doesn't update version
+ ;; number when deleting a directory.
+ (setf (hyperdrive-entry-version nonexistent-entry)
(string-to-number etag))
+ (hyperdrive--fill-latest-version (hyperdrive-entry-hyperdrive
entry) headers)
+ (hyperdrive-update-nonexistent-version-range
nonexistent-entry))
+ (funcall then response)))
+ :else else))
+
;;;###autoload
(defun hyperdrive-download (entry filename)
"Download ENTRY to FILENAME on disk.