Chromium Code Reviews| Index: appengine/cmd/milo/cmd/backfill/main.go |
| diff --git a/appengine/cmd/milo/cmd/backfill/main.go b/appengine/cmd/milo/cmd/backfill/main.go |
| deleted file mode 100644 |
| index 1b352f3ad9b90fa94e8eb6149da6370c31ac17ac..0000000000000000000000000000000000000000 |
| --- a/appengine/cmd/milo/cmd/backfill/main.go |
| +++ /dev/null |
| @@ -1,170 +0,0 @@ |
| -// Copyright 2015 The LUCI Authors. All rights reserved. |
| -// Use of this source code is governed under the Apache License, Version 2.0 |
| -// that can be found in the LICENSE file. |
| - |
| -package main |
| - |
| -import ( |
| - "fmt" |
| - "io/ioutil" |
| - "os" |
| - |
| - "github.com/luci/gae/impl/prod" |
| - "github.com/luci/luci-go/appengine/cmd/milo/collectors/buildbot" |
| - "github.com/luci/luci-go/appengine/cmd/milo/collectors/git" |
| - "github.com/luci/luci-go/appengine/cmd/milo/model" |
| - log "github.com/luci/luci-go/common/logging" |
| - "github.com/luci/luci-go/common/logging/gologger" |
| - "github.com/maruel/subcommands" |
| - "golang.org/x/net/context" |
| - // Imported so you can upload this as a "module" to app engine, and access |
| - // the remote API. |
| - _ "google.golang.org/appengine/remote_api" |
| -) |
| - |
| -var application = &subcommands.DefaultApplication{ |
| - Name: "backfill", |
| - Title: "Backfill Build and Revision data into the milo backend from various data sources.", |
| - Commands: []*subcommands.Command{ |
| - buildBotCmd, |
| - gitCmd, |
| - subcommands.CmdHelp, |
| - }, |
| -} |
| - |
| -func main() { |
| - os.Exit(subcommands.Run(application, nil)) |
| -} |
| - |
| -// commandRunBase is the base of all backfill subcommands. It defines the common |
| -// flags dryRun and remoteURL |
| -type commandRunBase struct { |
| - subcommands.CommandRunBase |
| - dryRun bool |
| - remoteURL string |
| -} |
| - |
| -func (c *commandRunBase) Init() { |
| - c.Flags.StringVar(&c.remoteURL, "remote-url", "luci-milo.appspot.com", "the URL of the server to connect to via the remote API. Do NOT include the protocol (\"https://\")") |
| - c.Flags.BoolVar(&c.dryRun, "dryrun", true, "if this run is a dryrun, and should make no modifications to the datastore.") |
| -} |
| - |
| -//////////////////////////////////////////////////////////////////////////////// |
| -// Buildbot |
| - |
| -var buildBotCmd = &subcommands.Command{ |
| - UsageLine: "buildbot", |
| - ShortDesc: "runs the buildbot backfiller", |
| - LongDesc: "Runs the buildbot backfiller. This hits chrome build extract, and uploads the data from that into the Cloud datastore, as backed by the remoteURL.", |
| - CommandRun: func() subcommands.CommandRun { |
| - c := &cmdBuildBotRun{} |
| - c.Init() |
| - c.Flags.StringVar(&c.master, "master", "chromium.win", "the master to upload data for") |
| - c.Flags.BoolVar(&c.buildbotFallback, "buildbot-fallback", false, "if getting the data from CBE fails, get the json data directly from the buildbot master") |
| - return c |
| - }, |
| -} |
| - |
| -type cmdBuildBotRun struct { |
| - commandRunBase |
| - master string |
| - buildbotFallback bool |
| -} |
| - |
| -func (c *cmdBuildBotRun) Run(a subcommands.Application, args []string) int { |
| - cfg := gologger.LoggerConfig{ |
| - Format: "%{message}", |
| - Out: os.Stdout, |
| - } |
| - ctx := cfg.Use(context.Background()) |
| - |
| - err := prod.UseRemote(&ctx, c.remoteURL, nil) |
| - if err != nil { |
| - log.Errorf(ctx, "%s", err) |
| - return 1 |
| - } |
| - |
| - err = buildbot.PopulateMaster(ctx, c.master, c.dryRun, c.buildbotFallback) |
| - if err != nil { |
| - log.Errorf(ctx, "%s", err) |
| - return 1 |
| - } |
| - |
| - return 0 |
| -} |
| - |
| -//////////////////////////////////////////////////////////////////////////////// |
| -// Git |
| - |
| -var gitCmd = &subcommands.Command{ |
| - UsageLine: "git", |
| - |
| - ShortDesc: "runs the local git backfiller", |
|
estaab
2016/06/10 01:04:46
Hmm, I'm still using this subcommand to populate r
Ryan Tseng
2016/06/10 01:12:44
Done.
|
| - |
| - LongDesc: "Runs the local git backfiller. Reads history from a local git repo and uploads revision info to cloud datastore at remoteURL.", |
| - |
| - CommandRun: func() subcommands.CommandRun { |
| - c := &cmdGitRun{} |
| - c.Init() |
| - c.Flags.StringVar(&c.gitLog, "git-log", "", "file containing output of git log --topo-order --reverse -z --format=format:'%H,%P,%ae,%ct,%b'") |
| - c.Flags.StringVar(&c.repoURL, "repo-url", "", "the repo URL in the Revision entity group") |
| - return c |
| - }, |
| -} |
| - |
| -type cmdGitRun struct { |
| - commandRunBase |
| - gitLog string |
| - repoURL string |
| -} |
| - |
| -func (c *cmdGitRun) Run(a subcommands.Application, args []string) int { |
| - cfg := gologger.LoggerConfig{ |
| - Format: "%{message}", |
| - Out: os.Stdout, |
| - } |
| - ctx := cfg.Use(context.Background()) |
| - |
| - if c.gitLog == "" || c.remoteURL == "" || c.repoURL == "" { |
| - log.Errorf(ctx, "Flags -git-log, -remote-url, and -repo-url must all be set.") |
| - return 1 |
| - } |
| - |
| - // We need a gae context even in --dry-run mode to get the repository datastore key. |
| - if err := prod.UseRemote(&ctx, c.remoteURL, nil); err != nil { |
| - log.Errorf(ctx, "%s (remote URL: %s)", err, c.remoteURL) |
| - return 1 |
| - } |
| - |
| - contents, err := ioutil.ReadFile(c.gitLog) |
| - if err != nil { |
| - log.Errorf(ctx, "%s", err) |
| - return 1 |
| - } |
| - |
| - revisions, err := git.GetRevisions(string(contents)) |
| - if err != nil { |
| - log.Errorf(ctx, "%s", err) |
| - return 1 |
| - } |
| - |
| - for _, revision := range revisions { |
| - revision.Repository = &model.GetRepository(ctx, c.repoURL).Key |
| - } |
| - |
| - if c.dryRun { |
| - log.Infof(ctx, "Running in dry run mode, writing to stdout.") |
| - for _, r := range revisions { |
| - fmt.Printf("%+v\n", *r) |
| - } |
| - return 0 |
| - } |
| - |
| - log.Infof(ctx, "Saving %d revisions.", len(revisions)) |
| - if err := git.SaveRevisions(ctx, revisions); err != nil { |
| - log.Errorf(ctx, "%s", err) |
| - return 1 |
| - } |
| - |
| - return 0 |
| -} |