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: