| Index: common/api/dm/service/v1/walk_graph_normalize.go | 
| diff --git a/common/api/dm/service/v1/walk_graph_normalize.go b/common/api/dm/service/v1/walk_graph_normalize.go | 
| index 0a412112ebe2dc06fb6ccf82b12e56e0c596a5a3..9bd4baaccd3660a18c512ac65ab907b087f7041a 100644 | 
| --- a/common/api/dm/service/v1/walk_graph_normalize.go | 
| +++ b/common/api/dm/service/v1/walk_graph_normalize.go | 
| @@ -5,6 +5,8 @@ | 
| package dm | 
|  | 
| import ( | 
| +	"math" | 
| + | 
| "github.com/luci/luci-go/common/errors" | 
| ) | 
|  | 
| @@ -16,8 +18,27 @@ const ( | 
| MaxLimitMaxDataSize = 30 * 1024 * 1024 | 
| ) | 
|  | 
| +// MakeWalkGraphIncludeAll makes a new WalkGraphReq_Include which has all the | 
| +// boxes ticked. This should only be used when your application plans to dump | 
| +// the resulting graph query data to some logging/debugging trace for humans. | 
| +// | 
| +// If you don't plan on dumping it for humans, please set the Include options | 
| +// appropriately in order to avoid wasting bandwidth/cpu/datastore query time on | 
| +// the server (and draining your DM quotas unnecessarially). | 
| +func MakeWalkGraphIncludeAll() *WalkGraphReq_Include { | 
| +	return &WalkGraphReq_Include{ | 
| +		true, true, true, true, true, math.MaxUint32, true, true, true, | 
| +	} | 
| +} | 
| + | 
| // Normalize returns an error iff the WalkGraphReq is invalid. | 
| func (w *WalkGraphReq) Normalize() error { | 
| +	if w.Auth != nil { | 
| +		if err := w.Auth.Normalize(); err != nil { | 
| +			return err | 
| +		} | 
| +	} | 
| + | 
| if w.Query == nil { | 
| return errors.New("must specify a Query") | 
| } | 
| @@ -52,6 +73,9 @@ func (w *WalkGraphReq) Normalize() error { | 
| if w.Include.AttemptResult { | 
| w.Include.AttemptData = true | 
| } | 
| +		if w.Include.NumExecutions == 0 { | 
| +			w.Include.ExecutionInfoUrl = false | 
| +		} | 
| } | 
| return nil | 
| } | 
|  |