Procházet zdrojové kódy

Merge pull request #3840 from ThomasWaldmann/env-cleanup-uname-master

sysinfo() related forward ports (master)
TW před 7 roky
rodič
revize
ea7c543471
2 změnil soubory, kde provedl 29 přidání a 4 odebrání
  1. 4 0
      docs/usage_general.rst.inc
  2. 25 4
      src/borg/helpers/misc.py

+ 4 - 0
docs/usage_general.rst.inc

@@ -197,6 +197,10 @@ General:
         When set to a numeric value, this determines the maximum "time to live" for the files cache
         entries (default: 20). The files cache is used to quickly determine whether a file is unchanged.
         The FAQ explains this more detailed in: :ref:`always_chunking`
+    BORG_SHOW_SYSINFO
+        When set to no (default: yes), system information (like OS, Python version, ...) in
+        exceptions is not shown.
+        Please only use for good reasons as it makes issues harder to analyze.
     TMPDIR
         where temporary files are stored (might need a lot of temporary space for some operations)
 

+ 25 - 4
src/borg/helpers/misc.py

@@ -61,11 +61,32 @@ def prune_split(archives, rule, n, kept_because=None):
 
 
 def sysinfo():
-    info = []
-    info.append('Platform: %s' % (' '.join(platform.uname()), ))
+    show_sysinfo = os.environ.get('BORG_SHOW_SYSINFO', 'yes').lower()
+    if show_sysinfo == 'no':
+        return ''
+
+    python_implementation = platform.python_implementation()
+    python_version = platform.python_version()
+    # platform.uname() does a shell call internally to get processor info,
+    # creating #3732 issue, so rather use os.uname().
+    try:
+        uname = os.uname()
+    except AttributeError:
+        uname = None
     if sys.platform.startswith('linux'):
-        info.append('Linux: %s %s %s' % platform.linux_distribution())
-    info.append('Borg: %s  Python: %s %s' % (borg_version, platform.python_implementation(), platform.python_version()))
+        try:
+            linux_distribution = platform.linux_distribution()
+        except:
+            # platform.linux_distribution() is deprecated since py 3.5 and removed in 3.7.
+            linux_distribution = ('Unknown Linux', '', '')
+    else:
+        linux_distribution = None
+    info = []
+    if uname is not None:
+        info.append('Platform: %s' % (' '.join(uname), ))
+    if linux_distribution is not None:
+        info.append('Linux: %s %s %s' % linux_distribution)
+    info.append('Borg: %s  Python: %s %s' % (borg_version, python_implementation, python_version))
     info.append('PID: %d  CWD: %s' % (os.getpid(), os.getcwd()))
     info.append('sys.argv: %r' % sys.argv)
     info.append('SSH_ORIGINAL_COMMAND: %r' % os.environ.get('SSH_ORIGINAL_COMMAND'))