]> 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:

Properly format unified diff
authorŁukasz Langa <lukasz@langa.pl>
Tue, 5 Jun 2018 00:10:32 +0000 (17:10 -0700)
committerŁukasz Langa <lukasz@langa.pl>
Tue, 5 Jun 2018 01:07:03 +0000 (18:07 -0700)
Previously we weren't using timestamps.

README.md
black.py
tests/expression.diff
tests/test_black.py

index beba56cc2ebff85a2ac7268e1aee841981ef7129..911d1f98277e7470f7e3feefe3c557674ee99974 100644 (file)
--- a/README.md
+++ b/README.md
@@ -717,6 +717,8 @@ More details can be found in [CONTRIBUTING](CONTRIBUTING.md).
 
 * added `--verbose` (#283)
 
+* the header output in `--diff` now actually conforms to the unified diff spec
+
 * fixed stdin handling not working correctly if an old version of Click was
   used (#276)
 
index 7138d291f13e652df4e15039cf97a06312a05b57..2783a1084dfd8aec941d93b78e531cd3dbf55702 100644 (file)
--- a/black.py
+++ b/black.py
@@ -1,6 +1,7 @@
 import asyncio
 from asyncio.base_events import BaseEventLoop
 from concurrent.futures import Executor, ProcessPoolExecutor
+from datetime import datetime
 from enum import Enum, Flag
 from functools import partial, wraps
 import io
@@ -469,6 +470,7 @@ def format_file_in_place(
     if src.suffix == ".pyi":
         mode |= FileMode.PYI
 
+    then = datetime.utcfromtimestamp(src.stat().st_mtime)
     with open(src, "rb") as buf:
         src_contents, encoding, newline = decode_bytes(buf.read())
     try:
@@ -482,8 +484,9 @@ def format_file_in_place(
         with open(src, "w", encoding=encoding, newline=newline) as f:
             f.write(dst_contents)
     elif write_back == write_back.DIFF:
-        src_name = f"{src}  (original)"
-        dst_name = f"{src}  (formatted)"
+        now = datetime.utcnow()
+        src_name = f"{src}\t{then} +0000"
+        dst_name = f"{src}\t{now} +0000"
         diff_contents = diff(src_contents, dst_contents, src_name, dst_name)
         if lock:
             lock.acquire()
@@ -514,6 +517,7 @@ def format_stdin_to_stdout(
     `line_length`, `fast`, `is_pyi`, and `force_py36` arguments are passed to
     :func:`format_file_contents`.
     """
+    then = datetime.utcnow()
     src, encoding, newline = decode_bytes(sys.stdin.buffer.read())
     dst = src
     try:
@@ -530,8 +534,9 @@ def format_stdin_to_stdout(
         if write_back == WriteBack.YES:
             f.write(dst)
         elif write_back == WriteBack.DIFF:
-            src_name = "<stdin>  (original)"
-            dst_name = "<stdin>  (formatted)"
+            now = datetime.utcnow()
+            src_name = f"STDIN\t{then} +0000"
+            dst_name = f"STDOUT\t{now} +0000"
             f.write(diff(src, dst, src_name, dst_name))
         f.detach()
 
index 4a4bb140d9e7a3dea06c961b5866c5f785132450..263234927f5ace245728acb7104526ec99936e77 100644 (file)
@@ -1,5 +1,5 @@
---- <stdin>  (original)
-+++ <stdin>  (formatted)
+--- [Deterministic header]
++++ [Deterministic header]
 @@ -1,8 +1,8 @@
  ...
 -'some_string'
index 06455255a2cab14a31de2bfcab633cf177b68f07..f6952c721ccd0ba64f8c921e3dd10d2a75c1d6c1 100644 (file)
@@ -6,18 +6,19 @@ from functools import partial
 from io import BytesIO, TextIOWrapper
 import os
 from pathlib import Path
+import re
 import sys
 from tempfile import TemporaryDirectory
 from typing import Any, List, Tuple, Iterator
 import unittest
 from unittest.mock import patch
-import re
 
 from click import unstyle
 from click.testing import CliRunner
 
 import black
 
+
 ll = 88
 ff = partial(black.format_file_in_place, line_length=ll, fast=True)
 fs = partial(black.format_str, line_length=ll)
@@ -136,18 +137,22 @@ class BlackTestCase(unittest.TestCase):
         black.assert_stable(source, actual, line_length=ll)
 
     def test_piping_diff(self) -> None:
+        diff_header = re.compile(
+            rf"(STDIN|STDOUT)\t\d\d\d\d-\d\d-\d\d "
+            rf"\d\d:\d\d:\d\d\.\d\d\d\d\d\d \+\d\d\d\d"
+        )
         source, _ = read_data("expression.py")
         expected, _ = read_data("expression.diff")
         hold_stdin, hold_stdout = sys.stdin, sys.stdout
         try:
             sys.stdin = TextIOWrapper(BytesIO(source.encode("utf8")), encoding="utf8")
             sys.stdout = TextIOWrapper(BytesIO(), encoding="utf8")
-            sys.stdin.buffer.name = "<stdin>"  # type: ignore
             black.format_stdin_to_stdout(
                 line_length=ll, fast=True, write_back=black.WriteBack.DIFF
             )
             sys.stdout.seek(0)
             actual = sys.stdout.read()
+            actual = diff_header.sub("[Deterministic header]", actual)
         finally:
             sys.stdin, sys.stdout = hold_stdin, hold_stdout
         actual = actual.rstrip() + "\n"  # the diff output has a trailing space
@@ -204,13 +209,17 @@ class BlackTestCase(unittest.TestCase):
         source, _ = read_data("expression.py")
         expected, _ = read_data("expression.diff")
         tmp_file = Path(black.dump_to_file(source))
+        diff_header = re.compile(
+            rf"{re.escape(str(tmp_file))}\t\d\d\d\d-\d\d-\d\d "
+            rf"\d\d:\d\d:\d\d\.\d\d\d\d\d\d \+\d\d\d\d"
+        )
         hold_stdout = sys.stdout
         try:
             sys.stdout = TextIOWrapper(BytesIO(), encoding="utf8")
             self.assertTrue(ff(tmp_file, write_back=black.WriteBack.DIFF))
             sys.stdout.seek(0)
             actual = sys.stdout.read()
-            actual = actual.replace(str(tmp_file), "<stdin>")
+            actual = diff_header.sub("[Deterministic header]", actual)
         finally:
             sys.stdout = hold_stdout
             os.unlink(tmp_file)