func main() { golog.SetFlags(golog.LstdFlags | golog.Lshortfile) if os.Getenv("GOMAXPROCS") == "" { runtime.GOMAXPROCS(runtime.NumCPU()) } if len(os.Args) <= 1 { printCmds() logging.Shutdown() os.Exit(1) } switch os.Args[1] { case "import": config.ParseImport(os.Args[2:]) mainimport() case "diff": config.ParseDiffImport(os.Args[2:]) var geometryLimiter *limit.Limiter if config.BaseOptions.LimitTo != "" { var err error step := log.StartStep("Reading limitto geometries") geometryLimiter, err = limit.NewFromOgrSourceWithBuffered( config.BaseOptions.LimitTo, config.BaseOptions.LimitToCacheBuffer, ) if err != nil { log.Fatal(err) } log.StopStep(step) } for _, oscFile := range config.DiffFlags.Args() { diff.Update(oscFile, geometryLimiter, false) } case "query-cache": query.Query(os.Args[2:]) case "version": fmt.Println(imposmVersion) os.Exit(0) default: printCmds() log.Fatalf("invalid command: '%s'", os.Args[1]) } logging.Shutdown() os.Exit(0) }
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) }