64 lines
2.5 KiB
Python
64 lines
2.5 KiB
Python
|
|
import os
|
|
import sys
|
|
import json
|
|
from pathlib import Path
|
|
|
|
# Add project root to path
|
|
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
|
|
|
from app.core.utils.cloud_sync import GiteaSync
|
|
from app.config.settings import ConfigManager
|
|
|
|
def sync_all():
|
|
config = ConfigManager()
|
|
sync = GiteaSync.from_config(config)
|
|
if not sync:
|
|
print("Error: Gitea configuration missing in config.ini")
|
|
sys.exit(1)
|
|
|
|
# Sync files defined in dialog_utils.py (re-implementing the logic here)
|
|
SYNC_FILES = [
|
|
{"name": "条码映射", "remote": "barcode_mappings.json", "local": "config/barcode_mappings.json", "type": "json"},
|
|
{"name": "供应商配置", "remote": "suppliers_config.json", "local": "config/suppliers_config.json", "type": "json"},
|
|
{"name": "商品资料", "remote": "templates/商品资料.xlsx", "local": "templates/商品资料.xlsx", "type": "binary"},
|
|
{"name": "采购单模板", "remote": "templates/银豹-采购单模板.xls", "local": "templates/银豹-采购单模板.xls", "type": "binary"},
|
|
{"name": "商品记忆库 (DB)", "remote": "product_cache.db", "local": "data/product_cache.db", "type": "binary"},
|
|
]
|
|
|
|
print(f"Starting sync to {sync.base_url}/{sync.owner}/{sync.repo}...")
|
|
|
|
success_count = 0
|
|
for entry in SYNC_FILES:
|
|
local_path = entry["local"]
|
|
remote_path = entry["remote"]
|
|
name = entry["name"]
|
|
|
|
if not os.path.exists(local_path):
|
|
print(f"Skipping {name}: Local file not found at {local_path}")
|
|
continue
|
|
|
|
print(f"Pushing {name} ({local_path}) -> {remote_path}...")
|
|
try:
|
|
if entry["type"] == "json":
|
|
with open(local_path, "r", encoding="utf-8") as f:
|
|
data = json.load(f)
|
|
# Get current SHA to update
|
|
sha = sync.file_exists(remote_path)
|
|
result = sync.push_json(remote_path, data, f"Sync: {name}", sha=sha)
|
|
else:
|
|
result = sync.push_binary(remote_path, local_path, f"Sync: {name}")
|
|
|
|
if result:
|
|
print(f"Successfully synced {name}")
|
|
success_count += 1
|
|
else:
|
|
print(f"Failed to sync {name}")
|
|
except Exception as e:
|
|
print(f"Error syncing {name}: {e}")
|
|
|
|
print(f"\nSync finished. {success_count}/{len(SYNC_FILES)} files synced.")
|
|
|
|
if __name__ == "__main__":
|
|
sync_all()
|