diff options
author | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2010-01-15 12:24:06 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2010-01-15 12:28:22 +0100 |
commit | 9ac98a402c60a803578779efa7e6513e37bce448 (patch) | |
tree | 3c412d34b42060a185e3b1c2327dc92cd6c68852 /src/plugins/git/gitutils.cpp | |
parent | cbaa9b9fc064ef4c64a6a0842aa73743c1fa597e (diff) | |
download | qt-creator-9ac98a402c60a803578779efa7e6513e37bce448.tar.gz |
VCS[git]: Add support for stashes.
Add non-modal stash management dialog and additional menu option
"Stash snapshot..." to stash away changes prompting for a description,
which will immediately replay the stash (take snapshot and continue
working).
Add interface to IVersionControl for creating/restoring/deleting
snapshots for backup/complex undo operations (currently supported
by git only). Add test options to VCSBasePlugin.
Clean up and extend git client accordingly.
Diffstat (limited to 'src/plugins/git/gitutils.cpp')
-rw-r--r-- | src/plugins/git/gitutils.cpp | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/src/plugins/git/gitutils.cpp b/src/plugins/git/gitutils.cpp new file mode 100644 index 0000000000..5c27a64f5b --- /dev/null +++ b/src/plugins/git/gitutils.cpp @@ -0,0 +1,104 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#include "gitutils.h" + +#include <QtCore/QDebug> +#include <QtCore/QStringList> +#include <QtGui/QInputDialog> +#include <QtGui/QLineEdit> + +namespace Git { +namespace Internal { + +QDebug operator<<(QDebug d, const Stash &s) +{ + QDebug nospace = d.nospace(); + nospace << "name=" << s.name << " branch=" << s.branch << " message=" << s.message; + return d; +} + +void Stash::clear() +{ + name.clear(); + branch.clear(); + message.clear(); +} + +/* Parse a stash line in its 2 manifestations (with message/without message containing + * <base_sha1>+subject): +\code +stash@{1}: WIP on <branch>: <base_sha1> <subject_base_sha1> +stash@{2}: On <branch>: <message> +\endcode */ + +bool Stash::parseStashLine(const QString &l) +{ + const QChar colon = QLatin1Char(':'); + const int branchPos = l.indexOf(colon); + if (branchPos < 0) + return false; + const int messagePos = l.indexOf(colon, branchPos + 1); + if (messagePos < 0) + return false; + // Name + const QString newName = l.left(branchPos); + // Branch spec + const QString branchSpec = l.mid(branchPos + 1, messagePos - branchPos - 1); + const bool emptyMessage = branchSpec.contains(QLatin1String("WIP")); // "Work in Progress or sth" + const int onIndex = branchSpec.indexOf(QLatin1String("on "), 0, Qt::CaseInsensitive); + if (onIndex == -1) + return false; + const QString newBranch = branchSpec.mid(onIndex + 3); + // Happy! + name = newName; + branch = newBranch; + if (!emptyMessage) + message = l.mid(messagePos + 2); // skip blank + return true; +} + +// Make QInputDialog play nicely, widen it a bit. +bool inputText(QWidget *parent, const QString &title, const QString &prompt, QString *s) +{ + QInputDialog dialog(parent); + dialog.setWindowFlags(dialog.windowFlags() & ~Qt::WindowContextHelpButtonHint); + dialog.setWindowTitle(title); + dialog.setLabelText(prompt); + dialog.setTextValue(*s); + // Nasty hack: + if (QLineEdit *le = qFindChild<QLineEdit*>(&dialog)) + le->setMinimumWidth(500); + if (dialog.exec() != QDialog::Accepted) + return false; + *s = dialog.textValue(); + return true; +} +} // namespace Internal +} // namespace Git |