diff options
Diffstat (limited to 'main.go')
-rw-r--r-- | main.go | 15 |
1 files changed, 8 insertions, 7 deletions
@@ -434,10 +434,8 @@ func (i *importer) Import(path string) error { return err } - // A concurrent transaction could be aborted, yet still result in - // creating directoryManager's cache entry, therefore this scope. - // TODO: Educate self about isolation levels and reconsider. - // Perhaps get rid of the cache. + // We can't multiplex transactions on a single connection, + // and the directoryManager isn't thread-safe. i.dmMutex.Lock() defer i.dmMutex.Unlock() @@ -452,6 +450,8 @@ func (i *importer) Import(path string) error { return err } + // XXX: The directoryManager's cache is questionable here, + // if only because it keeps entries even when transactions fail. dbDirname, dbBasename := filepath.Split(path) dbParent, err := i.dm.IDForDirectoryPath(tx, dbDirname) if err != nil { @@ -459,9 +459,10 @@ func (i *importer) Import(path string) error { } // FIXME: This disallows any entries directly in the root. - // TODO: Turn this into an upsert statement. _, err = tx.Exec(`INSERT INTO entry(parent, name, mtime, sha1) - VALUES (?, ?, ?, ?)`, dbParent, dbBasename, s.ModTime().Unix(), hexSHA1) + VALUES (?, ?, ?, ?) ON CONFLICT DO UPDATE SET mtime = ?, sha1 = ?`, + dbParent, dbBasename, s.ModTime().Unix(), hexSHA1, + s.ModTime().Unix(), hexSHA1) if err != nil { return err } @@ -532,7 +533,7 @@ func cmdSync(args []string) error { return err } - // TODO + // TODO: Should this run in a transaction? return nil } |