]> git.madduck.net Git - etc/vim.git/commitdiff

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

write cache in --check mode (#453)
authorJelle Zijlstra <jelle.zijlstra@gmail.com>
Fri, 17 Aug 2018 14:40:37 +0000 (07:40 -0700)
committerŁukasz Langa <lukasz@langa.pl>
Fri, 17 Aug 2018 14:40:37 +0000 (15:40 +0100)
Fixes #448.

This diff makes us always write to the cache in normal mode, except
if the file is already in the cache, and it makes us write to the
cache in --check mode if the file is already well formatted.

I also fixed some related docstrings.

WriteBack.NO is now used only in tests.

black.py

index 7edf2aea059bf2b9c2a84f056e160e7c14b96a82..b66ad0d00b9e7c1574011c5146c8f6e380488973 100644 (file)
--- a/black.py
+++ b/black.py
@@ -94,11 +94,12 @@ class WriteBack(Enum):
     NO = 0
     YES = 1
     DIFF = 2
     NO = 0
     YES = 1
     DIFF = 2
+    CHECK = 3
 
     @classmethod
     def from_configuration(cls, *, check: bool, diff: bool) -> "WriteBack":
         if check and not diff:
 
     @classmethod
     def from_configuration(cls, *, check: bool, diff: bool) -> "WriteBack":
         if check and not diff:
-            return cls.NO
+            return cls.CHECK
 
         return cls.DIFF if diff else cls.YES
 
 
         return cls.DIFF if diff else cls.YES
 
@@ -398,7 +399,14 @@ def reformat_one(
                 mode=mode,
             ):
                 changed = Changed.YES
                 mode=mode,
             ):
                 changed = Changed.YES
-            if write_back == WriteBack.YES and changed is not Changed.NO:
+            if write_back is WriteBack.YES:
+                should_write = changed is not Changed.CACHED
+            elif write_back is WriteBack.CHECK:
+                should_write = changed is Changed.NO
+            else:
+                should_write = False
+
+            if should_write:
                 write_cache(cache, [src], line_length, mode)
         report.done(src, changed)
     except Exception as exc:
                 write_cache(cache, [src], line_length, mode)
         report.done(src, changed)
     except Exception as exc:
@@ -466,11 +474,17 @@ async def schedule_formatting(
                 elif task.exception():
                     report.failed(src, str(task.exception()))
                 else:
                 elif task.exception():
                     report.failed(src, str(task.exception()))
                 else:
-                    formatted.append(src)
-                    report.done(src, Changed.YES if task.result() else Changed.NO)
+                    changed = Changed.YES if task.result() else Changed.NO
+                    # In normal mode, write all files to the cache.
+                    if write_back is WriteBack.YES:
+                        formatted.append(src)
+                    # In check mode, write only unchanged files to the cache.
+                    elif write_back is WriteBack.CHECK and changed is Changed.NO:
+                        formatted.append(src)
+                    report.done(src, changed)
     if cancelled:
         await asyncio.gather(*cancelled, loop=loop, return_exceptions=True)
     if cancelled:
         await asyncio.gather(*cancelled, loop=loop, return_exceptions=True)
-    if write_back == WriteBack.YES and formatted:
+    if write_back in (WriteBack.YES, WriteBack.CHECK) and formatted:
         write_cache(cache, formatted, line_length, mode)
 
 
         write_cache(cache, formatted, line_length, mode)
 
 
@@ -484,7 +498,8 @@ def format_file_in_place(
 ) -> bool:
     """Format file under `src` path. Return True if changed.
 
 ) -> bool:
     """Format file under `src` path. Return True if changed.
 
-    If `write_back` is True, write reformatted code back to stdout.
+    If `write_back` is DIFF, write a diff to stdout. If it is YES, write reformatted
+    code to the file.
     `line_length` and `fast` options are passed to :func:`format_file_contents`.
     """
     if src.suffix == ".pyi":
     `line_length` and `fast` options are passed to :func:`format_file_contents`.
     """
     if src.suffix == ".pyi":
@@ -533,7 +548,8 @@ def format_stdin_to_stdout(
 ) -> bool:
     """Format file on stdin. Return True if changed.
 
 ) -> bool:
     """Format file on stdin. Return True if changed.
 
-    If `write_back` is True, write reformatted code back to stdout.
+    If `write_back` is YES, write reformatted code back to stdout. If it is DIFF,
+    write a diff to stdout.
     `line_length`, `fast`, `is_pyi`, and `force_py36` arguments are passed to
     :func:`format_file_contents`.
     """
     `line_length`, `fast`, `is_pyi`, and `force_py36` arguments are passed to
     :func:`format_file_contents`.
     """