返回 DeepSeek-Reasonix
project_state_collision.go
根目录 / desktop / project_state_collision.go
1 package main
2
3 import (
4 "errors"
5 "reasonix/internal/config"
6 )
7
8 var errProjectStateCollisionAssignment = errors.New("project state collision assignment")
9
10 // assignAddedProjectStateCollisions assigns a new root only when a recorded
11 // project still uses the same legacy directory. Recorded roots and existing
12 // assignments keep their current directory.
13 func assignAddedProjectStateCollisions(previous []string, projects []desktopProject) error {
14 known := append([]string(nil), previous...)
15 userDir := config.MemoryUserDir()
16 for _, project := range projects {
17 root := normalizeProjectRoot(project.Root)
18 if root == "" {
19 continue
20 }
21 alreadyKnown := false
22 collision := false
23 for _, prior := range known {
24 if sameProjectRoot(prior, root) {
25 alreadyKnown = true
26 break
27 }
28 if config.WorkspaceSlug(prior) == config.WorkspaceSlug(root) &&
29 config.ProjectStateDir(userDir, prior) == config.ProjectStateDir(userDir, root) {
30 collision = true
31 }
32 }
33 if alreadyKnown {
34 continue
35 }
36 if collision {
37 if err := config.AssignProjectStateCollision(userDir, root); err != nil {
38 return err
39 }
40 }
41 known = append(known, root)
42 }
43 return nil
44 }
45
45 lines GO