[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/vlf 842569a 270/310: Add ability to use temporary file
From: |
Stefan Monnier |
Subject: |
[elpa] externals/vlf 842569a 270/310: Add ability to use temporary file when adjusting content on save. |
Date: |
Sat, 28 Nov 2020 00:33:29 -0500 (EST) |
branch: externals/vlf
commit 842569ae07e94ae4f68064ebeb92617847f30417
Author: Andrey Kotlarski <m00naticus@gmail.com>
Commit: Andrey Kotlarski <m00naticus@gmail.com>
Add ability to use temporary file when adjusting content on save.
---
vlf-base.el | 8 ++++---
vlf-tune.el | 15 +++++++------
vlf-write.el | 70 +++++++++++++++++++++++++++++++++++++++---------------------
3 files changed, 60 insertions(+), 33 deletions(-)
diff --git a/vlf-base.el b/vlf-base.el
index 26ee653..268dcaa 100644
--- a/vlf-base.el
+++ b/vlf-base.el
@@ -54,11 +54,13 @@
"Get size in bytes of FILE."
(or (nth 7 (file-attributes file)) 0))
-(defun vlf-verify-size (&optional update-visited-time)
+(defun vlf-verify-size (&optional update-visited-time file)
"Update file size information if necessary and visited file time.
-If non-nil, UPDATE-VISITED-TIME."
+If non-nil, UPDATE-VISITED-TIME.
+FILE if given is filename to be used, otherwise `buffer-file-truename'."
(unless (verify-visited-file-modtime (current-buffer))
- (setq vlf-file-size (vlf-get-file-size buffer-file-truename))
+ (setq vlf-file-size (vlf-get-file-size (or file
+ buffer-file-truename)))
(if update-visited-time
(set-visited-file-modtime))))
diff --git a/vlf-tune.el b/vlf-tune.el
index f82a286..82d7f43 100644
--- a/vlf-tune.el
+++ b/vlf-tune.el
@@ -150,10 +150,11 @@ VEC is a vector of (mean time . count) elements ordered
by size."
(- end start) (car result))
(cdr result)))
-(defun vlf-tune-insert-file-contents-literally (start end)
- "Insert raw file bytes START to END and save time it takes."
+(defun vlf-tune-insert-file-contents-literally (start end &optional file)
+ "Insert raw file bytes START to END and save time it takes.
+FILE if given is filename to be used, otherwise `buffer-file-name'."
(let ((result (vlf-time (insert-file-contents-literally
- buffer-file-name nil start end))))
+ (or file buffer-file-name) nil start end))))
(vlf-tune-add-measurement vlf-tune-insert-raw-bps
(- end start) (car result))
(cdr result)))
@@ -167,11 +168,13 @@ VEC is a vector of (mean time . count) elements ordered
by size."
(cdr result) (car result))
(cdr result)))
-(defun vlf-tune-write (start end append visit size)
+(defun vlf-tune-write (start end append visit size &optional file)
"Save buffer and save time it takes.
START, END, APPEND, VISIT have same meaning as in `write-region'.
-SIZE is number of bytes that are saved."
- (let ((time (car (vlf-time (write-region start end buffer-file-name
+SIZE is number of bytes that are saved.
+FILE if given is filename to be used, otherwise `buffer-file-name'."
+ (let ((time (car (vlf-time (write-region start end
+ (or file buffer-file-name)
append visit)))))
(vlf-tune-add-measurement vlf-tune-write-bps size time)))
diff --git a/vlf-write.el b/vlf-write.el
index a29e1a9..709b7c6 100644
--- a/vlf-write.el
+++ b/vlf-write.el
@@ -65,10 +65,26 @@ If changing size of chunk, shift remaining file content."
(font-lock font-lock-mode))
(font-lock-mode 0)
(let ((batch-size vlf-batch-size)
- (time (float-time)))
- (if (< 0 size-change)
- (vlf-file-shift-back size-change region-length)
- (vlf-file-shift-forward (- size-change) region-length))
+ time)
+ (if (or (file-remote-p buffer-file-name)
+ (y-or-n-p "File content needs be adjusted till\
+ end. Use temporary copy of the whole file (slower but safer)? "))
+ (let ((file-tmp (make-temp-file
+ (file-name-nondirectory
+ buffer-file-name))))
+ (setq time (float-time))
+ (copy-file buffer-file-name file-tmp t t t t)
+ (if (< 0 size-change)
+ (vlf-file-shift-back size-change region-length
+ file-tmp)
+ (vlf-file-shift-forward (- size-change)
+ region-length file-tmp))
+ (rename-file file-tmp buffer-file-name t))
+ (setq time (float-time))
+ (if (< 0 size-change)
+ (vlf-file-shift-back size-change region-length)
+ (vlf-file-shift-forward (- size-change)
+ region-length)))
(if font-lock (font-lock-mode 1))
(setq vlf-batch-size batch-size)
(vlf-move-to-chunk-2 vlf-start-pos
@@ -83,10 +99,11 @@ If changing size of chunk, shift remaining file content."
(run-hook-with-args 'vlf-after-batch-functions 'write))
t)
-(defun vlf-file-shift-back (size-change write-size)
+(defun vlf-file-shift-back (size-change write-size &optional file)
"Shift file contents SIZE-CHANGE bytes back.
-WRITE-SIZE is byte length of saved chunk."
- (vlf-tune-write nil nil vlf-start-pos t write-size)
+WRITE-SIZE is byte length of saved chunk.
+FILE if given is filename to be used, otherwise `buffer-file-name'."
+ (vlf-tune-write nil nil vlf-start-pos (if file nil t) write-size file)
(let ((read-start-pos vlf-end-pos)
(coding-system-for-write 'no-conversion)
(reporter (make-progress-reporter "Adjusting file content..."
@@ -94,31 +111,34 @@ WRITE-SIZE is byte length of saved chunk."
vlf-file-size)))
(vlf-with-undo-disabled
(while (vlf-shift-batch read-start-pos (- read-start-pos
- size-change))
+ size-change)
+ file)
(setq read-start-pos (+ read-start-pos vlf-batch-size))
(progress-reporter-update reporter read-start-pos))
;; pad end with space
(erase-buffer)
- (vlf-verify-size t)
+ (vlf-verify-size t file)
(insert-char 32 size-change))
(vlf-tune-write nil nil (- vlf-file-size size-change)
- t size-change)
+ (if file nil t) size-change file)
(progress-reporter-done reporter)))
-(defun vlf-shift-batch (read-pos write-pos)
+(defun vlf-shift-batch (read-pos write-pos file)
"Read `vlf-batch-size' bytes from READ-POS and write them \
-back at WRITE-POS. Return nil if EOF is reached, t otherwise."
+back at WRITE-POS using FILE.
+Return nil if EOF is reached, t otherwise."
(erase-buffer)
- (vlf-verify-size t)
- (vlf-tune-batch '(:raw :write))
- (let ((read-end (min (+ read-pos vlf-batch-size) vlf-file-size)))
- (vlf-tune-insert-file-contents-literally read-pos read-end)
- (vlf-tune-write nil nil write-pos 0 (- read-end read-pos))
+ (vlf-verify-size t file)
+ (vlf-tune-batch '(:raw :write)) ;insert speed over temp write file may defer
wildly
+ (let ((read-end (min (+ read-pos vlf-batch-size) vlf-file-size))) ;compared
to the original file
+ (vlf-tune-insert-file-contents-literally read-pos read-end file)
+ (vlf-tune-write nil nil write-pos 0 (- read-end read-pos) file)
(< read-end vlf-file-size)))
-(defun vlf-file-shift-forward (size-change write-size)
+(defun vlf-file-shift-forward (size-change write-size &optional file)
"Shift file contents SIZE-CHANGE bytes forward.
WRITE-SIZE is byte length of saved chunk.
+FILE if given is filename to be used, otherwise `buffer-file-name'.
Done by saving content up front and then writing previous batch."
(vlf-tune-batch '(:raw :write))
(let ((read-size (max vlf-batch-size size-change))
@@ -129,7 +149,7 @@ Done by saving content up front and then writing previous
batch."
vlf-file-size)))
(vlf-with-undo-disabled
(when (vlf-shift-batches read-size read-pos write-pos
- write-size t)
+ write-size t file)
(vlf-tune-batch '(:raw :write))
(setq write-pos (+ read-pos size-change)
read-pos (+ read-pos read-size)
@@ -138,7 +158,7 @@ Done by saving content up front and then writing previous
batch."
(progress-reporter-update reporter write-pos)
(let ((coding-system-for-write 'no-conversion))
(while (vlf-shift-batches read-size read-pos write-pos
- write-size nil)
+ write-size nil file)
(vlf-tune-batch '(:raw :write))
(setq write-pos (+ read-pos size-change)
read-pos (+ read-pos read-size)
@@ -148,25 +168,27 @@ Done by saving content up front and then writing previous
batch."
(progress-reporter-done reporter)))
(defun vlf-shift-batches (read-size read-pos write-pos write-size
- hide-read)
+ hide-read file)
"Append READ-SIZE bytes of file starting at READ-POS.
Then write initial buffer content to file at WRITE-POS.
WRITE-SIZE is byte length of saved chunk.
If HIDE-READ is non nil, temporarily hide literal read content.
+FILE if given is filename to be used, otherwise `buffer-file-name'.
Return nil if EOF is reached, t otherwise."
- (vlf-verify-size t)
+ (vlf-verify-size t file)
(let ((read-more (< read-pos vlf-file-size))
(start-write-pos (point-min))
(end-write-pos (point-max)))
(when read-more
(goto-char end-write-pos)
(vlf-tune-insert-file-contents-literally
- read-pos (min vlf-file-size (+ read-pos read-size))))
+ read-pos (min vlf-file-size (+ read-pos read-size)) file))
;; write
(if hide-read ; hide literal region if user has to choose encoding
(narrow-to-region start-write-pos end-write-pos))
(vlf-tune-write start-write-pos end-write-pos write-pos
- (or (not read-more) 0) write-size)
+ (or (and (not read-more) (not file)) 0)
+ write-size file)
(delete-region start-write-pos end-write-pos)
(if hide-read (widen))
read-more))
- [elpa] externals/vlf 9b6657b 260/310: Replace usage of conservative tune in single batch operations with load, (continued)
- [elpa] externals/vlf 9b6657b 260/310: Replace usage of conservative tune in single batch operations with load, Stefan Monnier, 2020/11/28
- [elpa] externals/vlf 2c660b0 269/310: Fix positive goto-line search and make highlighting of match optional., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf 3cfa9b1 273/310: Refactor vlf-query-replace and don't adjust batch size if only, Stefan Monnier, 2020/11/28
- [elpa] externals/vlf 61599a0 274/310: Change linear tune to search only known measures and use it to, Stefan Monnier, 2020/11/28
- [elpa] externals/vlf a9c14e2 268/310: Add regexp query replace over whole file command., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf 673ae08 277/310: Lower tramp verbosity level., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf ac8d400 276/310: Fixes to hexl-mode activation., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf f63ea96 272/310: Document new query replace and save options., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf e4a2e80 266/310: Optimize goto-line for hexl-mode, no need to search., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf 7b9befe 275/310: - don't load unnecessary data at the end of search or occur, Stefan Monnier, 2020/11/28
- [elpa] externals/vlf 842569a 270/310: Add ability to use temporary file when adjusting content on save.,
Stefan Monnier <=
- [elpa] externals/vlf d579b7b 279/310: Workaround local maximum in batch tune., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf b14c912 290/310: Copy around buffer specific profile vectors when forking new buffers., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf b300137 292/310: Encode smaller region to detect cut point overall offset in vlf-occur, Stefan Monnier, 2020/11/28
- [elpa] externals/vlf 86be483 293/310: Improve search precision., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf a8ba836 298/310: Fix issue where tramp-verbose is bound to nil., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf 25e16ef 303/310: Fix broken link in README, Stefan Monnier, 2020/11/28
- [elpa] externals/vlf b62bc04 301/310: Issue 31 Make vlf-batch-size configurable in the remote case, Stefan Monnier, 2020/11/28
- [elpa] externals/vlf 55e0c40 300/310: Explicitly set coding-system-for-read to the current coding when not, Stefan Monnier, 2020/11/28
- [elpa] externals/vlf 4eaf763 297/310: Rename vlf-integrate.el to vlf-setup.el, Stefan Monnier, 2020/11/28
- [elpa] externals/vlf efffeb5 310/310: Bump vlf version after previous fix, Stefan Monnier, 2020/11/28