forked from qt-creator/qt-creator
VCS[git]: Add log repository action.
This commit is contained in:
@@ -260,6 +260,29 @@ void GitClient::status(const QString &workingDirectory)
|
||||
Qt::QueuedConnection);
|
||||
}
|
||||
|
||||
static const char graphLogFormatC[] = "%h %an %s %ci";
|
||||
|
||||
// Create a graphical log.
|
||||
void GitClient::graphLog(const QString &workingDirectory)
|
||||
{
|
||||
if (Git::Constants::debug)
|
||||
qDebug() << "log" << workingDirectory;
|
||||
|
||||
QStringList arguments;
|
||||
arguments << QLatin1String("log") << QLatin1String(noColorOption);
|
||||
|
||||
if (m_settings.logCount > 0)
|
||||
arguments << QLatin1String("-n") << QString::number(m_settings.logCount);
|
||||
arguments << (QLatin1String("--pretty=format:") + QLatin1String(graphLogFormatC))
|
||||
<< QLatin1String("--topo-order") << QLatin1String("--graph");
|
||||
|
||||
const QString title = tr("Git Log");
|
||||
const QString editorId = QLatin1String(Git::Constants::GIT_LOG_EDITOR_ID);
|
||||
const QString sourceFile = VCSBase::VCSBaseEditor::getSource(workingDirectory, QStringList());
|
||||
VCSBase::VCSBaseEditor *editor = createVCSEditor(editorId, title, sourceFile, false, "logFileName", sourceFile);
|
||||
executeGit(workingDirectory, arguments, editor);
|
||||
}
|
||||
|
||||
void GitClient::log(const QString &workingDirectory, const QStringList &fileNames, bool enableAnnotationContextMenu)
|
||||
{
|
||||
if (Git::Constants::debug)
|
||||
|
||||
@@ -79,6 +79,7 @@ public:
|
||||
const QStringList &unstagedFileNames, const QStringList &stagedFileNames= QStringList());
|
||||
|
||||
void status(const QString &workingDirectory);
|
||||
void graphLog(const QString &workingDirectory);
|
||||
void log(const QString &workingDirectory, const QStringList &fileNames,
|
||||
bool enableAnnotationContextMenu = false);
|
||||
void blame(const QString &workingDirectory, const QString &fileName,
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
#include <QtGui/QTextCursor>
|
||||
#include <QtGui/QTextEdit>
|
||||
|
||||
#define CHANGE_PATTERN_8C "[a-f0-9]{8,8}"
|
||||
#define CHANGE_PATTERN_8C "[a-f0-9]{7,8}"
|
||||
#define CHANGE_PATTERN_40C "[a-f0-9]{40,40}"
|
||||
|
||||
namespace Git {
|
||||
|
||||
@@ -120,6 +120,7 @@ GitPlugin::GitPlugin() :
|
||||
m_blameAction(0),
|
||||
m_logProjectAction(0),
|
||||
m_undoFileAction(0),
|
||||
m_logRepositoryAction(0),
|
||||
m_undoRepositoryAction(0),
|
||||
m_showAction(0),
|
||||
m_stageAction(0),
|
||||
@@ -295,9 +296,13 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
|
||||
connect(m_statusRepositoryAction, SIGNAL(triggered()), this, SLOT(statusRepository()));
|
||||
gitContainer->addAction(command);
|
||||
|
||||
m_logRepositoryAction = new QAction(tr("Log Repository"), this);
|
||||
command = actionManager->registerAction(m_logRepositoryAction, "Git.LogRepository", globalcontext);
|
||||
connect(m_logRepositoryAction, SIGNAL(triggered()), this, SLOT(logRepository()));
|
||||
gitContainer->addAction(command);
|
||||
|
||||
m_undoRepositoryAction = new QAction(tr("Undo Repository Changes"), this);
|
||||
command = actionManager->registerAction(m_undoRepositoryAction, "Git.UndoRepository", globalcontext);
|
||||
command->setAttribute(Core::Command::CA_UpdateText);
|
||||
connect(m_undoRepositoryAction, SIGNAL(triggered()), this, SLOT(undoRepositoryChanges()));
|
||||
gitContainer->addAction(command);
|
||||
|
||||
@@ -448,6 +453,13 @@ void GitPlugin::undoFileChanges()
|
||||
m_gitClient->revert(QStringList(state.currentFile()));
|
||||
}
|
||||
|
||||
void GitPlugin::logRepository()
|
||||
{
|
||||
const VCSBase::VCSBasePluginState state = currentState();
|
||||
QTC_ASSERT(state.hasTopLevel(), return)
|
||||
m_gitClient->graphLog(state.topLevel());
|
||||
}
|
||||
|
||||
void GitPlugin::undoRepositoryChanges()
|
||||
{
|
||||
const VCSBase::VCSBasePluginState state = currentState();
|
||||
@@ -690,7 +702,6 @@ void GitPlugin::updateActions(VCSBase::VCSBasePlugin::ActionState as)
|
||||
m_diffProjectAction->setParameter(projectName);
|
||||
m_logProjectAction->setEnabled(projectEnabled);
|
||||
m_logProjectAction->setParameter(projectName);
|
||||
m_undoRepositoryAction->setEnabled(projectEnabled);
|
||||
|
||||
const bool repositoryEnabled = currentState().hasTopLevel();
|
||||
m_diffRepositoryAction->setEnabled(repositoryEnabled);
|
||||
@@ -698,6 +709,8 @@ void GitPlugin::updateActions(VCSBase::VCSBasePlugin::ActionState as)
|
||||
m_branchListAction->setEnabled(repositoryEnabled);
|
||||
m_stashListAction->setEnabled(repositoryEnabled);
|
||||
m_stashPopAction->setEnabled(repositoryEnabled);
|
||||
m_logRepositoryAction->setEnabled(repositoryEnabled);
|
||||
m_undoRepositoryAction->setEnabled(repositoryEnabled);
|
||||
|
||||
// Prompts for repo.
|
||||
m_showAction->setEnabled(true);
|
||||
|
||||
@@ -96,6 +96,7 @@ private slots:
|
||||
void blameFile();
|
||||
void logProject();
|
||||
void undoFileChanges();
|
||||
void logRepository();
|
||||
void undoRepositoryChanges();
|
||||
void stageFile();
|
||||
void unstageFile();
|
||||
@@ -128,7 +129,9 @@ private:
|
||||
Utils::ParameterAction *m_blameAction;
|
||||
Utils::ParameterAction *m_logProjectAction;
|
||||
Utils::ParameterAction *m_undoFileAction;
|
||||
QAction *m_logRepositoryAction;
|
||||
QAction *m_undoRepositoryAction;
|
||||
|
||||
QAction *m_showAction;
|
||||
Utils::ParameterAction *m_stageAction;
|
||||
Utils::ParameterAction *m_unstageAction;
|
||||
|
||||
@@ -45,7 +45,7 @@ static const char *promptToSubmitKeyC = "PromptForSubmit";
|
||||
static const char *omitAnnotationDateKeyC = "OmitAnnotationDate";
|
||||
static const char *spaceIgnorantBlameKeyC = "SpaceIgnorantBlame";
|
||||
|
||||
enum { defaultLogCount = 10 , defaultTimeOut = 30};
|
||||
enum { defaultLogCount = 100 , defaultTimeOut = 30};
|
||||
|
||||
namespace Git {
|
||||
namespace Internal {
|
||||
|
||||
Reference in New Issue
Block a user