浏览代码

auto prune WIP

Victor Vieux 12 年之前
父节点
当前提交
7e92302c4f
共有 1 个文件被更改,包括 17 次插入5 次删除
  1. 17 5
      server.go

+ 17 - 5
server.go

@@ -749,11 +749,23 @@ func (srv *Server) ImageDelete(name string) error {
 		}
 		return nil
 	}
-	if err := srv.runtime.graph.Delete(img.Id); err != nil {
-		return fmt.Errorf("Error deleting image %s: %s", name, err.Error())
-	}
-	if err := srv.runtime.repositories.Delete(name, tag, img.Id); err != nil {
-		return err
+	parents, _ := img.History()
+	for _, parent := range parents {
+		byParent, _ = srv.runtime.graph.ByParent()
+		//stop if image has children
+		if _, exists := byParent[parent.Id]; exists {
+			break
+		}
+		//stop if image is tagged and it is not the first image we delete
+		if _, hasTags := srv.runtime.repositories.ById()[parent.Id]; hasTags && img.Id != parent.Id {
+			break
+		}
+		if err := srv.runtime.graph.Delete(parent.Id); err != nil {
+			return fmt.Errorf("Error deleting image %s: %s", name, err.Error())
+		}
+		if err := srv.runtime.repositories.Delete(name, tag, img.Id); err != nil {
+			return err
+		}
 	}
 	return nil
 }