summaryrefslogtreecommitdiffstats
path: root/src/svnqt/commititem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/svnqt/commititem.cpp')
-rw-r--r--src/svnqt/commititem.cpp167
1 files changed, 167 insertions, 0 deletions
diff --git a/src/svnqt/commititem.cpp b/src/svnqt/commititem.cpp
new file mode 100644
index 0000000..2d97e6c
--- /dev/null
+++ b/src/svnqt/commititem.cpp
@@ -0,0 +1,167 @@
+/***************************************************************************
+ * Copyright (C) 2005-2007 by Rajko Albrecht *
+ * ral@alwins-world.de *
+ * *
+ * This program 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 program 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. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+#include "commititem.hpp"
+
+#include <svn_client.h>
+#include <svn_props.h>
+
+namespace svn {
+
+CommitItem::CommitItem(const svn_client_commit_item_t*_item)
+{
+ init();
+ if (_item) {
+ m_Path = QString::FROMUTF8(_item->path);
+ m_Kind = _item->kind;
+ m_Url = QString::FROMUTF8(_item->url);
+ if (_item->state_flags & SVN_CLIENT_COMMIT_ITEM_IS_COPY) {
+ m_CopyFromRevision = _item->revision;
+ } else {
+ m_Revision = _item->revision;
+ }
+ m_CopyFromUrl = QString::FROMUTF8(_item->copyfrom_url);
+ m_State = _item->state_flags;
+ convertprop(_item->wcprop_changes);
+ }
+}
+
+CommitItem::CommitItem(const svn_client_commit_item2_t*_item)
+{
+ init();
+
+ if (_item) {
+ m_Path = QString::FROMUTF8(_item->path);
+ m_Kind = _item->kind;
+ m_Url = QString::FROMUTF8(_item->url);
+ m_Revision = _item->revision;
+ m_CopyFromRevision = _item->copyfrom_rev;
+ m_CopyFromUrl = QString::FROMUTF8(_item->copyfrom_url);
+ m_State = _item->state_flags;
+ convertprop(_item->wcprop_changes);
+ }
+}
+
+CommitItem::CommitItem(const svn_client_commit_item3_t*_item)
+{
+ init();
+
+ if (_item) {
+#if ((SVN_VER_MAJOR == 1) && (SVN_VER_MINOR >= 5)) || (SVN_VER_MAJOR > 1)
+ m_Path = QString::FROMUTF8(_item->path);
+ m_Kind = _item->kind;
+ m_Url = QString::FROMUTF8(_item->url);
+ m_Revision = _item->revision;
+ m_CopyFromRevision = _item->copyfrom_rev;
+ m_CopyFromUrl = QString::FROMUTF8(_item->copyfrom_url);
+ m_State = _item->state_flags;
+ convertprop(_item->incoming_prop_changes);
+ if (_item->outgoing_prop_changes)
+ {
+ convertprop(_item->outgoing_prop_changes);
+ }
+#endif
+ }
+}
+
+void CommitItem::convertprop(apr_array_header_t * list)
+{
+ if (!list) {
+ m_CommitProperties.clear();
+ return;
+ }
+ for (int j = 0; j < list->nelts; ++j) {
+ svn_prop_t * item = ((svn_prop_t **)list->elts)[j];
+ if (!item) continue;
+ m_CommitProperties[QString::FROMUTF8(item->name)]=QString::FROMUTF8(item->value->data,item->value->len);
+ }
+}
+
+void CommitItem::init()
+{
+ m_Path=m_Url=m_CopyFromUrl = QString::null;
+ m_Kind = svn_node_unknown;
+ m_Revision=m_CopyFromRevision = -1;
+ m_State = 0;
+ m_CommitProperties.clear();
+}
+
+CommitItem::~CommitItem()
+{
+}
+
+const QString& CommitItem::path()const
+{
+ return m_Path;
+}
+
+const QString& CommitItem::url()const
+{
+ return m_Url;
+}
+
+const QString& CommitItem::copyfromurl()const
+{
+ return m_CopyFromUrl;
+}
+
+const PropertiesMap& CommitItem::properties()const
+{
+ return m_CommitProperties;
+}
+
+svn_revnum_t CommitItem::revision()const
+{
+ return m_Revision;
+}
+
+svn_revnum_t CommitItem::copyfromrevision()const
+{
+ return m_CopyFromRevision;
+}
+
+svn_node_kind_t CommitItem::kind()const
+{
+ return m_Kind;
+}
+
+apr_byte_t CommitItem::state()const
+{
+ return m_State;
+}
+
+char CommitItem::actionType()const
+{
+ char r=0;
+ if (m_State & SVN_CLIENT_COMMIT_ITEM_IS_COPY) {
+ r = 'C';
+ } else if (m_State & SVN_CLIENT_COMMIT_ITEM_ADD){
+ r = 'A';
+ } else if (m_State & SVN_CLIENT_COMMIT_ITEM_DELETE){
+ r = 'D';
+ } else if (m_State & SVN_CLIENT_COMMIT_ITEM_PROP_MODS ||
+ m_State & SVN_CLIENT_COMMIT_ITEM_TEXT_MODS){
+ r = 'M';
+ } else if (m_State & SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN){
+ r = 'L';
+ }
+ return r;
+}
+
+}