mirror of https://github.com/vitalif/grive2
Use regex_search() instead of regex_match(), turn on -f implicitly when changing ignore regexp (should fix #43)
parent
85b35b4fca
commit
7e6e153a3a
|
@ -36,19 +36,29 @@ namespace gr {
|
||||||
State::State( const fs::path& filename, const Val& options ) :
|
State::State( const fs::path& filename, const Val& options ) :
|
||||||
m_res ( options["path"].Str() ),
|
m_res ( options["path"].Str() ),
|
||||||
m_dir ( options["dir"].Str() ),
|
m_dir ( options["dir"].Str() ),
|
||||||
m_cstamp ( -1 ),
|
m_cstamp ( -1 )
|
||||||
m_ign ( !options["ignore"].Str().empty() ? options["ignore"].Str()+"|^\\.(grive|grive_state|trash)" : "^\\.(grive|grive_state|trash)" )
|
|
||||||
{
|
{
|
||||||
Read( filename ) ;
|
Read( filename ) ;
|
||||||
|
|
||||||
|
bool force = options.Has( "force" ) ? options["force"].Bool() : false ;
|
||||||
|
|
||||||
|
if ( options.Has( "ignore" ) && !m_ign.empty() && options["ignore"].Str() != m_ign )
|
||||||
|
{
|
||||||
|
// also "-f" is implicitly turned on when ignore regexp is changed
|
||||||
|
// because without it grive would think that previously ignored files are deleted locally
|
||||||
|
m_ign = options["ignore"].Str();
|
||||||
|
force = true;
|
||||||
|
}
|
||||||
|
|
||||||
// the "-f" option will make grive always think remote is newer
|
// the "-f" option will make grive always think remote is newer
|
||||||
Val force ;
|
if ( force )
|
||||||
if ( options.Get("force", force) && force.Bool() )
|
|
||||||
{
|
{
|
||||||
m_last_change = DateTime() ;
|
m_last_change = DateTime() ;
|
||||||
m_last_sync = DateTime::Now() ;
|
m_last_sync = DateTime::Now() ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_ign_re = boost::regex( m_ign.empty() ? "^\\.(grive|grive_state|trash)" : ( m_ign+"|^\\.(grive|grive_state|trash)" ) );
|
||||||
|
|
||||||
Log( "last server change time: %1%; last sync time: %2%", m_last_change, m_last_sync, log::verbose ) ;
|
Log( "last server change time: %1%; last sync time: %2%", m_last_change, m_last_sync, log::verbose ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,7 +75,7 @@ void State::FromLocal( const fs::path& p )
|
||||||
|
|
||||||
bool State::IsIgnore( const std::string& filename )
|
bool State::IsIgnore( const std::string& filename )
|
||||||
{
|
{
|
||||||
return regex_match( filename.c_str(), m_ign );
|
return regex_search( filename.c_str(), m_ign_re );
|
||||||
}
|
}
|
||||||
|
|
||||||
void State::FromLocal( const fs::path& p, Resource* folder )
|
void State::FromLocal( const fs::path& p, Resource* folder )
|
||||||
|
@ -261,6 +271,7 @@ void State::Read( const fs::path& filename )
|
||||||
Val last_change = json.Has( "last_change" ) ? json["last_change"] : json["last_sync"] ;
|
Val last_change = json.Has( "last_change" ) ? json["last_change"] : json["last_sync"] ;
|
||||||
m_last_sync.Assign( last_sync["sec"].Int(), last_sync["nsec"].Int() ) ;
|
m_last_sync.Assign( last_sync["sec"].Int(), last_sync["nsec"].Int() ) ;
|
||||||
m_last_change.Assign( last_change["sec"].Int(), last_change["nsec"].Int() ) ;
|
m_last_change.Assign( last_change["sec"].Int(), last_change["nsec"].Int() ) ;
|
||||||
|
m_ign = json.Has( "ignore_regexp" ) ? json["ignore_regexp"].Str() : std::string();
|
||||||
|
|
||||||
m_cstamp = json["change_stamp"].Int() ;
|
m_cstamp = json["change_stamp"].Int() ;
|
||||||
}
|
}
|
||||||
|
@ -283,6 +294,7 @@ void State::Write( const fs::path& filename ) const
|
||||||
result.Add( "last_sync", last_sync ) ;
|
result.Add( "last_sync", last_sync ) ;
|
||||||
result.Add( "last_change", last_change ) ;
|
result.Add( "last_change", last_change ) ;
|
||||||
result.Add( "change_stamp", Val(m_cstamp) ) ;
|
result.Add( "change_stamp", Val(m_cstamp) ) ;
|
||||||
|
result.Add( "ignore_regexp", Val(m_ign) ) ;
|
||||||
|
|
||||||
std::ofstream fs( filename.string().c_str() ) ;
|
std::ofstream fs( filename.string().c_str() ) ;
|
||||||
fs << result ;
|
fs << result ;
|
||||||
|
|
|
@ -79,7 +79,8 @@ private :
|
||||||
DateTime m_last_change ;
|
DateTime m_last_change ;
|
||||||
int m_cstamp ;
|
int m_cstamp ;
|
||||||
std::string m_dir ;
|
std::string m_dir ;
|
||||||
boost::regex m_ign ;
|
std::string m_ign ;
|
||||||
|
boost::regex m_ign_re ;
|
||||||
|
|
||||||
std::vector<Entry> m_unresolved ;
|
std::vector<Entry> m_unresolved ;
|
||||||
} ;
|
} ;
|
||||||
|
|
|
@ -46,9 +46,8 @@ Config::Config( const po::variables_map& vm )
|
||||||
m_cmd.Add( "dir", Val(vm.count("dir") > 0
|
m_cmd.Add( "dir", Val(vm.count("dir") > 0
|
||||||
? vm["dir"].as<std::string>()
|
? vm["dir"].as<std::string>()
|
||||||
: "" ) ) ;
|
: "" ) ) ;
|
||||||
m_cmd.Add( "ignore", Val(vm.count("ignore") > 0
|
if ( vm.count("ignore") > 0 )
|
||||||
? vm["ignore"].as<std::string>()
|
m_cmd.Add( "ignore", Val( vm["ignore"].as<std::string>() ) );
|
||||||
: "" ) ) ;
|
|
||||||
|
|
||||||
m_path = GetPath( fs::path(m_cmd["path"].Str()) ) ;
|
m_path = GetPath( fs::path(m_cmd["path"].Str()) ) ;
|
||||||
m_file = Read( ) ;
|
m_file = Read( ) ;
|
||||||
|
|
Loading…
Reference in New Issue