mirror of https://github.com/docker/docs.git
prevent default name to be deleted and return an error on invalid link
This commit is contained in:
parent
356af1540f
commit
516cf54843
|
@ -250,7 +250,7 @@ func (db *Database) Delete(name string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := db.conn.Exec("DELETE FROM edge WHERE parent_id = ? AND name LIKE ?;", parent.id, n+"%"); err != nil {
|
if _, err := db.conn.Exec("DELETE FROM edge WHERE parent_id = ? AND name = ?;", parent.id, n); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -306,7 +306,7 @@ func (db *Database) Rename(currentName, newName string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
rows, err := db.conn.Exec("UPDATE edge SET name = ? WHERE parent_id = ? AND name LIKE ?;", newEdgeName, parent.id, name+"%")
|
rows, err := db.conn.Exec("UPDATE edge SET name = ? WHERE parent_id = ? AND name = ?;", newEdgeName, parent.id, name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -383,7 +383,7 @@ func (db *Database) children(name string, depth int) <-chan WalkMeta {
|
||||||
// Return the entity based on the parent path and name
|
// Return the entity based on the parent path and name
|
||||||
func (db *Database) child(parent *Entity, name string) *Entity {
|
func (db *Database) child(parent *Entity, name string) *Entity {
|
||||||
var id string
|
var id string
|
||||||
if err := db.conn.QueryRow("SELECT entity_id FROM edge WHERE parent_id = ? AND name LIKE ?;", parent.id, name+"%").Scan(&id); err != nil {
|
if err := db.conn.QueryRow("SELECT entity_id FROM edge WHERE parent_id = ? AND name = ?;", parent.id, name).Scan(&id); err != nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return &Entity{id}
|
return &Entity{id}
|
||||||
|
|
35
server.go
35
server.go
|
@ -979,34 +979,39 @@ func (srv *Server) ContainerRestart(name string, t int) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (srv *Server) ContainerDestroy(name string, removeVolume, removeLink bool) error {
|
func (srv *Server) ContainerDestroy(name string, removeVolume, removeLink bool) error {
|
||||||
|
container := srv.runtime.Get(name)
|
||||||
|
|
||||||
if removeLink {
|
if removeLink {
|
||||||
p := name
|
if container == nil {
|
||||||
if p[0] != '/' {
|
return fmt.Errorf("No such link: %s", name)
|
||||||
p = "/" + p
|
|
||||||
}
|
|
||||||
parent, n := path.Split(p)
|
|
||||||
l := len(parent)
|
|
||||||
if parent[l-1] == '/' {
|
|
||||||
parent = parent[:l-1]
|
|
||||||
}
|
}
|
||||||
|
name = srv.runtime.getFullName(name)
|
||||||
|
|
||||||
|
parent, n := path.Split(name)
|
||||||
|
|
||||||
pe := srv.runtime.containerGraph.Get(parent)
|
pe := srv.runtime.containerGraph.Get(parent)
|
||||||
parentContainer := srv.runtime.Get(pe.ID())
|
if pe != nil {
|
||||||
|
parentContainer := srv.runtime.Get(pe.ID())
|
||||||
|
|
||||||
if parentContainer != nil && parentContainer.activeLinks != nil {
|
if parentContainer != nil && parentContainer.activeLinks != nil {
|
||||||
if link, exists := parentContainer.activeLinks[n]; exists {
|
if link, exists := parentContainer.activeLinks[n]; exists {
|
||||||
link.Disable()
|
link.Disable()
|
||||||
} else {
|
} else {
|
||||||
utils.Debugf("Could not find active link for %s", name)
|
utils.Debugf("Could not find active link for %s", name)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if name[1:] == container.ID {
|
||||||
|
return fmt.Errorf("Conflict, cannot remove default link %s", name)
|
||||||
|
}
|
||||||
|
|
||||||
if err := srv.runtime.containerGraph.Delete(name); err != nil {
|
if err := srv.runtime.containerGraph.Delete(name); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if container := srv.runtime.Get(name); container != nil {
|
if container != nil {
|
||||||
if container.State.Running {
|
if container.State.Running {
|
||||||
return fmt.Errorf("Impossible to remove a running container, please stop it first")
|
return fmt.Errorf("Impossible to remove a running container, please stop it first")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue