Skip to content

Commit

Permalink
pythongh-64595: Argument Clinic: Touch source file if any output file…
Browse files Browse the repository at this point in the history
… changed
  • Loading branch information
erlend-aasland committed May 4, 2023
1 parent 35d2738 commit 6ca580c
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions Tools/clinic/clinic.py
Original file line number Diff line number Diff line change
Expand Up @@ -1943,12 +1943,12 @@ def dump(self):
return_converters = {}


def write_file(filename, new_contents):
def write_file(filename, new_contents, force=False):
try:
with open(filename, 'r', encoding="utf-8") as fp:
old_contents = fp.read()

if old_contents == new_contents:
if old_contents == new_contents and not force:
# no change: avoid modifying the file modification time
return
except FileNotFoundError:
Expand Down Expand Up @@ -2112,6 +2112,8 @@ def parse(self, input):
traceback.format_exc().rstrip())
printer.print_block(block)

clinic_out = []

# these are destinations not buffers
for name, destination in self.destinations.items():
if destination.type == 'suppress':
Expand Down Expand Up @@ -2151,10 +2153,11 @@ def parse(self, input):
block.input = 'preserve\n'
printer_2 = BlockPrinter(self.language)
printer_2.print_block(block, core_includes=True)
write_file(destination.filename, printer_2.f.getvalue())
pair = destination.filename, printer_2.f.getvalue()
clinic_out.append(pair)
continue

return printer.f.getvalue()
return printer.f.getvalue(), clinic_out


def _module_and_class(self, fields):
Expand Down Expand Up @@ -2210,9 +2213,12 @@ def parse_file(filename, *, verify=True, output=None):
return

clinic = Clinic(language, verify=verify, filename=filename)
cooked = clinic.parse(raw)
src_out, clinic_out = clinic.parse(raw)

write_file(output, cooked)
force = bool(clinic_out)
write_file(output, src_out, force=force)
for fn, data in clinic_out:
write_file(fn, data)


def compute_checksum(input, length=None):
Expand Down

0 comments on commit 6ca580c

Please sign in to comment.