github.com/schemalex/git-schemalex@v0.0.0-20170921120917-b690b7f9e063/cmd/git-schemalex/main.go (about)

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"flag"
     6  	"fmt"
     7  	"log"
     8  	"os"
     9  	"os/signal"
    10  	"syscall"
    11  
    12  	"github.com/schemalex/git-schemalex"
    13  )
    14  
    15  var (
    16  	workspace = flag.String("workspace", "", "workspace of git")
    17  	deploy    = flag.Bool("deploy", false, "deploy")
    18  	dsn       = flag.String("dsn", "", "")
    19  	table     = flag.String("table", "git_schemalex_version", "table of git revision")
    20  	schema    = flag.String("schema", "", "path to schema file")
    21  )
    22  
    23  func main() {
    24  	flag.Parse()
    25  	if err := _main(); err != nil {
    26  		log.Fatal(err)
    27  	}
    28  }
    29  
    30  func _main() error {
    31  	ctx, cancel := context.WithCancel(context.Background())
    32  	defer cancel()
    33  
    34  	sigCh := make(chan os.Signal, 1)
    35  	signal.Notify(sigCh, syscall.SIGTERM, syscall.SIGINT, syscall.SIGQUIT)
    36  
    37  	go func() {
    38  		select {
    39  		case <-ctx.Done():
    40  			return
    41  		case <-sigCh:
    42  			cancel()
    43  			return
    44  		}
    45  	}()
    46  
    47  	r := &gitschemalex.Runner{
    48  		Workspace: *workspace,
    49  		Deploy:    *deploy,
    50  		DSN:       *dsn,
    51  		Table:     *table,
    52  		Schema:    *schema,
    53  	}
    54  	err := r.Run(ctx)
    55  	if err == gitschemalex.ErrEqualVersion {
    56  		fmt.Println(err.Error())
    57  		return nil
    58  	}
    59  	return err
    60  }