mirror of https://github.com/zulip/zulip.git
zerver/lib/export.py: Avoid shelling out for cp, rm, ln.
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
This commit is contained in:
parent
a694c3cafd
commit
1d15d72775
|
@ -13,6 +13,8 @@ import os
|
||||||
import ujson
|
import ujson
|
||||||
import subprocess
|
import subprocess
|
||||||
import tempfile
|
import tempfile
|
||||||
|
import shutil
|
||||||
|
from scripts.lib.zulip_tools import overwrite_symlink
|
||||||
from zerver.lib.avatar_hash import user_avatar_path_from_ids
|
from zerver.lib.avatar_hash import user_avatar_path_from_ids
|
||||||
from zerver.models import UserProfile, Realm, Client, Huddle, Stream, \
|
from zerver.models import UserProfile, Realm, Client, Huddle, Stream, \
|
||||||
UserMessage, Subscription, Message, RealmEmoji, RealmFilter, Reaction, \
|
UserMessage, Subscription, Message, RealmEmoji, RealmFilter, Reaction, \
|
||||||
|
@ -1159,7 +1161,7 @@ def export_uploads_from_local(realm: Realm, local_dir: Path, output_dir: Path) -
|
||||||
local_path = os.path.join(local_dir, attachment.path_id)
|
local_path = os.path.join(local_dir, attachment.path_id)
|
||||||
output_path = os.path.join(output_dir, attachment.path_id)
|
output_path = os.path.join(output_dir, attachment.path_id)
|
||||||
os.makedirs(os.path.dirname(output_path), exist_ok=True)
|
os.makedirs(os.path.dirname(output_path), exist_ok=True)
|
||||||
subprocess.check_call(["cp", "-a", local_path, output_path])
|
shutil.copy2(local_path, output_path)
|
||||||
stat = os.stat(local_path)
|
stat = os.stat(local_path)
|
||||||
record = dict(realm_id=attachment.realm_id,
|
record = dict(realm_id=attachment.realm_id,
|
||||||
user_profile_id=attachment.owner.id,
|
user_profile_id=attachment.owner.id,
|
||||||
|
@ -1202,7 +1204,7 @@ def export_avatars_from_local(realm: Realm, local_dir: Path, output_dir: Path) -
|
||||||
fn = os.path.relpath(local_path, local_dir)
|
fn = os.path.relpath(local_path, local_dir)
|
||||||
output_path = os.path.join(output_dir, fn)
|
output_path = os.path.join(output_dir, fn)
|
||||||
os.makedirs(str(os.path.dirname(output_path)), exist_ok=True)
|
os.makedirs(str(os.path.dirname(output_path)), exist_ok=True)
|
||||||
subprocess.check_call(["cp", "-a", str(local_path), str(output_path)])
|
shutil.copy2(str(local_path), str(output_path))
|
||||||
stat = os.stat(local_path)
|
stat = os.stat(local_path)
|
||||||
record = dict(realm_id=realm.id,
|
record = dict(realm_id=realm.id,
|
||||||
user_profile_id=user.id,
|
user_profile_id=user.id,
|
||||||
|
@ -1234,7 +1236,7 @@ def export_emoji_from_local(realm: Realm, local_dir: Path, output_dir: Path) ->
|
||||||
local_path = os.path.join(local_dir, emoji_path)
|
local_path = os.path.join(local_dir, emoji_path)
|
||||||
output_path = os.path.join(output_dir, emoji_path)
|
output_path = os.path.join(output_dir, emoji_path)
|
||||||
os.makedirs(os.path.dirname(output_path), exist_ok=True)
|
os.makedirs(os.path.dirname(output_path), exist_ok=True)
|
||||||
subprocess.check_call(["cp", "-a", local_path, output_path])
|
shutil.copy2(local_path, output_path)
|
||||||
record = dict(realm_id=realm.id,
|
record = dict(realm_id=realm.id,
|
||||||
author=realm_emoji.author.id,
|
author=realm_emoji.author.id,
|
||||||
path=emoji_path,
|
path=emoji_path,
|
||||||
|
@ -1350,10 +1352,13 @@ def create_soft_link(source: Path, in_progress: bool=True) -> None:
|
||||||
if in_progress:
|
if in_progress:
|
||||||
new_target = in_progress_link
|
new_target = in_progress_link
|
||||||
else:
|
else:
|
||||||
subprocess.check_call(['rm', '-f', in_progress_link])
|
try:
|
||||||
|
os.remove(in_progress_link)
|
||||||
|
except FileNotFoundError:
|
||||||
|
pass
|
||||||
new_target = done_link
|
new_target = done_link
|
||||||
|
|
||||||
subprocess.check_call(["ln", "-nsf", source, new_target])
|
overwrite_symlink(source, new_target)
|
||||||
if is_done:
|
if is_done:
|
||||||
logging.info('See %s for output files' % (new_target,))
|
logging.info('See %s for output files' % (new_target,))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue