diff --git a/Makefile b/Makefile index a4ff08b..7f3b67e 100644 --- a/Makefile +++ b/Makefile @@ -17,9 +17,9 @@ BUILD_VERSION=dev-$(BUILD_DATE)-$(BUILD_REV) all: build test imposm3: $(GOFILES) $(PROTOFILES) - @sed -i='' 's/buildVersion = ".*"/buildVersion = "$(BUILD_VERSION)"/' version.go + @sed -i='' 's/buildVersion = ".*"/buildVersion = "$(BUILD_VERSION)"/' cmd/version.go go build $(GOLDFLAGS) - @sed -i='' 's/buildVersion = ".*"/buildVersion = ""/' version.go + @sed -i='' 's/buildVersion = ".*"/buildVersion = ""/' cmd/version.go build: imposm3 diff --git a/cmd/main.go b/cmd/main.go new file mode 100644 index 0000000..4e3fc2b --- /dev/null +++ b/cmd/main.go @@ -0,0 +1,110 @@ +package cmd + +import ( + "fmt" + "imposm3/cache" + golog "log" + "os" + "runtime" + + "imposm3/cache/query" + "imposm3/config" + "imposm3/diff" + "imposm3/geom/limit" + "imposm3/import_" + "imposm3/logging" + "imposm3/stats" +) + +var log = logging.NewLogger("") + +func PrintCmds() { + fmt.Fprintf(os.Stderr, "Usage: %s COMMAND [args]\n\n", os.Args[0]) + fmt.Println("Available commands:") + fmt.Println("\timport") + fmt.Println("\tdiff") + fmt.Println("\tquery-cache") + fmt.Println("\tversion") +} + +func Main(usage func()) { + golog.SetFlags(golog.LstdFlags | golog.Lshortfile) + if os.Getenv("GOMAXPROCS") == "" { + runtime.GOMAXPROCS(runtime.NumCPU()) + } + + if len(os.Args) <= 1 { + usage() + logging.Shutdown() + os.Exit(1) + } + + switch os.Args[1] { + case "import": + config.ParseImport(os.Args[2:]) + if config.BaseOptions.Httpprofile != "" { + stats.StartHttpPProf(config.BaseOptions.Httpprofile) + } + import_.Import() + case "diff": + config.ParseDiffImport(os.Args[2:]) + + if config.BaseOptions.Httpprofile != "" { + stats.StartHttpPProf(config.BaseOptions.Httpprofile) + } + + if config.BaseOptions.Quiet { + logging.SetQuiet(true) + } + + var geometryLimiter *limit.Limiter + if config.BaseOptions.LimitTo != "" { + var err error + step := log.StartStep("Reading limitto geometries") + geometryLimiter, err = limit.NewFromGeoJsonWithBuffered( + config.BaseOptions.LimitTo, + config.BaseOptions.LimitToCacheBuffer, + ) + if err != nil { + log.Fatal(err) + } + log.StopStep(step) + } + osmCache := cache.NewOSMCache(config.BaseOptions.CacheDir) + err := osmCache.Open() + if err != nil { + log.Fatal("osm cache: ", err) + } + defer osmCache.Close() + + diffCache := cache.NewDiffCache(config.BaseOptions.CacheDir) + err = diffCache.Open() + if err != nil { + log.Fatal("diff cache: ", err) + } + + for _, oscFile := range config.DiffFlags.Args() { + err := diff.Update(oscFile, geometryLimiter, nil, osmCache, diffCache, false) + if err != nil { + osmCache.Close() + diffCache.Close() + log.Fatal(err) + } + } + // explicitly Close since os.Exit prevents defers + osmCache.Close() + diffCache.Close() + + case "query-cache": + query.Query(os.Args[2:]) + case "version": + fmt.Println(Version) + os.Exit(0) + default: + usage() + log.Fatalf("invalid command: '%s'", os.Args[1]) + } + logging.Shutdown() + os.Exit(0) + +} diff --git a/cmd/version.go b/cmd/version.go new file mode 100644 index 0000000..45ef677 --- /dev/null +++ b/cmd/version.go @@ -0,0 +1,10 @@ +package cmd + +var Version string + +func init() { + // buidVersion gets replaced during build + var BuildVersion = "" + Version = "0.1" + Version += BuildVersion +} diff --git a/imposm3.go b/imposm3.go index 3dec0f3..1df69a7 100644 --- a/imposm3.go +++ b/imposm3.go @@ -1,114 +1,9 @@ package main import ( - "fmt" - "imposm3/cache" - golog "log" - "os" - "runtime" - - "imposm3/cache/query" - "imposm3/config" - "imposm3/diff" - "imposm3/geom/limit" - "imposm3/import_" - "imposm3/logging" - "imposm3/stats" + "imposm3/cmd" ) -var log = logging.NewLogger("") - -func PrintCmds() { - fmt.Fprintf(os.Stderr, "Usage: %s COMMAND [args]\n\n", os.Args[0]) - fmt.Println("Available commands:") - fmt.Println("\timport") - fmt.Println("\tdiff") - fmt.Println("\tquery-cache") - fmt.Println("\tversion") -} - func main() { - Main(PrintCmds) -} - -func Main(usage func()) { - golog.SetFlags(golog.LstdFlags | golog.Lshortfile) - if os.Getenv("GOMAXPROCS") == "" { - runtime.GOMAXPROCS(runtime.NumCPU()) - } - - if len(os.Args) <= 1 { - usage() - logging.Shutdown() - os.Exit(1) - } - - switch os.Args[1] { - case "import": - config.ParseImport(os.Args[2:]) - if config.BaseOptions.Httpprofile != "" { - stats.StartHttpPProf(config.BaseOptions.Httpprofile) - } - import_.Import() - case "diff": - config.ParseDiffImport(os.Args[2:]) - - if config.BaseOptions.Httpprofile != "" { - stats.StartHttpPProf(config.BaseOptions.Httpprofile) - } - - if config.BaseOptions.Quiet { - logging.SetQuiet(true) - } - - var geometryLimiter *limit.Limiter - if config.BaseOptions.LimitTo != "" { - var err error - step := log.StartStep("Reading limitto geometries") - geometryLimiter, err = limit.NewFromGeoJsonWithBuffered( - config.BaseOptions.LimitTo, - config.BaseOptions.LimitToCacheBuffer, - ) - if err != nil { - log.Fatal(err) - } - log.StopStep(step) - } - osmCache := cache.NewOSMCache(config.BaseOptions.CacheDir) - err := osmCache.Open() - if err != nil { - log.Fatal("osm cache: ", err) - } - defer osmCache.Close() - - diffCache := cache.NewDiffCache(config.BaseOptions.CacheDir) - err = diffCache.Open() - if err != nil { - log.Fatal("diff cache: ", err) - } - - for _, oscFile := range config.DiffFlags.Args() { - err := diff.Update(oscFile, geometryLimiter, nil, osmCache, diffCache, false) - if err != nil { - osmCache.Close() - diffCache.Close() - log.Fatal(err) - } - } - // explicitly Close since os.Exit prevents defers - osmCache.Close() - diffCache.Close() - - case "query-cache": - query.Query(os.Args[2:]) - case "version": - fmt.Println(imposmVersion) - os.Exit(0) - default: - usage() - log.Fatalf("invalid command: '%s'", os.Args[1]) - } - logging.Shutdown() - os.Exit(0) - + cmd.Main(cmd.PrintCmds) } diff --git a/version.go b/version.go deleted file mode 100644 index 9d3d7d6..0000000 --- a/version.go +++ /dev/null @@ -1,10 +0,0 @@ -package main - -var imposmVersion string - -func init() { - // buidVersion gets replaced during build - var buildVersion = "" - imposmVersion = "0.1" - imposmVersion += buildVersion -}