📄 svn_commands.h
字号:
/*************************************************************************** * Copyright (C) 2004 by Eugene Bort * * esvn@umputun.com * * * * 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. * * * ***************************************************************************/#ifndef SVN_COMMANDS_H#define SVN_COMMANDS_H#if ( _WINDOWS || ESVN_WIN )#include <windows.h>#else#include <unistd.h>#endif#include <qobject.h>#include <qtextbrowser.h> #include <qprocess.h>#include <qmessagebox.h>#include <qvbox.h>#include <cstdlib>#include <iostream>#include <qdialog.h> #include <qlabel.h> #include <qtextcodec.h>#include <qapplication.h> #include <qlineedit.h> #include <qcursor.h> #include <qeventloop.h>#include "dlg_busy.h"#include "dlg_auth.h"#include "options.h"#include "esvn_utils.h"#include <vector>using namespace std;class C_SvnCommands : public QWidget { Q_OBJECT public: enum {SC_WAIT = 0x0001, SC_APPEND_USER_PASS=0x0002, SC_HIDE=0x0004, SC_DISABLE_CURSOR_CHANGE=0x0008, SC_REFRESH = 0x0010}; C_SvnCommands(QTextBrowser* out_win, QWidget *parent=NULL) : needs_refresh_(false), out_win_(out_win), show_enable_(true), parent_(parent) { dlg_busy_ = new dlg_busy(this); dlg_auth_ = new dlg_auth(this); proc = new QProcess(this); svn_ = "svn"; is_ready_for_last_command_ = false; user_ = ""; passw_ = ""; connect(proc, SIGNAL(readyReadStdout()), this, SLOT(readFromStdout()) ); connect(proc, SIGNAL(readyReadStderr()), this, SLOT(readFromStderr()) ); connect(proc, SIGNAL(processExited()), this, SLOT(procFinished()) ); }; int update(const PathSelection& selection, const QString& revision = "") { if (selection.empty()) { return 1; } QString currwd = selection[0].Path(); proc->clearArguments(); proc->addArgument(svn_); proc->addArgument("update"); if (revision != "") { proc->addArgument("-r"); proc->addArgument(revision); } for (size_t i=0; i<selection.size(); i++) proc->addArgument(selection[i].Name()); return execCommand(currwd, SC_REFRESH | SC_APPEND_USER_PASS | SC_WAIT); } int log(const C_Path& file_dir_name, bool is_verbouse, bool stop_on_copy, QStringList& out_txt) { // Note that svn log command supports multiple arguments // but there seems to be no use for this feature. -- garrison proc->clearArguments(); proc->addArgument(svn_); proc->addArgument("log"); if (is_verbouse) proc->addArgument("--verbose"); if (stop_on_copy) proc->addArgument("--stop-on-copy"); proc->addArgument(file_dir_name.Name()); return execCommand(file_dir_name.Path(), SC_APPEND_USER_PASS, &out_txt); } int status(const PathSelection& selection) { if (selection.empty()) { return 1; } QString currwd = selection[0].Path(); proc->clearArguments(); proc->addArgument(svn_); proc->addArgument("status"); for (size_t i=0; i<selection.size(); i++) proc->addArgument(selection[i].Name()); proc->addArgument("--verbose"); return execCommand(currwd, SC_APPEND_USER_PASS | SC_WAIT); } int status(const C_Path& file_dir_name, bool show_updates, QStringList& out_txt) { proc->clearArguments(); proc->addArgument(svn_); proc->addArgument("status"); proc->addArgument(file_dir_name.Name()); proc->addArgument("--quiet"); if (show_updates) proc->addArgument("--show-updates"); return execCommand(file_dir_name.Path(), SC_APPEND_USER_PASS | SC_WAIT, &out_txt); } int status_curr(const QString& currwd, const QString& file_dir_name, QStringList& out_txt) { proc->clearArguments(); proc->addArgument(svn_); proc->addArgument("status"); proc->addArgument(file_dir_name); proc->addArgument("-v"); proc->addArgument("-N"); proc->addArgument("--show-updates"); return execCommand(currwd, SC_APPEND_USER_PASS | SC_WAIT | SC_DISABLE_CURSOR_CHANGE | SC_HIDE, &out_txt); } int status(const QString& currwd, const QString& file_dir_name, QStringList& out_txt) { //cout << "status: " << file_dir_name << endl; proc->clearArguments(); proc->addArgument(svn_); proc->addArgument("status"); proc->addArgument(file_dir_name); proc->addArgument("--verbose"); return execCommand(currwd, SC_APPEND_USER_PASS | SC_WAIT | SC_DISABLE_CURSOR_CHANGE, &out_txt); } int info(const PathSelection& selection, QStringList& out_txt) { if (selection.empty()) { return 1; } QString currwd = selection[0].Path(); proc->clearArguments(); proc->addArgument(svn_); proc->addArgument("info"); for (size_t i=0; i<selection.size(); i++) proc->addArgument(selection[i].Name()); return execCommand(currwd, 0, &out_txt); } int commit(const QString& currwd, const QString& file_dir_name, QString msg) { proc->clearArguments(); proc->addArgument(svn_); proc->addArgument("commit"); if (msg == "") msg = "nomsg"; proc->addArgument("-m"); proc->addArgument(msg); proc->addArgument(file_dir_name); return execCommand(currwd, SC_REFRESH | SC_WAIT | SC_APPEND_USER_PASS); } int commit(const QString& currwd, const vector<QString>& files_dir, QString msg) { proc->clearArguments(); proc->addArgument(svn_); proc->addArgument("commit"); if (msg == "") msg = "nomsg"; proc->addArgument("-m"); proc->addArgument(msg); for (size_t i=0; i<files_dir.size(); i++) proc->addArgument(files_dir[i]); return execCommand(currwd, SC_REFRESH | SC_APPEND_USER_PASS | SC_WAIT); } int cleanup(const C_Path& file_dir_path) { proc->clearArguments(); proc->addArgument(svn_); proc->addArgument("cleanup"); proc->addArgument(file_dir_path.Name()); return execCommand(file_dir_path.Path(), SC_WAIT); } int revert(const PathSelection& selection, bool recursive) { if (selection.empty()) { return 1; } QString currwd = selection[0].Path(); proc->clearArguments(); proc->addArgument(svn_); proc->addArgument("revert"); if (recursive) proc->addArgument("--recursive"); for (size_t i=0; i<selection.size(); i++) proc->addArgument(selection[i].Name()); return execCommand(currwd, SC_REFRESH | SC_WAIT); } int resolve(const C_Path& pathname) { proc->clearArguments(); proc->addArgument(svn_); proc->addArgument("resolved"); proc->addArgument(pathname.Name()); return execCommand(pathname.Path(), SC_REFRESH | SC_WAIT); } int add(const PathSelection& selection, bool recursive) { if (selection.empty()) { return 1; } QString currwd = selection[0].Path(); proc->clearArguments(); proc->addArgument(svn_); proc->addArgument("add"); if (!recursive) proc->addArgument("-N"); for (size_t i=0; i<selection.size(); i++) proc->addArgument(selection[i].Name()); return execCommand(currwd, SC_REFRESH | SC_WAIT); } int del(const PathSelection& selection) { if (selection.empty()) { return 1; } QString currwd = selection[0].Path(); proc->clearArguments(); proc->addArgument(svn_); proc->addArgument("delete"); for (size_t i=0; i<selection.size(); i++) proc->addArgument(selection[i].Name()); return execCommand(currwd, SC_REFRESH | SC_APPEND_USER_PASS | SC_WAIT); } int copy(const QString& currwd, const QString& src, const QString &dst, const QString& msg, const QString& rev="") { proc->clearArguments(); proc->addArgument(svn_); proc->addArgument("copy"); proc->addArgument(src); proc->addArgument(dst); proc->addArgument("-m"); if (msg == "") proc->addArgument("\"copied\""); else proc->addArgument(msg); if (rev != "") { proc->addArgument("-r"); proc->addArgument(rev); } return execCommand(currwd, SC_REFRESH | SC_APPEND_USER_PASS | SC_WAIT); } int move(const QString& currwd, const QString& src, const QString &dst, const QString& msg, const QString& rev="") { proc->clearArguments(); proc->addArgument(svn_); proc->addArgument("move"); proc->addArgument(src); proc->addArgument(dst); proc->addArgument("-m"); if (msg == "") proc->addArgument("\"moved\""); else proc->addArgument(msg); if (rev != "") { proc->addArgument("-r"); proc->addArgument(rev); } return execCommand(currwd, SC_REFRESH | SC_APPEND_USER_PASS | SC_WAIT); } int switch_cmd(const C_Path& selected, const QString& url, const QString &rev, bool non_recursive) { proc->clearArguments(); proc->addArgument(svn_); proc->addArgument("switch"); if (rev != "") { proc->addArgument("-r"); proc->addArgument(rev); } if (non_recursive) proc->addArgument("--non-recursive"); proc->addArgument(url); proc->addArgument(selected.Name()); return execCommand(selected.Path(), SC_REFRESH | SC_APPEND_USER_PASS | SC_WAIT); } int merge(const QString& currwd, const QString& file_dir_name, const QString& first, const QString &second, const QString& wcpath, bool use_rev, bool non_recursive, bool dryrun) { proc->clearArguments(); proc->addArgument(svn_); proc->addArgument("merge"); if (non_recursive) proc->addArgument("--non-recursive"); if (dryrun) proc->addArgument("--dry-run"); if (use_rev) { proc->addArgument("-r"); proc->addArgument(first+":"+second); proc->addArgument(file_dir_name); } else { proc->addArgument(first); proc->addArgument(second); } if (!wcpath.isEmpty()) proc->addArgument(wcpath); return execCommand(currwd, SC_REFRESH | SC_WAIT); } int diff(const QString& currwd, const QString& file_dir_name_1, const QString& file_dir_name_2, const QString& rev, bool use_external_cmd, bool non_recursive, bool notice_ancestry, const QString& extensions, QStringList& out_txt); int cat(const C_Path& selected, const QString& rev, QStringList& out_txt) { proc->clearArguments(); proc->addArgument(svn_); proc->addArgument("cat"); proc->addArgument(selected.Name()); if (rev != "") { proc->addArgument("-r"); proc->addArgument(rev); } return execCommand(selected.Path(), SC_APPEND_USER_PASS, &out_txt); } int blame(const C_Path& selected, const QString& rev, QStringList& out_txt) { proc->clearArguments(); proc->addArgument(svn_); proc->addArgument("blame"); proc->addArgument(selected.Name()); if (rev != "") { proc->addArgument("-r"); proc->addArgument(rev); }// proc->addArgument("--non-interactive"); return execCommand(selected.Path(), SC_APPEND_USER_PASS, &out_txt); } int checkout(const QString& currwd, const QString& url, const QString& local_path, const QString& user, const QString& passw, const QString &rev, bool non_recursive) { proc->clearArguments(); proc->addArgument(svn_); proc->addArgument("checkout"); proc->addArgument(url); proc->addArgument(local_path);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -