Initial work on remote management
FossilOrigin-Name: 13d3a5222dfe24a33a72efffff0ecb0b5bfefe73
This commit is contained in:
parent
eb564e533f
commit
86af187c23
9
fuel.pro
9
fuel.pro
@ -58,7 +58,8 @@ SOURCES += src/main.cpp\
|
||||
src/Fossil.cpp \
|
||||
src/Workspace.cpp \
|
||||
src/SearchBox.cpp \
|
||||
src/Settings.cpp
|
||||
src/Settings.cpp \
|
||||
src/RemoteDialog.cpp
|
||||
|
||||
HEADERS += src/MainWindow.h \
|
||||
src/CommitDialog.h \
|
||||
@ -75,7 +76,8 @@ HEADERS += src/MainWindow.h \
|
||||
src/Fossil.h \
|
||||
src/Workspace.h \
|
||||
src/SearchBox.h \
|
||||
src/Settings.h
|
||||
src/Settings.h \
|
||||
src/RemoteDialog.h
|
||||
|
||||
FORMS += ui/MainWindow.ui \
|
||||
ui/CommitDialog.ui \
|
||||
@ -84,7 +86,8 @@ FORMS += ui/MainWindow.ui \
|
||||
ui/FslSettingsDialog.ui \
|
||||
ui/CloneDialog.ui \
|
||||
ui/BrowserWidget.ui \
|
||||
ui/RevisionDialog.ui
|
||||
ui/RevisionDialog.ui \
|
||||
ui/RemoteDialog.ui
|
||||
|
||||
RESOURCES += \
|
||||
rsrc/resources.qrc
|
||||
|
24
manifest
24
manifest
@ -1,5 +1,5 @@
|
||||
C Removed\sCreate\sStash\sfrom\stoolbar\nChanged\s"Open\sContaining"\sicon\nMinor\scosmetic\schanges
|
||||
D 2015-05-24T18:37:29.618
|
||||
C Initial\swork\son\sremote\smanagement
|
||||
D 2015-05-25T12:27:27.983
|
||||
F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35
|
||||
F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b
|
||||
F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b
|
||||
@ -15,7 +15,7 @@ F dist/win/fuel.iss ef3558dbba409eb194938b930377fc9ee27d319e
|
||||
F doc/Building.txt 17b43fa23da764b5d1b828cc48c5a95e612bbd8f
|
||||
F doc/Changes.txt b03302545e4a6c0b16a30d623a7627f8aef65ef6
|
||||
F doc/License.txt 4cc77b90af91e615a64ae04893fdffa7939db84c
|
||||
F fuel.pro b010c4ee3093112003a9d27045927efce5985dab
|
||||
F fuel.pro 641f62716fc90c9430f5c4cbc415c9d63f833a52
|
||||
F intl/convert.bat 4222ae403418381452b843929d15259ea9850ab1 x
|
||||
F intl/convert.sh 2ca2179ff53e727f241925b75e19182607883c45 x
|
||||
F intl/de_DE.ts e2faceab920ac60c97bbc6fba038e261d51fc741
|
||||
@ -202,8 +202,10 @@ F src/FslSettingsDialog.cpp f5a34a70ecb0560d2b6eea6bf27e42048548aedd
|
||||
F src/FslSettingsDialog.h dfe2a61884a55a74cbb9206b6f6b482b979725e7
|
||||
F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c
|
||||
F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261
|
||||
F src/MainWindow.cpp 4cbfa1fdf3092b97649711388576230e4808d50e
|
||||
F src/MainWindow.h a848462f21423b5c1e0c218cab1805c308299607
|
||||
F src/MainWindow.cpp 717ccd4c91127a08d8cc71d46d8df1a40db62146
|
||||
F src/MainWindow.h 6cb82a4fc337793a339ffef4728e6d30b7b74305
|
||||
F src/RemoteDialog.cpp f0ee2d05e6d6c079f2a00bb551431407eb9d783d
|
||||
F src/RemoteDialog.h 364e867210ec55d8d6d23d0c8078f2517b2389ec
|
||||
F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c
|
||||
F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73
|
||||
F src/SearchBox.cpp d4209c575baa9933e1ce5ed376e785b289a145ba
|
||||
@ -224,10 +226,14 @@ F ui/CloneDialog.ui 4886e7d4f258ea8b852b5eefc860396e35145712
|
||||
F ui/CommitDialog.ui aea77347eef82b6b591f31fb058a1bb96193c728
|
||||
F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d
|
||||
F ui/FslSettingsDialog.ui 042717833d8efea905b4fc380bad580be809717d
|
||||
F ui/MainWindow.ui 2d36b1ba9886356802f2cddf12c4cabb5ee1acde
|
||||
F ui/MainWindow.ui 72d363caef1a9ce0484509cdf3e5f924af363381
|
||||
F ui/RemoteDialog.ui aa738503e4f6625ed8d7cc46169a319a39b0e575
|
||||
F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd
|
||||
F ui/SettingsDialog.ui 4c480cd595a32664d01c85bf74845c4282fc0068
|
||||
P 97d0d1e2408832e1fc8b532e059b2141afd9ac55
|
||||
R 8f806c4029c039de40ed9c8c7d5c5dca
|
||||
P 7ebac37b3255e6721889c070b7327a96c63b6c97
|
||||
R 70bbd6d1fd63555631752f47198d7051
|
||||
T *branch * remote-management
|
||||
T *sym-remote-management *
|
||||
T -sym-new-workspace *
|
||||
U kostas
|
||||
Z 44ccd8fda388c2e574389286ae9da408
|
||||
Z a9dba47682969d430cd680d884c75123
|
||||
|
@ -1 +1 @@
|
||||
7ebac37b3255e6721889c070b7327a96c63b6c97
|
||||
13d3a5222dfe24a33a72efffff0ecb0b5bfefe73
|
@ -19,6 +19,7 @@
|
||||
#include "FileActionDialog.h"
|
||||
#include "CloneDialog.h"
|
||||
#include "RevisionDialog.h"
|
||||
#include "RemoteDialog.h"
|
||||
#include "Utils.h"
|
||||
|
||||
#define REVISION_LATEST "Latest revision"
|
||||
@ -58,7 +59,7 @@ struct WorkspaceItem
|
||||
TYPE_TAGS,
|
||||
TYPE_TAG,
|
||||
TYPE_REMOTES,
|
||||
TYPE_SETTINGS
|
||||
TYPE_REMOTE,
|
||||
};
|
||||
|
||||
WorkspaceItem()
|
||||
@ -174,6 +175,10 @@ MainWindow::MainWindow(Settings &_settings, QWidget *parent, QString *workspaceP
|
||||
menuBranches->addAction(ui->actionMergeBranch);
|
||||
menuBranches->addAction(ui->actionUpdate);
|
||||
|
||||
// RemotesMenu
|
||||
menuRemotes = new QMenu(this);
|
||||
menuRemotes->addAction(ui->actionEditRemote);
|
||||
|
||||
// Recent Workspaces
|
||||
// Locate a sequence of two separator actions in file menu
|
||||
QList<QAction*> file_actions = ui->menuFile->actions();
|
||||
@ -800,20 +805,19 @@ void MainWindow::updateWorkspaceView()
|
||||
stashes->appendRow(stash);
|
||||
}
|
||||
|
||||
#if 0
|
||||
#if 1
|
||||
// Remotes
|
||||
QStandardItem *remotes = new QStandardItem(getInternalIcon(":icons/icon-item-remote"), tr("Remotes"));
|
||||
remotes->setData(WorkspaceItem(WorkspaceItem::TYPE_REMOTES, ""), ROLE_WORKSPACE_ITEM);
|
||||
remotes->setEditable(false);
|
||||
getWorkspace().getTreeModel().appendRow(remotes);
|
||||
#endif
|
||||
{
|
||||
QStandardItem *default_url = new QStandardItem(getInternalIcon(":icons/icon-item-remote"), tr("Default"));
|
||||
QString url = settings.GetFossilValue(FOSSIL_SETTING_REMOTE_URL).toString();
|
||||
default_url->setData(WorkspaceItem(WorkspaceItem::TYPE_REMOTE, url), ROLE_WORKSPACE_ITEM);
|
||||
remotes->appendRow(default_url);
|
||||
}
|
||||
|
||||
#if 0 // Unimplemented for now
|
||||
// Settings
|
||||
QStandardItem *settings = new QStandardItem(getInternalIcon(":icons/icon-action-settings"), tr("Settings"));
|
||||
settings->setData(WorkspaceItem(WorkspaceItem::TYPE_SETTINGS, ""), ROLE_WORKSPACE_ITEM);
|
||||
settings->setEditable(false);
|
||||
getWorkspace().getTreeModel().appendRow(settings);
|
||||
#endif
|
||||
|
||||
// Expand previously selected nodes
|
||||
@ -1233,9 +1237,26 @@ void MainWindow::getSelectionStashes(QStringList &stashNames)
|
||||
QString name = mi.model()->data(mi, Qt::DisplayRole).toString();
|
||||
stashNames.append(name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
void MainWindow::getSelectionRemotes(QStringList &remoteUrls)
|
||||
{
|
||||
QModelIndexList selection = ui->workspaceTreeView->selectionModel()->selectedIndexes();
|
||||
|
||||
foreach(const QModelIndex &mi, selection)
|
||||
{
|
||||
QVariant data = mi.model()->data(mi, ROLE_WORKSPACE_ITEM);
|
||||
Q_ASSERT(data.isValid());
|
||||
WorkspaceItem tv = data.value<WorkspaceItem>();
|
||||
|
||||
if(tv.Type != WorkspaceItem::TYPE_REMOTE)
|
||||
continue;
|
||||
|
||||
QString url = tv.Value;
|
||||
remoteUrls.append(url);
|
||||
}
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
bool MainWindow::diffFile(const QString &repoFile)
|
||||
{
|
||||
@ -2187,6 +2208,8 @@ void MainWindow::on_workspaceTreeView_customContextMenuRequested(const QPoint &)
|
||||
menu = menuTags;
|
||||
else if (tv.Type == WorkspaceItem::TYPE_BRANCH || tv.Type == WorkspaceItem::TYPE_BRANCHES)
|
||||
menu = menuBranches;
|
||||
else if (tv.Type == WorkspaceItem::TYPE_REMOTE)
|
||||
menu = menuRemotes;
|
||||
|
||||
if(menu)
|
||||
{
|
||||
@ -2477,3 +2500,17 @@ void MainWindow::onSearch()
|
||||
searchBox->setFocus();
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
void MainWindow::on_actionEditRemote_triggered()
|
||||
{
|
||||
QStringList remotes;
|
||||
getSelectionRemotes(remotes);
|
||||
|
||||
if(remotes.empty())
|
||||
return;
|
||||
|
||||
QUrl url(remotes.first());
|
||||
|
||||
if(!RemoteDialog::run(this, url))
|
||||
return;
|
||||
}
|
||||
|
@ -40,6 +40,7 @@ private:
|
||||
void getDirViewSelection(QStringList &filenames, int includeMask=WorkspaceFile::TYPE_ALL, bool allIfEmpty=false);
|
||||
void getSelectionStashes(QStringList &stashNames);
|
||||
void getSelectionPaths(stringset_t &paths);
|
||||
void getSelectionRemotes(QStringList& remoteUrls);
|
||||
void getAllFilenames(QStringList &filenames, int includeMask=WorkspaceFile::TYPE_ALL);
|
||||
bool startUI();
|
||||
void stopUI();
|
||||
@ -124,6 +125,7 @@ private slots:
|
||||
void on_actionDeleteTag_triggered();
|
||||
void on_actionCreateBranch_triggered();
|
||||
void on_actionMergeBranch_triggered();
|
||||
void on_actionEditRemote_triggered();
|
||||
|
||||
private:
|
||||
class MainWinUICallback : public UICallback
|
||||
@ -171,6 +173,7 @@ private:
|
||||
QMenu *menuStashes;
|
||||
QMenu *menuTags;
|
||||
QMenu *menuBranches;
|
||||
QMenu *menuRemotes;
|
||||
|
||||
bool operationAborted;
|
||||
stringset_t selectedDirs; // The directory selected in the tree
|
||||
|
90
src/RemoteDialog.cpp
Normal file
90
src/RemoteDialog.cpp
Normal file
@ -0,0 +1,90 @@
|
||||
#include "RemoteDialog.h"
|
||||
#include "ui_RemoteDialog.h"
|
||||
#include <QFileDialog>
|
||||
#include <QDir>
|
||||
#include <QMessageBox>
|
||||
#include <QClipboard>
|
||||
#include <QUrl>
|
||||
#include "Utils.h"
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
RemoteDialog::RemoteDialog(QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::RemoteDialog)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
RemoteDialog::~RemoteDialog()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
bool RemoteDialog::run(QWidget *parent, QUrl &url)
|
||||
{
|
||||
RemoteDialog dlg(parent);
|
||||
|
||||
// Set URL components
|
||||
if(!url.isEmpty())
|
||||
{
|
||||
QString qq = url.toString(QUrl::PrettyDecoded|QUrl::RemoveUserInfo);
|
||||
dlg.ui->lineURL->setText(qq);
|
||||
dlg.ui->lineUserName->setText(url.userName());
|
||||
dlg.ui->linePassword->setText(url.password());
|
||||
}
|
||||
|
||||
if(dlg.exec() != QDialog::Accepted)
|
||||
return false;
|
||||
|
||||
QString urltext = dlg.ui->lineURL->text();
|
||||
|
||||
url = QUrl::fromUserInput(urltext);
|
||||
if(url.isEmpty() || !url.isValid())
|
||||
{
|
||||
QMessageBox::critical(parent, tr("Error"), tr("Invalid URL."), QMessageBox::Ok );
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!dlg.ui->lineUserName->text().trimmed().isEmpty())
|
||||
url.setUserName(dlg.ui->lineUserName->text());
|
||||
|
||||
if(!dlg.ui->linePassword->text().trimmed().isEmpty())
|
||||
url.setPassword(dlg.ui->linePassword->text());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void RemoteDialog::GetRepositoryPath(QString &pathResult)
|
||||
{
|
||||
QString filter(tr("Fossil Repository") + QString(" (*." FOSSIL_EXT ")"));
|
||||
|
||||
pathResult = QFileDialog::getSaveFileName(
|
||||
this,
|
||||
tr("Select Fossil Repository"),
|
||||
QDir::toNativeSeparators(pathResult),
|
||||
filter,
|
||||
&filter,
|
||||
QFileDialog::DontConfirmOverwrite);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void RemoteDialog::on_btnSelectSourceRepo_clicked()
|
||||
{
|
||||
QString path = ui->lineURL->text();
|
||||
GetRepositoryPath(path);
|
||||
|
||||
if(path.trimmed().isEmpty())
|
||||
return;
|
||||
|
||||
if(!QFile::exists(path))
|
||||
{
|
||||
QMessageBox::critical(this, tr("Error"), tr("Invalid Repository File."), QMessageBox::Ok);
|
||||
return;
|
||||
}
|
||||
|
||||
ui->lineURL->setText(QDir::toNativeSeparators(path));
|
||||
}
|
||||
|
29
src/RemoteDialog.h
Normal file
29
src/RemoteDialog.h
Normal file
@ -0,0 +1,29 @@
|
||||
#ifndef REMOTEDIALOG_H
|
||||
#define REMOTEDIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
namespace Ui {
|
||||
class RemoteDialog;
|
||||
}
|
||||
|
||||
class RemoteDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit RemoteDialog(QWidget *parent = 0);
|
||||
~RemoteDialog();
|
||||
|
||||
static bool run(QWidget *parent, class QUrl &url);
|
||||
|
||||
private slots:
|
||||
void on_btnSelectSourceRepo_clicked();
|
||||
|
||||
private:
|
||||
void GetRepositoryPath(QString &pathResult);
|
||||
|
||||
Ui::RemoteDialog *ui;
|
||||
};
|
||||
|
||||
#endif // REMOTEDIALOG_H
|
@ -978,6 +978,14 @@
|
||||
<string>F&ossil Settings</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionEditRemote">
|
||||
<property name="text">
|
||||
<string>Edit Remote</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Edit Remote URL</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<layoutdefault spacing="6" margin="11"/>
|
||||
<customwidgets>
|
||||
|
151
ui/RemoteDialog.ui
Normal file
151
ui/RemoteDialog.ui
Normal file
@ -0,0 +1,151 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>RemoteDialog</class>
|
||||
<widget class="QDialog" name="RemoteDialog">
|
||||
<property name="windowModality">
|
||||
<enum>Qt::WindowModal</enum>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>478</width>
|
||||
<height>142</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Remote Repository</string>
|
||||
</property>
|
||||
<property name="modal">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QFormLayout" name="formLayout">
|
||||
<property name="fieldGrowthPolicy">
|
||||
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_1">
|
||||
<property name="text">
|
||||
<string>URL</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_11">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="lineURL">
|
||||
<property name="toolTip">
|
||||
<string>The URL of the source repository</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btnSelectSourceRepo">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>24</width>
|
||||
<height>24</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>User Name</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="lineUserName">
|
||||
<property name="toolTip">
|
||||
<string>The user name used to access the remote repository. Leave blank if not required</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Password</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLineEdit" name="linePassword">
|
||||
<property name="toolTip">
|
||||
<string>The password used to access the remote repository. Leave blank if not required</string>
|
||||
</property>
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::Password</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<tabstops>
|
||||
<tabstop>lineURL</tabstop>
|
||||
<tabstop>btnSelectSourceRepo</tabstop>
|
||||
<tabstop>lineUserName</tabstop>
|
||||
<tabstop>linePassword</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>RemoteDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>RemoteDialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
Loading…
x
Reference in New Issue
Block a user