proton: When copying ignore EPERM error
This commit is contained in:
parent
6dfd6e12f6
commit
817828ec72
1 changed files with 19 additions and 8 deletions
27
proton
27
proton
|
@ -8,6 +8,7 @@ import filecmp
|
|||
import json
|
||||
import os
|
||||
import shutil
|
||||
import errno
|
||||
import struct
|
||||
import subprocess
|
||||
import sys
|
||||
|
@ -81,7 +82,7 @@ def upgrade_pfx(old_ver):
|
|||
log("Removing newer prefix")
|
||||
if old_proton_ver == "3.7" and not os.path.exists(os.environ["STEAM_COMPAT_DATA_PATH"] + "/tracked_files"):
|
||||
#proton 3.7 did not generate tracked_files, so copy it into place first
|
||||
shutil.copy(basedir + "/proton_3.7_tracked_files", os.environ["STEAM_COMPAT_DATA_PATH"] + "/tracked_files")
|
||||
try_copy(basedir + "/proton_3.7_tracked_files", os.environ["STEAM_COMPAT_DATA_PATH"] + "/tracked_files")
|
||||
remove_tracked_files(os.environ["STEAM_COMPAT_DATA_PATH"])
|
||||
return
|
||||
|
||||
|
@ -107,11 +108,21 @@ def makedirs(path):
|
|||
#already exists
|
||||
pass
|
||||
|
||||
def try_copy(src, dst):
|
||||
try:
|
||||
shutil.copy(src, dst)
|
||||
except PermissionError as e:
|
||||
if e.errno == errno.EPERM:
|
||||
#be forgiving about permissions errors; if it's a real problem, things will explode later anyway
|
||||
log('Error while copying to \"' + dst + '\": ' + e.strerror)
|
||||
else:
|
||||
raise
|
||||
|
||||
def real_copy(src, dst):
|
||||
if os.path.islink(src):
|
||||
os.symlink(os.readlink(src), dst)
|
||||
else:
|
||||
shutil.copy(src,dst)
|
||||
try_copy(src, dst)
|
||||
|
||||
def mergedirs(src, dst, tracked_files):
|
||||
for src_dir, dirs, files in os.walk(src):
|
||||
|
@ -156,7 +167,7 @@ with dist_lock:
|
|||
tar = tarfile.open(basedir + "/proton_dist.tar.gz", mode="r:gz")
|
||||
tar.extractall(path=basedir + "/dist")
|
||||
tar.close()
|
||||
shutil.copy(basedir + "/version", basedir + "/dist/")
|
||||
try_copy(basedir + "/version", basedir + "/dist/")
|
||||
|
||||
env = dict(os.environ)
|
||||
dlloverrides = {}
|
||||
|
@ -324,16 +335,16 @@ with prefix_lock:
|
|||
dstfile = dst + "Steam/" + f
|
||||
if os.path.isfile(dstfile):
|
||||
os.remove(dstfile)
|
||||
shutil.copy(steamdir + "/legacycompat/" + f, dstfile)
|
||||
try_copy(steamdir + "/legacycompat/" + f, dstfile)
|
||||
|
||||
#copy openvr files into place
|
||||
dst = prefix + "/drive_c/vrclient/bin/"
|
||||
makedirs(dst)
|
||||
shutil.copy(basedir + "/dist/lib/wine/fakedlls/vrclient.dll", dst)
|
||||
shutil.copy(basedir + "/dist/lib64/wine/fakedlls/vrclient_x64.dll", dst)
|
||||
try_copy(basedir + "/dist/lib/wine/fakedlls/vrclient.dll", dst)
|
||||
try_copy(basedir + "/dist/lib64/wine/fakedlls/vrclient_x64.dll", dst)
|
||||
|
||||
shutil.copy(basedir + "/dist/lib/wine/dxvk/openvr_api_dxvk.dll", prefix + "/drive_c/windows/syswow64/")
|
||||
shutil.copy(basedir + "/dist/lib64/wine/dxvk/openvr_api_dxvk.dll", prefix + "/drive_c/windows/system32/")
|
||||
try_copy(basedir + "/dist/lib/wine/dxvk/openvr_api_dxvk.dll", prefix + "/drive_c/windows/syswow64/")
|
||||
try_copy(basedir + "/dist/lib64/wine/dxvk/openvr_api_dxvk.dll", prefix + "/drive_c/windows/system32/")
|
||||
|
||||
#parse linux openvr config and present it in win32 format to the app.
|
||||
#logic from openvr's CVRPathRegistry_Public::GetPaths
|
||||
|
|
Loading…
Reference in a new issue