Preserve Custom Content and Override Name/Color When Cloning Projects with .a0proj Directory

keyboardstaff committed Feb 3, 2026 at 09:08 UTC c4fafe9af5f1b12e86c18e5a80a51f9d5f57d90e
1 file changed +17 -6
python/helpers/projects.py
+17 -6
@@ -100,13 +100,24 @@ def clone_git_project(name: str, git_url: str, git_token: str, data: BasicProjec
100 try:
101 # Clone with token via http.extraHeader (token never in URL or git config)
102 git.clone_repo(git_url, abs_path, token=git_token)
103 -
104 - # Store clean URL only (in case user provided URL with auth)
103 clean_url = git.strip_auth_from_url(git_url)
106 - create_project_meta_folders(actual_name)
107 - data = _normalizeBasicData(data)
108 - data["git_url"] = clean_url
109 - save_project_header(actual_name, data)
104 +
105 + # Check if cloned repo already has .a0proj
106 + meta_path = os.path.join(abs_path, PROJECT_META_DIR, PROJECT_HEADER_FILE)
107 + if os.path.exists(meta_path):
108 + # Merge: keep cloned content, override only user-specified fields
109 + cloned_header = dirty_json.parse(files.read_file(meta_path))
110 + cloned_header["title"] = data.get("title") or cloned_header.get("title", "")
111 + cloned_header["color"] = data.get("color") or cloned_header.get("color", "")
112 + cloned_header["git_url"] = clean_url
113 + save_project_header(actual_name, cloned_header)
114 + else:
115 + # New project: create meta folders and save header
116 + create_project_meta_folders(actual_name)
117 + data = _normalizeBasicData(data)
118 + data["git_url"] = clean_url
119 + save_project_header(actual_name, data)
120 +
121 return actual_name
122 except Exception as e:
123 try: