/* * Port for usage with qt-framework and development for tdesvn * (C) 2005-2007 by Rajko Albrecht * http://tdesvn.alwins-world.de */ /* * ==================================================================== * Copyright (c) 2002-2005 The RapidSvn Group. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library (in the file LGPL.txt); if not, * write to the Free Software Foundation, Inc., 51 Franklin St, * Fifth Floor, Boston, MA 02110-1301 USA * * This software consists of voluntary contributions made by many * individuals. For exact contribution history, see the revision * history and logs, available at http://rapidsvn.tigris.org/. * ==================================================================== */ // svncpp #include "status.hpp" #include "svnqt/svnqt_defines.hpp" #include "svnqt/path.hpp" #include "svnqt/url.hpp" #include "svn_path.h" namespace svn { class SVNTQT_NOEXPORT Status_private { public: Status_private(); virtual ~Status_private(); /** * Initialize structures * * @param path * @param status if NULL isVersioned will be false */ void init (const TQString&path, const svn_wc_status2_t * status); void init (const TQString&path,const Status_private&src); void init(const TQString&url,const DirEntryPtr&src); void init(const TQString&url,const InfoEntry&src); void setPath(const TQString&); TQString m_Path; bool m_isVersioned; bool m_hasReal; LockEntry m_Lock; Entry m_entry; svn_wc_status_kind _text_status,_prop_status,_repos_text_status,_repos_prop_status; bool _copied,_switched; }; Status_private::Status_private() :m_Path(),m_isVersioned(false),m_hasReal(false) { } Status_private::~ Status_private() { } void Status_private::setPath(const TQString&aPath) { Pool pool; if (!Url::isValid(aPath)) { m_Path = aPath; } else { const char * int_path = svn_path_uri_decode(aPath.TOUTF8(), pool.pool () ); m_Path = TQString::FROMUTF8(int_path); } } void Status_private::init (const TQString&path, const svn_wc_status2_t * status) { setPath(path); if (!status) { m_isVersioned = false; m_hasReal = false; m_entry=Entry(); m_Lock = LockEntry(); } else { m_isVersioned = status->text_status > svn_wc_status_unversioned||status->repos_text_status>svn_wc_status_unversioned; m_hasReal = m_isVersioned && status->text_status!=svn_wc_status_ignored; // now duplicate the contents if (status->entry) { m_entry = Entry(status->entry); } else { m_entry=Entry(); } _text_status = status->text_status; _prop_status = status->prop_status; _copied = status->copied!=0; _switched = status->switched!=0; _repos_text_status = status->repos_text_status; _repos_prop_status = status->repos_prop_status; if (status->repos_lock) { m_Lock.init(status->repos_lock->creation_date, status->repos_lock->expiration_date, status->repos_lock->owner, status->repos_lock->comment, status->repos_lock->token); } else { m_Lock=LockEntry(); } } } void Status_private::init (const TQString&path,const Status_private&src) { setPath(path); m_Lock=src.m_Lock; m_entry=src.m_entry; m_isVersioned=src.m_isVersioned; m_hasReal=src.m_hasReal; _text_status=src._text_status; _prop_status=src._prop_status; _repos_text_status=src._repos_text_status; _repos_prop_status=src._repos_prop_status; _copied=src._copied; _switched=src._switched; } void Status_private::init(const TQString&url,const DirEntryPtr&src) { m_entry=Entry(url,src); setPath(url); _text_status = svn_wc_status_normal; _prop_status = svn_wc_status_normal; if (src) { m_Lock=src->lockEntry(); m_isVersioned=true; m_hasReal=true; } _switched = false; _repos_text_status = svn_wc_status_normal; _repos_prop_status = svn_wc_status_normal; } void Status_private::init(const TQString&url,const InfoEntry&src) { m_entry=Entry(url,src); setPath(url); m_Lock=src.lockEntry(); _text_status = svn_wc_status_normal; _prop_status = svn_wc_status_normal; _repos_text_status = svn_wc_status_normal; _repos_prop_status = svn_wc_status_normal; m_isVersioned=true; m_hasReal=true; } tqStatus::tqStatus (const tqStatus & src) : m_Data(new Status_private()) { if( &src != this ) { if (src.m_Data) { m_Data->init (src.m_Data->m_Path, *(src.m_Data)); } else { m_Data->init(src.m_Data->m_Path,0); } } } tqStatus::tqStatus (const TQString&path, svn_wc_status2_t * status) : m_Data(new Status_private()) { m_Data->init(path, status); } tqStatus::tqStatus (const char*path, svn_wc_status2_t * status) : m_Data(new Status_private()) { m_Data->init(TQString::FROMUTF8(path),status); } tqStatus::tqStatus(const TQString&url,const DirEntryPtr&src) : m_Data(new Status_private()) { m_Data->init(url,src); } tqStatus::tqStatus(const TQString&url,const InfoEntry&src) : m_Data(new Status_private()) { m_Data->init(url,src); } tqStatus::~tqStatus () { delete m_Data; } tqStatus & tqStatus::operator=(const tqStatus & status) { if (this == &status) return *this; if (status.m_Data) { m_Data->init (status.m_Data->m_Path, *(status.m_Data)); } else { m_Data->init(status.m_Data->m_Path,0); } return *this; } const LockEntry& tqStatus::lockEntry () const { return m_Data->m_Lock; } svn_wc_status_kind tqStatus::reposProptqStatus () const { return m_Data->_repos_prop_status; } svn_wc_status_kind tqStatus::reposTexttqStatus () const { return m_Data->_repos_text_status; } bool tqStatus::isSwitched () const { return m_Data->_switched != 0; } bool tqStatus::isCopied () const { return m_Data->_copied; } bool tqStatus::isLocked () const { return m_Data->m_Lock.Locked(); } bool tqStatus::isModified()const { return texttqStatus()==svn_wc_status_modified||proptqStatus()==svn_wc_status_modified ||texttqStatus ()==svn_wc_status_replaced; } bool tqStatus::isRealVersioned()const { return m_Data->m_hasReal; } bool tqStatus::isVersioned () const { return m_Data->m_isVersioned; } svn_wc_status_kind tqStatus::proptqStatus () const { return m_Data->_prop_status; } svn_wc_status_kind tqStatus::texttqStatus () const { return m_Data->_text_status; } const Entry& tqStatus::entry () const { return m_Data->m_entry; } const TQString& tqStatus::path () const { return m_Data->m_Path; } bool tqStatus::validRepostqStatus()const { return reposTexttqStatus()!=svn_wc_status_none||reposProptqStatus()!=svn_wc_status_none; } bool tqStatus::validLocaltqStatus()const { return texttqStatus()!=svn_wc_status_none||proptqStatus()!=svn_wc_status_none; } }