MCPcopy Create free account
hub / github.com/driangle/taskmd / RunSync

Method RunSync

apps/cli/internal/sync/engine.go:54–113  ·  view source on GitHub ↗

RunSync syncs tasks for a single source configuration.

(srcCfg SourceConfig)

Source from the content-addressed store, hash-verified

52
53// RunSync syncs tasks for a single source configuration.
54func (e *Engine) RunSync(srcCfg SourceConfig) (*SyncResult, error) {
55 src, err := GetSource(srcCfg.Name)
56 if err != nil {
57 return nil, err
58 }
59
60 if err := src.ValidateConfig(srcCfg); err != nil {
61 return nil, fmt.Errorf("invalid config for source %q: %w", srcCfg.Name, err)
62 }
63
64 externalTasks, err := src.FetchTasks(srcCfg)
65 if err != nil {
66 return nil, fmt.Errorf("failed to fetch tasks from %q: %w", srcCfg.Name, err)
67 }
68
69 state, err := LoadState(e.ConfigDir, srcCfg.Name)
70 if err != nil {
71 return nil, fmt.Errorf("failed to load state: %w", err)
72 }
73
74 existingIDs, err := e.scanExistingIDs(srcCfg.OutputDir)
75 if err != nil {
76 return nil, fmt.Errorf("failed to scan existing tasks: %w", err)
77 }
78
79 result := &SyncResult{}
80 now := time.Now()
81
82 for _, ext := range externalTasks {
83 action, syncErr := e.syncTask(ext, srcCfg, state, existingIDs, now)
84 if syncErr != nil {
85 result.Errors = append(result.Errors, SyncError{
86 ExternalID: ext.ExternalID,
87 Title: ext.Title,
88 Err: syncErr,
89 })
90 continue
91 }
92 switch action.Reason {
93 case "created":
94 result.Created = append(result.Created, action)
95 existingIDs = append(existingIDs, action.LocalID)
96 case "updated":
97 result.Updated = append(result.Updated, action)
98 case "conflict":
99 result.Conflicts = append(result.Conflicts, action)
100 default:
101 result.Skipped = append(result.Skipped, action)
102 }
103 }
104
105 if !e.DryRun {
106 state.LastSync = now
107 if err := SaveState(e.ConfigDir, srcCfg.Name, state); err != nil {
108 return result, fmt.Errorf("failed to save state: %w", err)
109 }
110 }
111

Calls 7

scanExistingIDsMethod · 0.95
syncTaskMethod · 0.95
GetSourceFunction · 0.85
LoadStateFunction · 0.85
SaveStateFunction · 0.85
ValidateConfigMethod · 0.65
FetchTasksMethod · 0.65