--- /nix/store/swnksqfa53bv4c5n376zpw8zmzs47f4b-backports3/gentree.py	1970-01-01 01:00:01.000000000 +0100
+++ ./gentree.py	2020-09-18 21:55:30.100918501 +0100
@@ -2,6 +2,6 @@
 #
 # Generate the output tree into a specified directory.
 #
-
 import argparse, sys, os, errno, shutil, re, subprocess
+import stat
 import tarfile, gzip, time
@@ -127,6 +127,10 @@
         if e.errno != errno.ENOENT:
             raise
 
+def makeWritable(filename):
+    os.chmod(filename,
+             os.stat(filename).st_mode | 0700)
+
 
 def copytree(src, dst, symlinks=False, ignore=None):
     """
@@ -141,6 +145,7 @@
 
     if not os.path.isdir(dst):
         os.makedirs(dst)
+        makeWritable(dst)
     errors = []
     for name in names:
         if name in ignored_names:
@@ -154,7 +161,8 @@
             elif os.path.isdir(srcname):
                 copytree(srcname, dstname, symlinks, ignore)
             else:
-                shutil.copy2(srcname, dstname)
+                shutil.copy(srcname, dstname)
+                makeWritable(dstname)
         except (IOError, os.error) as why:
             errors.append((srcname, dstname, str(why)))
         # catch the Error from the recursive copytree so that we can
@@ -163,6 +172,7 @@
             errors.extend(err.args[0])
     try:
         shutil.copystat(src, dst)
+        makeWritable(dst)
     except WindowsError:
         # can't copy file access times on Windows
         pass
@@ -187,6 +197,7 @@
     for srcitem, tgtitem in copy_list:
         if tgtitem == '':
             copytree(srcpath, outdir, ignore=shutil.ignore_patterns('*~'))
+            makeWritable(outdir)
         elif tgtitem[-1] == '/':
             def copy_ignore(dir, entries):
                 r = []
@@ -199,14 +210,17 @@
                      ignore=copy_ignore)
         else:
             try:
-                os.makedirs(os.path.join(outdir, os.path.dirname(tgtitem)))
+                n = os.path.join(outdir, os.path.dirname(tgtitem))
+                os.makedirs(n, 0755)
+                makeWritable(n)
             except OSError as e:
                 # ignore dirs we might have created just now
                 if e.errno != errno.EEXIST:
                     raise
-            shutil.copy(os.path.join(srcpath, srcitem),
-                        os.path.join(outdir, tgtitem))
-
+            outpath = os.path.join(outdir, tgtitem)
+            if os.path.exists(outpath): os.remove(outpath)
+            shutil.copy(os.path.join(srcpath, srcitem), outpath)
+            makeWritable(outpath)
 
 def copy_git_files(srcpath, copy_list, rev, outdir):
     """
@@ -886,7 +904,10 @@
     git_debug_snapshot(args, 'Add driver sources')
 
     disable_list = add_automatic_backports(args)
-    if git_tracked_version:
+    if os.environ['BACKPORTS_VERSION']:
+        backports_version = os.environ['BACKPORTS_VERSION']
+        kernel_version = os.environ['KERNEL_VERSION']
+    elif git_tracked_version:
         backports_version = "(see git)"
         kernel_version = "(see git)"
     else:
@@ -1037,6 +1030,7 @@ def process(kerneldir, copy_list_file, git_revision=None,
                 break
         if copy_defconfig:
             shutil.copy(dfsrc, os.path.join(bpid.target_dir, 'defconfigs', dfbase))
+            makeWritable(os.path.join(bpid.target_dir, 'defconfigs', dfbase))
 
     git_debug_snapshot(args, "add (useful) defconfig files")