X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fsynfigapp%2Fcvs.cpp;fp=synfig-studio%2Ftrunk%2Fsrc%2Fsynfigapp%2Fcvs.cpp;h=0000000000000000000000000000000000000000;hb=a095981e18cc37a8ecc7cd237cc22b9c10329264;hp=71737850ebaa8178e441d578cf46907e36c77d97;hpb=9459638ad6797b8139f1e9f0715c96076dbf0890;p=synfig.git diff --git a/synfig-studio/trunk/src/synfigapp/cvs.cpp b/synfig-studio/trunk/src/synfigapp/cvs.cpp deleted file mode 100644 index 7173785..0000000 --- a/synfig-studio/trunk/src/synfigapp/cvs.cpp +++ /dev/null @@ -1,381 +0,0 @@ -/* === S Y N F I G ========================================================= */ -/*! \file cvs.cpp -** \brief Template File -** -** $Id$ -** -** \legal -** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley -** -** This package is free software; you can redistribute it and/or -** modify it under the terms of the GNU General Public License as -** published by the Free Software Foundation; either version 2 of -** the License, or (at your option) any later version. -** -** This package is distributed in the hope that it will be useful, -** but WITHOUT ANY WARRANTY; without even the implied warranty of -** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -** General Public License for more details. -** \endlegal -*/ -/* ========================================================================= */ - -/* === H E A D E R S ======================================================= */ - -#ifdef USING_PCH -# include "pch.h" -#else -#ifdef HAVE_CONFIG_H -# include -#endif - -#include "cvs.h" -#include -#include -#include -#include -#include - - -#include -#include -//#include - -#include - -#include "general.h" - -#endif - -/* === U S I N G =========================================================== */ - -using namespace std; -using namespace etl; -using namespace synfig; -using namespace synfigapp; - -/* === M A C R O S ========================================================= */ - -#define cvs_command synfig::String("cvs -z4") - -#ifndef WIN32 -#define HAVE_STRPTIME -#endif - -#ifdef __APPLE__ -time_t _daylight_() { time_t t(time(0)); return localtime(&t)->tm_gmtoff; } -#define daylight _daylight_() -#endif - -/* === G L O B A L S ======================================================= */ - -/* === P R O C E D U R E S ================================================= */ - -/* === M E T H O D S ======================================================= */ - -CVSInfo::CVSInfo(const synfig::String& file_name) -{ - update_available_=false; - set_file_name(file_name); -} - -CVSInfo::CVSInfo() -{ - update_available_=false; -} - -CVSInfo::~CVSInfo() -{ -} - -void -CVSInfo::set_file_name(const synfig::String& file_name) -{ - file_name_=file_name; - - std::ifstream file((dirname(file_name_)+"/CVS/Root").c_str()); - - if(file) - { - in_sandbox_=true; - calc_repository_info(); - } - else - in_sandbox_=false; -} - -void -CVSInfo::calc_repository_info() -{ -#ifdef _DEBUG - synfig::info("in_sandbox() = %d",in_sandbox()); -#endif - - if(!in_sandbox_) - return; - - std::ifstream file((dirname(file_name_)+"/CVS/Entries").c_str()); - - while(file) - { - String line; - getline(file,line); - if(line.find(basename(file_name_))!=String::npos) - { - in_repository_=true; - String::size_type s,f; - - // Grab the version - s=line.find('/',1); - assert(s!=String::npos); - s++; - f=line.find('/',s+1); - assert(f!=String::npos); - cvs_version_=String(line,s,f-s); - - // Grab the time -#ifdef HAVE_STRPTIME - s=f+1; - f=line.find('/',s+1); - assert(f!=String::npos); - tm time_struct; - strptime(String(line,s,f-s).c_str(),"%c",&time_struct); - original_timestamp_=mktime(&time_struct); -#endif - - if( - system(strprintf( - "cd '%s' && cvs status '%s' | grep -q -e 'Needs Patch'", - dirname(file_name_).c_str(), - basename(file_name_).c_str() - ).c_str())==0 - ) - { - synfig::info("UPDATE_AVAILABLE=TRUE"); - update_available_=true; - } - else - { - system(strprintf( - "cd '%s' && cvs status '%s'", - dirname(file_name_).c_str(), - basename(file_name_).c_str() - ).c_str()); - synfig::info("UPDATE_AVAILABLE=FALSE"); - update_available_=false; - } - - -#ifdef _DEBUG - synfig::info("in_repository() = %d",in_repository()); - synfig::info("get_cvs_version() = %s",get_cvs_version().c_str()); - synfig::info("get_original_timestamp() = %s",ctime(&get_original_timestamp())); - time_t t(get_current_timestamp()); - synfig::info("get_current_timestamp() = %s",ctime(&t)); - synfig::info("get_cvs_root() = %s",get_cvs_root().c_str()); - synfig::info("get_cvs_module() = %s",get_cvs_module().c_str()); -#endif - return; - } - } - - in_repository_=false; - cvs_version_.clear(); - original_timestamp_=0; - -#ifdef _DEBUG - synfig::info("in_repository() = %d",in_repository()); -#endif -} - -bool -CVSInfo::in_sandbox()const -{ - return in_sandbox_; -} - -bool -CVSInfo::in_repository()const -{ - if(!in_sandbox_) - return false; - return in_repository_; -} - -bool -CVSInfo::is_modified()const -{ - if(!in_sandbox() || !in_repository()) - return false; -#ifdef _DEBUG - synfig::info("%d-%d=%d",get_current_timestamp(),get_original_timestamp(),get_current_timestamp()-get_original_timestamp()); -#endif - return get_current_timestamp()!=get_original_timestamp() && abs(get_current_timestamp()-get_original_timestamp())!=3600; -} - -bool -CVSInfo::is_updated()const -{ - return update_available_; -} - -const synfig::String& -CVSInfo::get_cvs_version()const -{ - return cvs_version_; -} - -const time_t& -CVSInfo::get_original_timestamp()const -{ - return original_timestamp_; -} - -time_t -CVSInfo::get_current_timestamp()const -{ - struct stat st; - if(stat(file_name_.c_str(),&st)<0) - { - synfig::error("Unable to get file stats"); - return false; - } - time_t ret((daylight-1)*3600); - //ret+=timezone; - ret+=st.st_mtime; - return ret; -} - -synfig::String -CVSInfo::get_cvs_root()const -{ - if(!in_sandbox_) - return synfig::String(); - - std::ifstream file((dirname(file_name_)+"/CVS/Root").c_str()); - - if(file) - { - String ret; - getline(file,ret); - return ret; - } - - return synfig::String(); -} - -synfig::String -CVSInfo::get_cvs_module()const -{ - if(!in_sandbox_) - return synfig::String(); - - std::ifstream file((dirname(file_name_)+"/CVS/Repository").c_str()); - - if(file) - { - String ret; - getline(file,ret); - return ret; - } - - return synfig::String(); -} - -// This function pre-processes the message so that we -// don't get any CVS syntax errors. -inline synfig::String fix_msg(const synfig::String& message) -{ - synfig::String ret; - int i; - for(i=0;i<(int)message.size();i++) - { - if(message[i]=='\'') - ret+="'\"'\"'"; - else - ret+=message[i]; - } - return ret; -} - -void -CVSInfo::cvs_add(const synfig::String& message) -{ - if(!in_sandbox_) - { - synfig::error("cvs_add(): Not in a sand box"); - throw int(); - return; - } - - synfig::String command(strprintf("cd '%s' && %s add -m '%s' '%s'",dirname(file_name_).c_str(),cvs_command.c_str(),fix_msg(message).c_str(),basename(file_name_).c_str())); - - int ret(system(command.c_str())); - - calc_repository_info(); - - switch(ret) - { - case 0: - break; - default: - synfig::error("Unknown errorcode %d (\"%s\")",ret,command.c_str()); - throw(ret); - break; - } -} - -void -CVSInfo::cvs_update() -{ - if(!in_sandbox_) - { - synfig::error("cvs_update(): Not in a sand box"); - throw int(); - return; - } - - synfig::String command(strprintf("cd '%s' && %s update '%s'",dirname(file_name_).c_str(),cvs_command.c_str(),basename(file_name_).c_str())); - - int ret(system(command.c_str())); - - calc_repository_info(); - - switch(ret) - { - case 0: - break; - default: - synfig::error("Unknown errorcode %d (\"%s\")",ret,command.c_str()); - throw(ret); - break; - } -} - -void -CVSInfo::cvs_commit(const synfig::String& message) -{ - if(!in_sandbox_) - { - synfig::error("cvs_commit(): Not in a sand box"); - throw int(); - return; - } - - synfig::String command(strprintf("cd '%s' && %s commit -m '%s' '%s'",dirname(file_name_).c_str(),cvs_command.c_str(),fix_msg(message).c_str(),basename(file_name_).c_str())); - - int ret(system(command.c_str())); - - calc_repository_info(); - - switch(ret) - { - case 0: - break; - default: - synfig::error("Unknown errorcode %d (\"%s\")",ret,command.c_str()); - if(is_modified()) - throw(ret); - break; - } -}