summary refs log tree commit diff
path: root/guix/utils.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2021-06-21 13:56:59 +0200
committerLudovic Courtès <ludo@gnu.org>2021-07-11 00:49:15 +0200
commitf05433f2083d467bdf0aafe18dd57bf35f0a7343 (patch)
tree14f6c11a54981a0f062a1ad67779058463950512 /guix/utils.scm
parentef1432f064abeb9f902c6917c540e143492a5de4 (diff)
downloadguix-f05433f2083d467bdf0aafe18dd57bf35f0a7343.tar.gz
utils: 'edit-expression' modifies the file only if necessary.
* guix/utils.scm (edit-expression): Check whether STR* equals STR.
Diffstat (limited to 'guix/utils.scm')
-rw-r--r--guix/utils.scm24
1 files changed, 13 insertions, 11 deletions
diff --git a/guix/utils.scm b/guix/utils.scm
index f8f6672bb1..e6d0761679 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -423,17 +423,19 @@ This procedure returns #t on success."
                            (port-encoding in)))
                  (post-bv (get-bytevector-all in))
                  (str*    (proc str)))
-            ;; Verify the edited expression is still a scheme expression.
-            (call-with-input-string str* read)
-            ;; Update the file with edited expression.
-            (with-atomic-file-output file
-              (lambda (out)
-                (put-bytevector out pre-bv)
-                (display str* out)
-                ;; post-bv maybe the end-of-file object.
-                (when (not (eof-object? post-bv))
-                  (put-bytevector out post-bv))
-                #t))))))))
+            ;; Modify FILE only if there are changes.
+            (unless (string=? str* str)
+              ;; Verify the edited expression is still a scheme expression.
+              (call-with-input-string str* read)
+              ;; Update the file with edited expression.
+              (with-atomic-file-output file
+                (lambda (out)
+                  (put-bytevector out pre-bv)
+                  (display str* out)
+                  ;; post-bv maybe the end-of-file object.
+                  (when (not (eof-object? post-bv))
+                    (put-bytevector out post-bv))
+                  #t)))))))))
 
 
 ;;;