1// Copyright (C) MongoDB, Inc. 2014-present. 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); you may 4// not use this file except in compliance with the License. You may obtain 5// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 6 7// Main package for the mongoexport tool. 8package main 9 10import ( 11 "os" 12 13 "github.com/mongodb/mongo-tools-common/log" 14 "github.com/mongodb/mongo-tools-common/signals" 15 "github.com/mongodb/mongo-tools-common/util" 16 "github.com/mongodb/mongo-tools/mongoexport" 17) 18 19var ( 20 VersionStr = "built-without-version-string" 21 GitCommit = "build-without-git-commit" 22) 23 24func main() { 25 opts, err := mongoexport.ParseOptions(os.Args[1:], VersionStr, GitCommit) 26 if err != nil { 27 log.Logvf(log.Always, "error parsing command line options: %v", err) 28 log.Logvf(log.Always, util.ShortUsage("mongoexport")) 29 os.Exit(util.ExitFailure) 30 } 31 32 signals.Handle() 33 34 // print help, if specified 35 if opts.PrintHelp(false) { 36 return 37 } 38 39 // print version, if specified 40 if opts.PrintVersion() { 41 return 42 } 43 44 exporter, err := mongoexport.New(opts) 45 if err != nil { 46 log.Logvf(log.Always, "%v", err) 47 48 if se, ok := err.(util.SetupError); ok && se.Message != "" { 49 log.Logv(log.Always, se.Message) 50 } 51 52 os.Exit(util.ExitFailure) 53 } 54 defer exporter.Close() 55 56 writer, err := exporter.GetOutputWriter() 57 if err != nil { 58 log.Logvf(log.Always, "error opening output stream: %v", err) 59 os.Exit(util.ExitFailure) 60 } 61 if writer == nil { 62 writer = os.Stdout 63 } else { 64 defer writer.Close() 65 } 66 67 numDocs, err := exporter.Export(writer) 68 if err != nil { 69 log.Logvf(log.Always, "Failed: %v", err) 70 os.Exit(util.ExitFailure) 71 } 72 73 if numDocs == 1 { 74 log.Logvf(log.Always, "exported %v record", numDocs) 75 } else { 76 log.Logvf(log.Always, "exported %v records", numDocs) 77 } 78 79} 80