]> granicus.if.org Git - python/commitdiff
[3.6] bpo-32885: Tools/scripts/pathfix.py: Add -n option for no backup~ (GH-5772...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Wed, 14 Mar 2018 17:52:22 +0000 (10:52 -0700)
committerChristian Heimes <christian@python.org>
Wed, 14 Mar 2018 17:52:22 +0000 (18:52 +0100)
Creating backup files with ~ suffix can be undesirable in some environment,
such as when building RPM packages. Instead of requiring the user to remove
those files manually, option -n was added, that simply disables this feature.

-n was selected because 2to3 has the same option with this behavior.
(cherry picked from commit 5affd5c29eb1493cb31ef3cfdde15538ac134689)

Co-authored-by: Miro Hrončok <miro@hroncok.cz>
Misc/ACKS
Misc/NEWS.d/next/Tools-Demos/2018-02-20-12-16-47.bpo-32885.dL5x7C.rst [new file with mode: 0644]
Tools/scripts/pathfix.py

index b2033ee9d3f388da1844f4182d8a3c7d286bf5cf..ca8eaefc5b46eb63bd04db686b562f6bc1e924c1 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -672,6 +672,7 @@ Ken Howard
 Brad Howes
 Mike Hoy
 Ben Hoyt
+Miro Hrončok
 Chiu-Hsiang Hsu
 Chih-Hao Huang
 Christian Hudon
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
new file mode 100644 (file)
index 0000000..e003e1d
--- /dev/null
@@ -0,0 +1,2 @@
+Add an ``-n`` flag for ``Tools/scripts/pathfix.py`` to disbale automatic
+backup creation (files with ``~`` suffix).
index 562bbc73781254716ab60ab3d56d2844c6f03ae4..c5bf984306a35bfa4cc9132e02224034733caac7 100755 (executable)
@@ -7,8 +7,9 @@
 # Directories are searched recursively for files whose name looks
 # like a python module.
 # Symbolic links are always ignored (except as explicit directory
-# arguments).  Of course, the original file is kept as a back-up
-# (with a "~" attached to its name).
+# arguments).
+# The original file is kept as a back-up (with a "~" attached to its name),
+# -n flag can be used to disable this.
 #
 # Undoubtedly you can do this using find and sed or perl, but this is
 # a nice example of Python code that recurses down a directory tree
@@ -31,14 +32,17 @@ rep = sys.stdout.write
 
 new_interpreter = None
 preserve_timestamps = False
+create_backup = True
+
 
 def main():
     global new_interpreter
     global preserve_timestamps
-    usage = ('usage: %s -i /interpreter -p file-or-directory ...\n' %
+    global create_backup
+    usage = ('usage: %s -i /interpreter -p -n file-or-directory ...\n' %
              sys.argv[0])
     try:
-        opts, args = getopt.getopt(sys.argv[1:], 'i:p')
+        opts, args = getopt.getopt(sys.argv[1:], 'i:pn')
     except getopt.error as msg:
         err(str(msg) + '\n')
         err(usage)
@@ -48,6 +52,8 @@ def main():
             new_interpreter = a.encode()
         if o == '-p':
             preserve_timestamps = True
+        if o == '-n':
+            create_backup = False
     if not new_interpreter or not new_interpreter.startswith(b'/') or \
            not args:
         err('-i option or file-or-directory missing\n')
@@ -134,10 +140,16 @@ def fix(filename):
     except OSError as msg:
         err('%s: warning: chmod failed (%r)\n' % (tempname, msg))
     # Then make a backup of the original file as filename~
-    try:
-        os.rename(filename, filename + '~')
-    except OSError as msg:
-        err('%s: warning: backup failed (%r)\n' % (filename, msg))
+    if create_backup:
+        try:
+            os.rename(filename, filename + '~')
+        except OSError as msg:
+            err('%s: warning: backup failed (%r)\n' % (filename, msg))
+    else:
+        try:
+            os.remove(filename)
+        except OSError as msg:
+            err('%s: warning: removing failed (%r)\n' % (filename, msg))
     # Now move the temp file to the original file
     try:
         os.rename(tempname, filename)