Browse code

Introduce daemon event 'tag' upon image tagging

Signed-off-by: Ahmet Alp Balkan <ahmetalpbalkan@gmail.com>

Ahmet Alp Balkan authored on 2015/05/15 09:01:06
Showing 2 changed files
... ...
@@ -35,6 +35,7 @@ import (
35 35
 	"github.com/docker/docker/pkg/streamformatter"
36 36
 	"github.com/docker/docker/pkg/version"
37 37
 	"github.com/docker/docker/runconfig"
38
+	"github.com/docker/docker/utils"
38 39
 )
39 40
 
40 41
 type ServerConfig struct {
... ...
@@ -701,9 +702,11 @@ func (s *Server) postImagesTag(version version.Version, w http.ResponseWriter, r
701 701
 	repo := r.Form.Get("repo")
702 702
 	tag := r.Form.Get("tag")
703 703
 	force := boolValue(r, "force")
704
-	if err := s.daemon.Repositories().Tag(repo, tag, vars["name"], force); err != nil {
704
+	name := vars["name"]
705
+	if err := s.daemon.Repositories().Tag(repo, tag, name, force); err != nil {
705 706
 		return err
706 707
 	}
708
+	s.daemon.EventsService.Log("tag", utils.ImageReference(repo, tag), "")
707 709
 	w.WriteHeader(http.StatusCreated)
708 710
 	return nil
709 711
 }
... ...
@@ -38,8 +38,8 @@ func (s *DockerSuite) TestEventsTimestampFormats(c *check.C) {
38 38
 			c.Fatalf("docker events cmd failed: %v\nout=%s", err, out)
39 39
 		}
40 40
 		events := strings.Split(strings.TrimSpace(out), "\n")
41
-		if len(events) != 1 {
42
-			c.Fatalf("unexpected events, was expecting only 1 (since=%s, until=%s) out=%s", since, until, out)
41
+		if len(events) != 2 {
42
+			c.Fatalf("unexpected events, was expecting only 2 events tag/untag (since=%s, until=%s) out=%s", since, until, out)
43 43
 		}
44 44
 		if !strings.Contains(out, "untag") {
45 45
 			c.Fatalf("expected 'untag' event not found (since=%s, until=%s) out=%s", since, until, out)
... ...
@@ -230,6 +230,31 @@ func (s *DockerSuite) TestEventsImageUntagDelete(c *check.C) {
230 230
 	}
231 231
 }
232 232
 
233
+func (s *DockerSuite) TestEventsImageTag(c *check.C) {
234
+	time.Sleep(time.Second * 2) // because API has seconds granularity
235
+	since := daemonTime(c).Unix()
236
+	image := "testimageevents:tag"
237
+	dockerCmd(c, "tag", "busybox", image)
238
+
239
+	eventsCmd := exec.Command(dockerBinary, "events",
240
+		fmt.Sprintf("--since=%d", since),
241
+		fmt.Sprintf("--until=%d", daemonTime(c).Unix()))
242
+	out, _, err := runCommandWithOutput(eventsCmd)
243
+	c.Assert(err, check.IsNil)
244
+
245
+	events := strings.Split(strings.TrimSpace(out), "\n")
246
+	if len(events) != 1 {
247
+		c.Fatalf("was expecting 1 event. out=%s", out)
248
+	}
249
+	event := strings.TrimSpace(events[0])
250
+	expectedStr := image + ": tag"
251
+
252
+	if !strings.HasSuffix(event, expectedStr) {
253
+		c.Fatalf("wrong event format. expected='%s' got=%s", expectedStr, event)
254
+	}
255
+
256
+}
257
+
233 258
 func (s *DockerSuite) TestEventsImagePull(c *check.C) {
234 259
 	since := daemonTime(c).Unix()
235 260
 	testRequires(c, Network)