| OLD | NEW | 
|   1 // Copyright 2015 The LUCI Authors. All rights reserved. |   1 // Copyright 2015 The LUCI Authors. All rights reserved. | 
|   2 // Use of this source code is governed under the Apache License, Version 2.0 |   2 // Use of this source code is governed under the Apache License, Version 2.0 | 
|   3 // that can be found in the LICENSE file. |   3 // that can be found in the LICENSE file. | 
|   4  |   4  | 
|   5 package mutate |   5 package mutate | 
|   6  |   6  | 
|   7 import ( |   7 import ( | 
|   8         "github.com/luci/gae/service/datastore" |   8         "github.com/luci/gae/service/datastore" | 
|   9         "github.com/luci/luci-go/appengine/cmd/dm/model" |   9         "github.com/luci/luci-go/appengine/cmd/dm/model" | 
|  10         "github.com/luci/luci-go/appengine/tumble" |  10         "github.com/luci/luci-go/appengine/tumble" | 
|  11         "github.com/luci/luci-go/common/logging" |  11         "github.com/luci/luci-go/common/logging" | 
|  12         "golang.org/x/net/context" |  12         "golang.org/x/net/context" | 
|  13 ) |  13 ) | 
|  14  |  14  | 
|  15 // MergeQuest ensures that the given Quest exists and contains the merged |  15 // MergeQuest ensures that the given Quest exists and contains the merged | 
|  16 // set of BuiltBy entries. |  16 // set of BuiltBy entries. | 
|  17 type MergeQuest struct { |  17 type MergeQuest struct { | 
|  18 »       Quest *model.Quest |  18 »       Quest   *model.Quest | 
 |  19 »       AndThen []tumble.Mutation | 
|  19 } |  20 } | 
|  20  |  21  | 
|  21 // Root implements tumble.Mutation. |  22 // Root implements tumble.Mutation. | 
|  22 func (m *MergeQuest) Root(c context.Context) *datastore.Key { |  23 func (m *MergeQuest) Root(c context.Context) *datastore.Key { | 
|  23 »       return datastore.Get(c).KeyForObj(m.Quest) |  24 »       return model.QuestKeyFromID(c, m.Quest.ID) | 
|  24 } |  25 } | 
|  25  |  26  | 
|  26 // RollForward implements tumble.Mutation. |  27 // RollForward implements tumble.Mutation. | 
|  27 func (m *MergeQuest) RollForward(c context.Context) (muts []tumble.Mutation, err
     error) { |  28 func (m *MergeQuest) RollForward(c context.Context) (muts []tumble.Mutation, err
     error) { | 
|  28         ds := datastore.Get(c) |  29         ds := datastore.Get(c) | 
|  29  |  30  | 
|  30 »       curQuest := &model.Quest{ID: m.Quest.ID} |  31 »       curQuest := model.QuestFromID(m.Quest.ID) | 
|  31  |  32  | 
|  32         c = logging.SetField(c, "qid", m.Quest.ID) |  33         c = logging.SetField(c, "qid", m.Quest.ID) | 
|  33  |  34  | 
|  34         reason := "getting quest" |  35         reason := "getting quest" | 
|  35         switch err = ds.Get(curQuest); err { |  36         switch err = ds.Get(curQuest); err { | 
|  36         case nil: |  37         case nil: | 
|  37                 prevLen := len(curQuest.BuiltBy) |  38                 prevLen := len(curQuest.BuiltBy) | 
|  38                 curQuest.BuiltBy.Add(m.Quest.BuiltBy...) |  39                 curQuest.BuiltBy.Add(m.Quest.BuiltBy...) | 
|  39                 if len(curQuest.BuiltBy) > prevLen { |  40                 if len(curQuest.BuiltBy) > prevLen { | 
|  40                         reason = "putting merged quest" |  41                         reason = "putting merged quest" | 
|  41                         err = ds.Put(curQuest) |  42                         err = ds.Put(curQuest) | 
|  42                 } |  43                 } | 
|  43         case datastore.ErrNoSuchEntity: |  44         case datastore.ErrNoSuchEntity: | 
|  44                 reason = "putting quest" |  45                 reason = "putting quest" | 
|  45                 err = ds.Put(m.Quest) |  46                 err = ds.Put(m.Quest) | 
|  46         } |  47         } | 
|  47  |  48  | 
|  48         if err != nil { |  49         if err != nil { | 
|  49                 logging.WithError(err).Errorf(c, "%s", reason) |  50                 logging.WithError(err).Errorf(c, "%s", reason) | 
|  50         } |  51         } | 
|  51  |  52  | 
 |  53         muts = m.AndThen | 
 |  54  | 
|  52         return |  55         return | 
|  53 } |  56 } | 
|  54  |  57  | 
|  55 func init() { |  58 func init() { | 
|  56         tumble.Register((*MergeQuest)(nil)) |  59         tumble.Register((*MergeQuest)(nil)) | 
|  57 } |  60 } | 
| OLD | NEW |