copy metadata wrapper

This commit is contained in:
joshuaboud 2021-12-16 12:08:02 -04:00
parent 8f36de4dd9
commit 344c2d1468
No known key found for this signature in database
GPG Key ID: 17EFB59E2A8BF50E
1 changed files with 19 additions and 2 deletions

View File

@ -28,6 +28,22 @@ import sys
from optparse import OptionParser
import json
def copy_metadata_wrapper(copy_func):
def wrapper(src, dst, *args, **kwargs):
stat = None
try:
stat = os.stat(src, follow_symlinks=False)
except:
pass
copy_func(src, dst, *args, **kwargs)
try:
if stat:
os.chown(dst, stat.st_uid, stat.st_gid)
os.chmod(dst, stat.st_mode)
except:
pass
return wrapper
class File:
def __init__(self, path, cwd, dest_path):
self.src = path
@ -47,14 +63,15 @@ class File:
os.remove(self.dst)
if not os.path.exists(os.path.dirname(self.dst)):
os.makedirs(os.path.dirname(self.dst))
shutil.move(self.src, self.dst, copy_function=partial(shutil.copy2, follow_symlinks=False))
shutil.move(self.src, self.dst, copy_function=partial(copy_metadata_wrapper(shutil.copy2), follow_symlinks=False))
def copy(self):
if self.check_if_exists(): # for overwriting
os.remove(self.dst)
if not os.path.exists(os.path.dirname(self.dst)):
os.makedirs(os.path.dirname(self.dst))
shutil.copy2(self.src, self.dst, follow_symlinks=False)
copy_metadata_wrapper(shutil.copy2)(self.src, self.dst, follow_symlinks=False)
def prompt_user(message, wants_response, conflicts = None, choices = None, detail = None):
payload = {