mirror of https://github.com/vitalif/grive2
clean up on #109
parent
cb602052f1
commit
0b2a8c0a54
7
README
7
README
|
@ -50,8 +50,13 @@ Enjoy!
|
||||||
|
|
||||||
Version History:
|
Version History:
|
||||||
|
|
||||||
Grive v0.3: Bug fix release
|
Grive v0.3: Bug fix & minor feature release
|
||||||
Fixed bugs:
|
Fixed bugs:
|
||||||
#93: missing reference count increment in one of the Json constructors
|
#93: missing reference count increment in one of the Json constructors
|
||||||
#82: retry for HTTP error 500 & 503
|
#82: retry for HTTP error 500 & 503
|
||||||
#77: Fixed a bug where grive crashed on the first run.
|
#77: Fixed a bug where grive crashed on the first run.
|
||||||
|
|
||||||
|
New features:
|
||||||
|
#87: support for revisions
|
||||||
|
#86: partial sync (contributed by justin at tierramedia.com)
|
||||||
|
|
|
@ -51,6 +51,7 @@ const std::string defaultConfigFileName = ".grive";
|
||||||
const char *configFileEnvironmentVariable = "GR_CONFIG";
|
const char *configFileEnvironmentVariable = "GR_CONFIG";
|
||||||
|
|
||||||
using namespace gr ;
|
using namespace gr ;
|
||||||
|
namespace po = boost::program_options;
|
||||||
|
|
||||||
// libgcrypt insist this to be done in application, not library
|
// libgcrypt insist this to be done in application, not library
|
||||||
void InitGCrypt()
|
void InitGCrypt()
|
||||||
|
@ -65,18 +66,46 @@ void InitGCrypt()
|
||||||
gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
|
gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InitLog( const po::variables_map& vm )
|
||||||
|
{
|
||||||
|
std::auto_ptr<log::CompositeLog> comp_log(new log::CompositeLog) ;
|
||||||
|
LogBase* console_log = comp_log->Add( std::auto_ptr<LogBase>( new log::DefaultLog ) ) ;
|
||||||
|
|
||||||
|
if ( vm.count( "log" ) )
|
||||||
|
{
|
||||||
|
std::auto_ptr<LogBase> file_log(new log::DefaultLog( vm["log"].as<std::string>() )) ;
|
||||||
|
file_log->Enable( log::debug ) ;
|
||||||
|
file_log->Enable( log::verbose ) ;
|
||||||
|
file_log->Enable( log::info ) ;
|
||||||
|
file_log->Enable( log::warning ) ;
|
||||||
|
file_log->Enable( log::error ) ;
|
||||||
|
file_log->Enable( log::critical ) ;
|
||||||
|
|
||||||
|
// log grive version to log file
|
||||||
|
file_log->Log( log::Fmt("grive version " VERSION " " __DATE__ " " __TIME__), log::verbose ) ;
|
||||||
|
file_log->Log( log::Fmt("current time: %1%") % DateTime::Now(), log::verbose ) ;
|
||||||
|
|
||||||
|
comp_log->Add( file_log ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( vm.count( "verbose" ) )
|
||||||
|
{
|
||||||
|
console_log->Enable( log::verbose ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( vm.count( "debug" ) )
|
||||||
|
{
|
||||||
|
console_log->Enable( log::verbose ) ;
|
||||||
|
console_log->Enable( log::debug ) ;
|
||||||
|
}
|
||||||
|
LogBase::Inst( std::auto_ptr<LogBase>(comp_log.release()) ) ;
|
||||||
|
}
|
||||||
|
|
||||||
int Main( int argc, char **argv )
|
int Main( int argc, char **argv )
|
||||||
{
|
{
|
||||||
InitGCrypt() ;
|
InitGCrypt() ;
|
||||||
|
|
||||||
std::string rootFolder = defaultRootFolder;
|
std::string rootFolder = defaultRootFolder;
|
||||||
|
|
||||||
std::auto_ptr<log::CompositeLog> comp_log(new log::CompositeLog) ;
|
|
||||||
LogBase* console_log = comp_log->Add( std::auto_ptr<LogBase>( new log::DefaultLog ) ) ;
|
|
||||||
|
|
||||||
Json options ;
|
|
||||||
|
|
||||||
namespace po = boost::program_options;
|
|
||||||
|
|
||||||
// construct the program options
|
// construct the program options
|
||||||
po::options_description desc( "Grive options" );
|
po::options_description desc( "Grive options" );
|
||||||
|
@ -105,56 +134,41 @@ int Main( int argc, char **argv )
|
||||||
std::cout << desc << std::endl ;
|
std::cout << desc << std::endl ;
|
||||||
return 0 ;
|
return 0 ;
|
||||||
}
|
}
|
||||||
|
else if ( vm.count( "version" ) )
|
||||||
|
{
|
||||||
|
std::cout
|
||||||
|
<< "grive version " << VERSION << ' ' << __DATE__ << ' ' << __TIME__ << std::endl ;
|
||||||
|
return 0 ;
|
||||||
|
}
|
||||||
|
|
||||||
boost::shared_ptr<Config> config ;
|
// initialize logging
|
||||||
|
InitLog(vm) ;
|
||||||
|
|
||||||
if ( vm.count( "log" ) )
|
boost::shared_ptr<Config> config ;
|
||||||
{
|
|
||||||
std::auto_ptr<LogBase> file_log(new log::DefaultLog( vm["log"].as<std::string>() )) ;
|
// config file will be (in order of preference)
|
||||||
file_log->Enable( log::debug ) ;
|
// value specified in environment string
|
||||||
file_log->Enable( log::verbose ) ;
|
// value specified in defaultConfigFileName in path from commandline --path
|
||||||
file_log->Enable( log::info ) ;
|
// value specified in defaultConfigFileName in current directory
|
||||||
file_log->Enable( log::warning ) ;
|
const char *envConfigFileName = ::getenv( configFileEnvironmentVariable ) ;
|
||||||
file_log->Enable( log::error ) ;
|
if (envConfigFileName) {
|
||||||
file_log->Enable( log::critical ) ;
|
config.reset(new Config(envConfigFileName));
|
||||||
|
|
||||||
// log grive version to log file
|
} else if ( vm.count( "path" ) ) {
|
||||||
file_log->Log( log::Fmt("grive version " VERSION " " __DATE__ " " __TIME__), log::verbose ) ;
|
rootFolder = vm["path"].as<std::string>();
|
||||||
file_log->Log( log::Fmt("current time: %1%") % DateTime::Now(), log::verbose ) ;
|
config.reset(new Config( fs::path(rootFolder) / fs::path(defaultConfigFileName) ));
|
||||||
|
|
||||||
comp_log->Add( file_log ) ;
|
} else {
|
||||||
}
|
config.reset(new Config( defaultConfigFileName) );
|
||||||
if ( vm.count( "verbose" ) )
|
|
||||||
{
|
|
||||||
console_log->Enable( log::verbose ) ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// misc options
|
||||||
|
Json options ;
|
||||||
options.Add( "log-xml", Json(vm.count("log-xml") > 0) ) ;
|
options.Add( "log-xml", Json(vm.count("log-xml") > 0) ) ;
|
||||||
options.Add( "new-rev", Json(vm.count("new-rev") > 0) ) ;
|
options.Add( "new-rev", Json(vm.count("new-rev") > 0) ) ;
|
||||||
|
options.Add( "force", Json(vm.count("force") > 0 ) ) ;
|
||||||
|
|
||||||
if ( vm.count( "debug" ) )
|
Log( "config file name %1%", config->ConfigFile().string(), log::verbose );
|
||||||
{
|
|
||||||
console_log->Enable( log::verbose ) ;
|
|
||||||
console_log->Enable( log::debug ) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
// config file will be (in order of preference)
|
|
||||||
// value specified in environment string
|
|
||||||
// value specified in defaultConfigFileName in path from commandline --path
|
|
||||||
// value specified in defaultConfigFileName in current directory
|
|
||||||
const char *envConfigFileName = ::getenv( configFileEnvironmentVariable ) ;
|
|
||||||
if (envConfigFileName) {
|
|
||||||
config.reset(new Config(envConfigFileName));
|
|
||||||
|
|
||||||
} else if ( vm.count( "path" ) ) {
|
|
||||||
rootFolder = vm["path"].as<std::string>();
|
|
||||||
config.reset(new Config( fs::path(rootFolder) / fs::path(defaultConfigFileName) ));
|
|
||||||
|
|
||||||
} else {
|
|
||||||
config.reset(new Config( defaultConfigFileName) );
|
|
||||||
}
|
|
||||||
|
|
||||||
Log( "config file name %1%", config->ConfigFile().string(), log::verbose );
|
|
||||||
|
|
||||||
if ( vm.count( "auth" ) )
|
if ( vm.count( "auth" ) )
|
||||||
{
|
{
|
||||||
|
@ -177,18 +191,6 @@ int Main( int argc, char **argv )
|
||||||
config->Get().Add( "refresh_token", Json( token.RefreshToken() ) ) ;
|
config->Get().Add( "refresh_token", Json( token.RefreshToken() ) ) ;
|
||||||
config->Save() ;
|
config->Save() ;
|
||||||
}
|
}
|
||||||
if ( vm.count( "version" ) )
|
|
||||||
{
|
|
||||||
std::cout
|
|
||||||
<< "grive version " << VERSION << ' ' << __DATE__ << ' ' << __TIME__ << std::endl ;
|
|
||||||
return 0 ;
|
|
||||||
}
|
|
||||||
if ( vm.count( "force" ) )
|
|
||||||
{
|
|
||||||
options.Add( "force", Json(true) ) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
LogBase::Inst( std::auto_ptr<LogBase>(comp_log.release()) ) ;
|
|
||||||
|
|
||||||
std::string refresh_token ;
|
std::string refresh_token ;
|
||||||
try
|
try
|
||||||
|
|
|
@ -6,7 +6,7 @@ find_package(LibGcrypt REQUIRED)
|
||||||
find_package(JSONC REQUIRED)
|
find_package(JSONC REQUIRED)
|
||||||
find_package(CURL REQUIRED)
|
find_package(CURL REQUIRED)
|
||||||
find_package(EXPAT REQUIRED)
|
find_package(EXPAT REQUIRED)
|
||||||
find_package(Boost 1.40.0 COMPONENTS filesystem system REQUIRED)
|
find_package(Boost 1.40.0 COMPONENTS program_options filesystem system REQUIRED)
|
||||||
find_package(BFD)
|
find_package(BFD)
|
||||||
find_package(CppUnit)
|
find_package(CppUnit)
|
||||||
find_package(Iberty)
|
find_package(Iberty)
|
||||||
|
@ -126,6 +126,7 @@ IF ( CPPUNIT_FOUND )
|
||||||
target_link_libraries( unittest
|
target_link_libraries( unittest
|
||||||
grive
|
grive
|
||||||
${CPPUNIT_LIBRARY}
|
${CPPUNIT_LIBRARY}
|
||||||
|
${Boost_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
||||||
ENDIF ( CPPUNIT_FOUND )
|
ENDIF ( CPPUNIT_FOUND )
|
||||||
|
|
|
@ -21,18 +21,21 @@
|
||||||
|
|
||||||
#include "util/StdioFile.hh"
|
#include "util/StdioFile.hh"
|
||||||
|
|
||||||
|
#include <boost/program_options.hpp>
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
|
||||||
using namespace gr;
|
namespace gr {
|
||||||
|
|
||||||
Config::Config(const fs::path& configFile)
|
Config::Config(const fs::path& configFile) :
|
||||||
: m_configFile(configFile)
|
m_configFile(configFile),
|
||||||
, m_cfg( Read() )
|
m_cfg( Read() )
|
||||||
{
|
{
|
||||||
if (configFile.empty()) {
|
if (configFile.empty())
|
||||||
throw Error() << expt::ErrMsg("Config cannot be initalised with an empty string.");
|
{
|
||||||
}
|
throw Error() << expt::ErrMsg("Config cannot be initalised with an empty string.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const fs::path& Config::ConfigFile() const
|
const fs::path& Config::ConfigFile() const
|
||||||
|
@ -63,3 +66,4 @@ Json Config::Read()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // end of namespace
|
||||||
|
|
|
@ -35,14 +35,14 @@ public :
|
||||||
|
|
||||||
Json& Get() ;
|
Json& Get() ;
|
||||||
void Save() ;
|
void Save() ;
|
||||||
const fs::path &ConfigFile() const;
|
const fs::path &ConfigFile() const;
|
||||||
|
|
||||||
private :
|
private :
|
||||||
Json Read() ;
|
Json Read() ;
|
||||||
|
|
||||||
private :
|
private :
|
||||||
const fs::path m_configFile;
|
const fs::path m_configFile;
|
||||||
Json m_cfg ;
|
Json m_cfg ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
} // end of namespace
|
} // end of namespace
|
||||||
|
|
Loading…
Reference in New Issue