mirror of
https://github.com/ValveSoftware/Proton.git
synced 2024-12-26 14:45:48 +03:00
proton: When copying ignore EPERM error
This commit is contained in:
parent
6dfd6e12f6
commit
817828ec72
27
proton
27
proton
@ -8,6 +8,7 @@ import filecmp
|
|||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
|
import errno
|
||||||
import struct
|
import struct
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
@ -81,7 +82,7 @@ def upgrade_pfx(old_ver):
|
|||||||
log("Removing newer prefix")
|
log("Removing newer prefix")
|
||||||
if old_proton_ver == "3.7" and not os.path.exists(os.environ["STEAM_COMPAT_DATA_PATH"] + "/tracked_files"):
|
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
|
#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"])
|
remove_tracked_files(os.environ["STEAM_COMPAT_DATA_PATH"])
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -107,11 +108,21 @@ def makedirs(path):
|
|||||||
#already exists
|
#already exists
|
||||||
pass
|
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):
|
def real_copy(src, dst):
|
||||||
if os.path.islink(src):
|
if os.path.islink(src):
|
||||||
os.symlink(os.readlink(src), dst)
|
os.symlink(os.readlink(src), dst)
|
||||||
else:
|
else:
|
||||||
shutil.copy(src,dst)
|
try_copy(src, dst)
|
||||||
|
|
||||||
def mergedirs(src, dst, tracked_files):
|
def mergedirs(src, dst, tracked_files):
|
||||||
for src_dir, dirs, files in os.walk(src):
|
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 = tarfile.open(basedir + "/proton_dist.tar.gz", mode="r:gz")
|
||||||
tar.extractall(path=basedir + "/dist")
|
tar.extractall(path=basedir + "/dist")
|
||||||
tar.close()
|
tar.close()
|
||||||
shutil.copy(basedir + "/version", basedir + "/dist/")
|
try_copy(basedir + "/version", basedir + "/dist/")
|
||||||
|
|
||||||
env = dict(os.environ)
|
env = dict(os.environ)
|
||||||
dlloverrides = {}
|
dlloverrides = {}
|
||||||
@ -324,16 +335,16 @@ with prefix_lock:
|
|||||||
dstfile = dst + "Steam/" + f
|
dstfile = dst + "Steam/" + f
|
||||||
if os.path.isfile(dstfile):
|
if os.path.isfile(dstfile):
|
||||||
os.remove(dstfile)
|
os.remove(dstfile)
|
||||||
shutil.copy(steamdir + "/legacycompat/" + f, dstfile)
|
try_copy(steamdir + "/legacycompat/" + f, dstfile)
|
||||||
|
|
||||||
#copy openvr files into place
|
#copy openvr files into place
|
||||||
dst = prefix + "/drive_c/vrclient/bin/"
|
dst = prefix + "/drive_c/vrclient/bin/"
|
||||||
makedirs(dst)
|
makedirs(dst)
|
||||||
shutil.copy(basedir + "/dist/lib/wine/fakedlls/vrclient.dll", dst)
|
try_copy(basedir + "/dist/lib/wine/fakedlls/vrclient.dll", dst)
|
||||||
shutil.copy(basedir + "/dist/lib64/wine/fakedlls/vrclient_x64.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/")
|
try_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/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.
|
#parse linux openvr config and present it in win32 format to the app.
|
||||||
#logic from openvr's CVRPathRegistry_Public::GetPaths
|
#logic from openvr's CVRPathRegistry_Public::GetPaths
|
||||||
|
Loading…
Reference in New Issue
Block a user