瀏覽代碼

replace == by HasPrefix for names and improve error message

Victor Vieux 11 年之前
父節點
當前提交
c4923757f1
共有 3 個文件被更改,包括 7 次插入4 次删除
  1. 3 0
      api.go
  2. 3 3
      gograph/gograph.go
  3. 1 1
      runtime.go

+ 3 - 0
api.go

@@ -1088,6 +1088,9 @@ func postContainerLink(srv *Server, version float64, w http.ResponseWriter, r *h
 	}
 
 	if err := srv.runtime.RenameLink(currentName, newName); err != nil {
+		if strings.HasSuffix(err.Error(), "name are not unique") {
+			return fmt.Errorf("Conflict, %s already exists", newName)
+		}
 		return err
 	}
 

+ 3 - 3
gograph/gograph.go

@@ -288,7 +288,7 @@ func (db *Database) Delete(name string) error {
 		return err
 	}
 
-	if _, err := conn.Exec("DELETE FROM edge WHERE parent_id = ? AND name = ?;", parent.id, n); err != nil {
+	if _, err := conn.Exec("DELETE FROM edge WHERE parent_id = ? AND name LIKE ?;", parent.id, n+"%"); err != nil {
 		return err
 	}
 	return nil
@@ -356,7 +356,7 @@ func (db *Database) Rename(currentName, newName string) error {
 		return err
 	}
 
-	rows, err := conn.Exec("UPDATE edge SET name = ? WHERE parent_id = ? AND name = ?;", newEdgeName, parent.id, name)
+	rows, err := conn.Exec("UPDATE edge SET name = ? WHERE parent_id = ? AND name LIKE ?;", newEdgeName, parent.id, name+"%")
 	if err != nil {
 		return err
 	}
@@ -433,7 +433,7 @@ func (db *Database) children(conn *sql.DB, name string, depth int) <-chan WalkMe
 // Return the entity based on the parent path and name
 func (db *Database) child(conn *sql.DB, parent *Entity, name string) *Entity {
 	var id string
-	if err := conn.QueryRow("SELECT entity_id FROM edge WHERE parent_id = ? AND name = ?;", parent.id, name).Scan(&id); err != nil {
+	if err := conn.QueryRow("SELECT entity_id FROM edge WHERE parent_id = ? AND name LIKE ?;", parent.id, name+"%").Scan(&id); err != nil {
 		return nil
 	}
 	return &Entity{id}

+ 1 - 1
runtime.go

@@ -518,7 +518,7 @@ func (runtime *Runtime) RenameLink(oldName, newName string) error {
 
 	// This is not rename but adding a new link for the default name
 	// Strip the leading '/'
-	if entity.ID() == oldName[1:] {
+	if strings.HasPrefix(entity.ID(), oldName[1:]) {
 		_, err := runtime.containerGraph.Set(newName, entity.ID())
 		return err
 	}