{"record":{"id":"c6ea9a595a5d2424","repo":"siyuan-note/siyuan","slug":"formatrepoerrormsg-err","errorCode":null,"errorMessage":"formatRepoErrorMsg(err)","messagePattern":"formatRepoErrorMsg\\(err\\)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"kernel/model/sync.go","lineNumber":676,"sourceCode":"\t\tbreak\n\tdefault:\n\t\terr = errors.New(Conf.Language(131))\n\t\treturn\n\t}\n\n\tname = util.RemoveInvalid(name)\n\tif !cloud.IsValidCloudDirName(name) {\n\t\treturn errors.New(Conf.Language(37))\n\t}\n\n\trepo, err := newRepository()\n\tif err != nil {\n\t\treturn\n\t}\n\n\terr = repo.CreateCloudRepo(name)\n\tif err != nil {\n\t\terr = errors.New(formatRepoErrorMsg(err))\n\t\treturn\n\t}\n\treturn\n}\n\nfunc RemoveCloudSyncDir(name string) (err error) {\n\tswitch Conf.Sync.Provider {\n\tcase conf.ProviderSiYuan, conf.ProviderLocal:\n\t\tbreak\n\tdefault:\n\t\terr = errors.New(Conf.Language(131))\n\t\treturn\n\t}\n\n\tmsgId := util.PushMsg(Conf.Language(116), 15000)\n\n\trepo, err := newRepository()\n\tif err != nil {","sourceCodeStart":658,"sourceCodeEnd":694,"githubUrl":"https://github.com/siyuan-note/siyuan/blob/251596fc0de2f9528c00c224252fd073a99973f4/kernel/model/sync.go#L658-L694","documentation":"If repo.CreateCloudRepo(name) returns an error, CreateCloudSyncDir wraps it via formatRepoErrorMsg and returns that. formatRepoErrorMsg maps well-known cloud/dejavu errors to localized messages (auth failed, object not found, cloud locked, repo fatal, time incorrect, deprecated version, check failed, service unavailable) and HTML-escapes the rest.","triggerScenarios":"POST /api/sync/createCloudSyncDir reaches the network and the underlying provider rejects it: SiYuan cloud auth token expired, bucket already exists, name collision, cloud service unavailable, rate limited, or dejavu lock contention.","commonSituations":"SiYuan account not logged in / subscription expired. Trying to create a directory name that already exists on the cloud. Cloud under maintenance. Clock skew between client and server.","solutions":["Re-login to SiYuan cloud (or fix S3/WebDAV credentials) and retry.","Pick a unique directory name; list existing dirs first via /api/sync/listCloudSyncDir.","If Stat/msg indicates 'cloud locked' or 'service unavailable', wait and retry.","Correct system clock if the error mentions incorrect time."],"exampleFix":"// runtime/network error; no code change\n// before: createCloudSyncDir('work') -> auth failed (mapped to Conf.Language(31))\n// after: re-login, then retry createCloudSyncDir('work')","handlingStrategy":"try-catch","validationCode":"// Cannot pre-validate server-side rejection, but can preflight existence:\n// GET /api/sync/listCloudSyncDir and ensure name is not already present.","typeGuard":null,"tryCatchPattern":"// Go caller\nif err := model.CreateCloudSyncDir(name); err != nil {\n    logging.LogErrorf(\"create cloud sync dir failed: %s\", err)\n    return err // message is already localized via formatRepoErrorMsg\n}","preventionTips":["List existing directories before creating to avoid name collisions.","Ensure fresh cloud credentials before the create call.","Read formatRepoErrorMsg output carefully; it carries the mapped root cause."],"tags":["sync","cloud","network","kernel","runtime","auth"],"backgroundTag":null,"analyzedSha":"251596fc0de2f9528c00c224252fd073a99973f4","analyzedAt":"2026-08-12T21:18:37.123Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}