feat(cli): sync folders with remote paths
Build and Push Docker Container / build-and-push (push) Successful in 1m36s
Build and Push Docker Container / build-and-push (push) Successful in 1m36s
- Store synced folder locations in file_path instead of embedding them in file names. - Add ignore rules from .nanoshareignore and repeatable sync --ignore flags. - Adopt existing remote files only after SHA-256 verification. - Move adopted remotes with metadata updates instead of uploading duplicates. - Bump NanoShare to 1.23.0 and the standalone CLI to 0.2.0.
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import PurePosixPath
|
||||
|
||||
def split_remote_path(value: str, file_id: str = '') -> tuple[str, str]:
|
||||
raw = (value or file_id).replace('\\', '/')
|
||||
parts = [
|
||||
part for part in PurePosixPath(raw).parts
|
||||
if part not in ('', '.', '..', '/')
|
||||
]
|
||||
if not parts:
|
||||
return file_id, ''
|
||||
return parts[-1], '/'.join(parts[:-1])
|
||||
|
||||
def join_remote_path(file_name: str, file_path: str | None = None, file_id: str = '') -> str:
|
||||
name, embedded_path = split_remote_path(file_name, file_id)
|
||||
clean_path = split_remote_path(f'{file_path or ""}/placeholder')[1] if file_path else embedded_path
|
||||
return f'{clean_path}/{name}' if clean_path else name
|
||||
Reference in New Issue
Block a user