func handleSync(d *Server, ctx context.Context, cmd *wire.Command) (*wire.Response, error) { syncCmd := cmd.GetSyncCommand() who, err := id.Cast(syncCmd.Who) if err != nil { return nil, fmt.Errorf("Bad id `%s`: %v", syncCmd.Who, err) } if !d.MetaHost.IsInOnlineMode() { return nil, fmt.Errorf("Metadata Host is not online.") } client, err := d.MetaHost.DialID(who) if err != nil { return nil, err } // This might create a new, empty store if it does not exist yet: remoteStore, err := d.Repo.Store(who) if err != nil { return nil, err } if err := client.Fetch(remoteStore); err != nil { return nil, err } if err := d.Repo.OwnStore.SyncWith(remoteStore); err != nil { return nil, err } return nil, nil }