mirror of
https://github.com/hanzoai/migrate.git
synced 2026-09-30 22:55:10 +00:00
* CLI: Improve migration creation. * Validates migration version on creation, to avoid creation of duplicated versions * Uses `os.OpenFile` with `O_CREATE|O_EXCL` to create files to avoid file collisions * Uses `filepath.Join` to concatenate paths, making `cleanPath()` not necessary * Prints generated filenames * Fixes #238 * Supersedes #250 * CLI: change `createCmd` to return error and accept `print` parameter * feat: print out an abs path Better for Windows OS when specify -dir as /subdir, user will see C:/subdir/0001_name.up.sql rather than /subdir/0001_name.up.sql * test: fixed abs path test fail for OS Windows abs path tests fails because filepath.IsAbs() treats `/subdir` path as invalid abs path at windows when drive letter is not present * feat: print absolute path for created files Better for Windows OS systems where `/path` can be interpreted in different ways depending on working dir * test: corrected tests for OS Windows OS Windows has different interpretation of `/path`, it depends on working dir. If working dir D:\test it interprets `/path` as `D:\path` * test: fixed `dir invalid` test Linux OS has less restriction on a filepath than Windows, so path invalid in windows is perfectly valid for Linux. The only invalid dir name in Linux is one ending with null string terminator (\000) * refac(cli): *Cmd() now returns an error and not uses log.fatalErr(err) * docs: added godoc, migarate usage updated * refac(cli): code refactored * refac: removed unnecessary path covert * docs: comment added * test: fixed code review issue, noErrorExpected var removed https://github.com/golang-migrate/migrate/pull/352#discussion_r389409789 * docs: fixed godoc Co-authored-by: Kiyoshi '13k' Murata <[email protected]>
45 lines
732 B
Go
45 lines
732 B
Go
package cli
|
|
|
|
import (
|
|
"fmt"
|
|
logpkg "log"
|
|
"os"
|
|
)
|
|
|
|
// Log represents the logger
|
|
type Log struct {
|
|
verbose bool
|
|
}
|
|
|
|
// Printf prints out formatted string into a log
|
|
func (l *Log) Printf(format string, v ...interface{}) {
|
|
if l.verbose {
|
|
logpkg.Printf(format, v...)
|
|
} else {
|
|
fmt.Fprintf(os.Stderr, format, v...)
|
|
}
|
|
}
|
|
|
|
// Println prints out args into a log
|
|
func (l *Log) Println(args ...interface{}) {
|
|
if l.verbose {
|
|
logpkg.Println(args...)
|
|
} else {
|
|
fmt.Fprintln(os.Stderr, args...)
|
|
}
|
|
}
|
|
|
|
// Verbose shows if verbose print enabled
|
|
func (l *Log) Verbose() bool {
|
|
return l.verbose
|
|
}
|
|
|
|
func (l *Log) fatal(args ...interface{}) {
|
|
l.Println(args...)
|
|
os.Exit(1)
|
|
}
|
|
|
|
func (l *Log) fatalErr(err error) {
|
|
l.fatal("error:", err)
|
|
}
|