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

Function RunImport

apps/cli/internal/sync/import_engine.go:41–73  ·  view source on GitHub ↗

RunImport fetches tasks from an external source and writes them as local task files. Unlike RunSync, it performs no state tracking — it is a one-shot operation that detects duplicates via external_id in existing task files.

(cfg ImportConfig)

Source from the content-addressed store, hash-verified

39// task files. Unlike RunSync, it performs no state tracking — it is a one-shot
40// operation that detects duplicates via external_id in existing task files.
41func RunImport(cfg ImportConfig) (*ImportResult, error) {
42 externalTasks, err := fetchImportTasks(cfg)
43 if err != nil {
44 return nil, err
45 }
46
47 existingIDs, externalIDs, err := scanExistingTasks(cfg.ScanDir, cfg.Verbose)
48 if err != nil {
49 return nil, fmt.Errorf("failed to scan existing tasks: %w", err)
50 }
51
52 fieldMap := resolveImportFieldMap(cfg.SourceName, cfg.SourceCfg.FieldMap)
53 result := &ImportResult{}
54
55 for _, ext := range externalTasks {
56 action, ids := importTask(ext, cfg, fieldMap, existingIDs, externalIDs)
57 existingIDs = ids
58
59 switch action.Reason {
60 case "skipped_duplicate":
61 result.Skipped = append(result.Skipped, action.ImportAction)
62 case "error":
63 result.Errors = append(result.Errors, SyncError{
64 ExternalID: ext.ExternalID, Title: ext.Title, Err: action.err,
65 })
66 default:
67 result.Created = append(result.Created, action.ImportAction)
68 externalIDs[ext.ExternalID] = true
69 }
70 }
71
72 return result, nil
73}
74
75func fetchImportTasks(cfg ImportConfig) ([]ExternalTask, error) {
76 src, err := GetSource(cfg.SourceName)

Calls 4

fetchImportTasksFunction · 0.85
scanExistingTasksFunction · 0.85
resolveImportFieldMapFunction · 0.85
importTaskFunction · 0.85