From 9ac98a402c60a803578779efa7e6513e37bce448 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 15 Jan 2010 12:24:06 +0100 Subject: 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. --- src/plugins/git/gitutils.cpp | 104 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 src/plugins/git/gitutils.cpp (limited to 'src/plugins/git/gitutils.cpp') 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 +#include +#include +#include + +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 + * +subject): +\code +stash@{1}: WIP on : +stash@{2}: On : +\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(&dialog)) + le->setMinimumWidth(500); + if (dialog.exec() != QDialog::Accepted) + return false; + *s = dialog.textValue(); + return true; +} +} // namespace Internal +} // namespace Git -- cgit v1.2.1