b0edf85
From 5affd5c29eb1493cb31ef3cfdde15538ac134689 Mon Sep 17 00:00:00 2001
b0edf85
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
b0edf85
Date: Tue, 13 Mar 2018 10:56:43 +0100
b0edf85
Subject: [PATCH] bpo-32885: Tools/scripts/pathfix.py: Add -n option for no
b0edf85
 backup~ (#5772)
b0edf85
b0edf85
Creating backup files with ~ suffix can be undesirable in some environment,
b0edf85
such as when building RPM packages. Instead of requiring the user to remove
b0edf85
those files manually, option -n was added, that simply disables this feature.
b0edf85
b0edf85
-n was selected because 2to3 has the same option with this behavior.
b0edf85
---
b0edf85
 Misc/ACKS                                          |  1 +
b0edf85
 .../2018-02-20-12-16-47.bpo-32885.dL5x7C.rst       |  2 ++
b0edf85
 Tools/scripts/pathfix.py                           | 28 +++++++++++++++-------
b0edf85
 3 files changed, 23 insertions(+), 8 deletions(-)
b0edf85
 create mode 100644 Misc/NEWS.d/next/Tools-Demos/2018-02-20-12-16-47.bpo-32885.dL5x7C.rst
b0edf85
b0edf85
diff --git a/Misc/ACKS b/Misc/ACKS
b0edf85
index d8179c8b03ab..d752d8a35434 100644
b0edf85
--- a/Misc/ACKS
b0edf85
+++ b/Misc/ACKS
b0edf85
@@ -687,6 +687,7 @@ Ken Howard
b0edf85
 Brad Howes
b0edf85
 Mike Hoy
b0edf85
 Ben Hoyt
b0edf85
+Miro HronĨok
b0edf85
 Chiu-Hsiang Hsu
b0edf85
 Chih-Hao Huang
b0edf85
 Christian Hudon
b0edf85
diff --git a/Misc/NEWS.d/next/Tools-Demos/2018-02-20-12-16-47.bpo-32885.dL5x7C.rst b/Misc/NEWS.d/next/Tools-Demos/2018-02-20-12-16-47.bpo-32885.dL5x7C.rst
b0edf85
new file mode 100644
b0edf85
index 000000000000..e003e1d84fd0
b0edf85
--- /dev/null
b0edf85
+++ b/Misc/NEWS.d/next/Tools-Demos/2018-02-20-12-16-47.bpo-32885.dL5x7C.rst
b0edf85
@@ -0,0 +1,2 @@
b0edf85
+Add an ``-n`` flag for ``Tools/scripts/pathfix.py`` to disbale automatic
b0edf85
+backup creation (files with ``~`` suffix).
b0edf85
diff --git a/Tools/scripts/pathfix.py b/Tools/scripts/pathfix.py
b0edf85
index 562bbc737812..c5bf984306a3 100755
b0edf85
--- a/Tools/scripts/pathfix.py
b0edf85
+++ b/Tools/scripts/pathfix.py
b0edf85
@@ -7,8 +7,9 @@
b0edf85
 # Directories are searched recursively for files whose name looks
b0edf85
 # like a python module.
b0edf85
 # Symbolic links are always ignored (except as explicit directory
b0edf85
-# arguments).  Of course, the original file is kept as a back-up
b0edf85
-# (with a "~" attached to its name).
b0edf85
+# arguments).
b0edf85
+# The original file is kept as a back-up (with a "~" attached to its name),
b0edf85
+# -n flag can be used to disable this.
b0edf85
 #
b0edf85
 # Undoubtedly you can do this using find and sed or perl, but this is
b0edf85
 # a nice example of Python code that recurses down a directory tree
b0edf85
@@ -31,14 +32,17 @@
b0edf85
 
b0edf85
 new_interpreter = None
b0edf85
 preserve_timestamps = False
b0edf85
+create_backup = True
b0edf85
+
b0edf85
 
b0edf85
 def main():
b0edf85
     global new_interpreter
b0edf85
     global preserve_timestamps
b0edf85
-    usage = ('usage: %s -i /interpreter -p file-or-directory ...\n' %
b0edf85
+    global create_backup
b0edf85
+    usage = ('usage: %s -i /interpreter -p -n file-or-directory ...\n' %
b0edf85
              sys.argv[0])
b0edf85
     try:
b0edf85
-        opts, args = getopt.getopt(sys.argv[1:], 'i:p')
b0edf85
+        opts, args = getopt.getopt(sys.argv[1:], 'i:pn')
b0edf85
     except getopt.error as msg:
b0edf85
         err(str(msg) + '\n')
b0edf85
         err(usage)
b0edf85
@@ -48,6 +52,8 @@ def main():
b0edf85
             new_interpreter = a.encode()
b0edf85
         if o == '-p':
b0edf85
             preserve_timestamps = True
b0edf85
+        if o == '-n':
b0edf85
+            create_backup = False
b0edf85
     if not new_interpreter or not new_interpreter.startswith(b'/') or \
b0edf85
            not args:
b0edf85
         err('-i option or file-or-directory missing\n')
b0edf85
@@ -134,10 +140,16 @@ def fix(filename):
b0edf85
     except OSError as msg:
b0edf85
         err('%s: warning: chmod failed (%r)\n' % (tempname, msg))
b0edf85
     # Then make a backup of the original file as filename~
b0edf85
-    try:
b0edf85
-        os.rename(filename, filename + '~')
b0edf85
-    except OSError as msg:
b0edf85
-        err('%s: warning: backup failed (%r)\n' % (filename, msg))
b0edf85
+    if create_backup:
b0edf85
+        try:
b0edf85
+            os.rename(filename, filename + '~')
b0edf85
+        except OSError as msg:
b0edf85
+            err('%s: warning: backup failed (%r)\n' % (filename, msg))
b0edf85
+    else:
b0edf85
+        try:
b0edf85
+            os.remove(filename)
b0edf85
+        except OSError as msg:
b0edf85
+            err('%s: warning: removing failed (%r)\n' % (filename, msg))
b0edf85
     # Now move the temp file to the original file
b0edf85
     try:
b0edf85
         os.rename(tempname, filename)