From 248788f0a126b1d712c498594a67e5f66dbe97a1 Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Tue, 15 Oct 2013 13:39:04 +0300 Subject: [PATCH 01/23] Fixed bug in package build script --- build_package.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build_package.sh b/build_package.sh index c53f9bf48..a89de00ea 100644 --- a/build_package.sh +++ b/build_package.sh @@ -21,8 +21,8 @@ echo =========================== echo copy source dir : BUILD_DIR=$HOME_DIR/redis-desktop-manager-$TAG -rm -fR $BUILD_DIR -rm -f $HOME_DIR/redis-desktop* +rm -fR $BUILD_DIR/* +rm -fR $HOME_DIR/redis-desktop* mkdir $BUILD_DIR cp -Rf /vagrant/redis-desktop-manager/* $BUILD_DIR From 6232d5a163772a344d308f0537da36b79fa71e4e Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Tue, 15 Oct 2013 13:39:37 +0300 Subject: [PATCH 02/23] Refactored updater notifications --- redis-desktop-manager/forms/demo.ui | 25 ------------------------- redis-desktop-manager/source/demo.cpp | 3 ++- 2 files changed, 2 insertions(+), 26 deletions(-) diff --git a/redis-desktop-manager/forms/demo.ui b/redis-desktop-manager/forms/demo.ui index 68acbf880..34a557f08 100644 --- a/redis-desktop-manager/forms/demo.ui +++ b/redis-desktop-manager/forms/demo.ui @@ -408,31 +408,6 @@ aa|bb Either aa or bb. true - - - - 20 - 130 - 511 - 21 - - - - - 0 - 0 - - - - - - - true - - - true - - diff --git a/redis-desktop-manager/source/demo.cpp b/redis-desktop-manager/source/demo.cpp index c0ab482e7..00af569f5 100644 --- a/redis-desktop-manager/source/demo.cpp +++ b/redis-desktop-manager/source/demo.cpp @@ -323,7 +323,8 @@ void MainWin::OnEditConnection() void MainWin::OnNewUpdateAvailable(QString &url) { - ui.newUpdateAvailableLabel->setText(QString("
New update available: %1
").arg(url)); + QMessageBox::information(this, "New update available", + QString("Please download new version of Redis Desktop Manager: %1").arg(url)); } void MainWin::OnImportConnectionsClick() From be07f5d888b3dc3b8619c38f91c55249b4f5a6a5 Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Wed, 16 Oct 2013 09:56:11 +0300 Subject: [PATCH 03/23] Updated vm configs --- Vagrantfile | 13 ++++++++++--- install_debi7.sh | 22 +++++++++++----------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/Vagrantfile b/Vagrantfile index dde377e53..0a91e6802 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -27,11 +27,18 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| debi6.vm.provision :shell, :path => "install_ubuntu.sh" end - #debian 7 - config.vm.define "debi7" do |debi7| - debi7.vm.box = "debi7" + #debian 7 x64 + config.vm.define "debi7" do |debi7|32 + debi7.vm.box = "debi7_i386" debi7.vm.box_url = "https://s3-eu-west-1.amazonaws.com/ffuenf-vagrant-boxes/debian/debian-7.1.0-amd64.box" debi7.vm.provision :shell, :path => "install_debi7.sh" end + #debian 7 x86 + config.vm.define "debi7_32" do |debi7_32| + debi7_32.vm.box = "debi7_i386" + debi7_32.vm.box_url = "https://s3-eu-west-1.amazonaws.com/ffuenf-vagrant-boxes/debian/debian-7.1.0-amd64.box" + debi7_32.vm.provision :shell, :path => "install_debi7.sh" + end + end diff --git a/install_debi7.sh b/install_debi7.sh index 203c2fd3c..345ce65be 100644 --- a/install_debi7.sh +++ b/install_debi7.sh @@ -1,17 +1,17 @@ #!/bin/sh -#sudo apt-get update -#sudo apt-get install git python perl -y -#sudo apt-get install libssl0.9.8 -y -#sudo apt-get install "^libxcb.*" libx11-xcb-dev libglu1-mesa-dev libxrender-dev -y -#sudo apt-get install libatspi-dev -y -#sudo apt-get install libdbus-1-dev -y -#sudo apt-get install libxext-dev -y -#sudo apt-get install g++ -y +sudo apt-get update +sudo apt-get install git python perl -y +sudo apt-get install libssl-dev -y +sudo apt-get install "^libxcb.*" libx11-xcb-dev libglu1-mesa-dev libxrender-dev -y +sudo apt-get install libatspi-dev -y +sudo apt-get install libdbus-1-dev -y +sudo apt-get install libxext-dev -y +sudo apt-get install g++ -y #setup build env -#sudo apt-get install build-essential devscripts ubuntu-dev-tools debhelper \ -# dh-make diff patch gnupg fakeroot lintian pbuilder -y +sudo apt-get install build-essential devscripts ubuntu-dev-tools debhelper \ + dh-make diffutils patch gnupg fakeroot lintian pbuilder -y cd /home/vagrant @@ -36,7 +36,7 @@ fi cd ./qt-everywhere-opensource-src-5.1.1 -sudo ./configure -opensource -qt-libpng -qt-libjpeg -qt-xcb -qt-xkbcommon -no-kms -no-opengl -dbus-linked -openssl-linked -nomake examples -no-javascript-jit -nomake tests -confirm-license +sudo ./configure -opensource -qt-libpng -qt-libjpeg -qt-xcb -qt-xkbcommon -no-kms -no-opengl -dbus-linked -openssl-linked -nomake examples -no-javascript-jit -nomake tests -v -confirm-license sudo make sudo make install From 586f9f77d49c7c1f38b04a491d7ad16e56d7007d Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Wed, 16 Oct 2013 10:24:50 +0300 Subject: [PATCH 04/23] custom box with debian 7 uploaded on redisdesktop.com site --- Vagrantfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vagrantfile b/Vagrantfile index 0a91e6802..faaeebe22 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -37,7 +37,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| #debian 7 x86 config.vm.define "debi7_32" do |debi7_32| debi7_32.vm.box = "debi7_i386" - debi7_32.vm.box_url = "https://s3-eu-west-1.amazonaws.com/ffuenf-vagrant-boxes/debian/debian-7.1.0-amd64.box" + debi7_32.vm.box_url = "http://redisdesktop.com/vagrant/debi7_i386.box" debi7_32.vm.provision :shell, :path => "install_debi7.sh" end From bd1e8c6de145d3a246ed1487bf08124b3c135bb4 Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Wed, 16 Oct 2013 10:38:59 +0300 Subject: [PATCH 05/23] Fixed bug #44 --- redis-desktop-manager/forms/connection.ui | 16 +++++++++++++++- redis-desktop-manager/source/connection.cpp | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/redis-desktop-manager/forms/connection.ui b/redis-desktop-manager/forms/connection.ui index b8a7fa0a7..1fe79a9b9 100644 --- a/redis-desktop-manager/forms/connection.ui +++ b/redis-desktop-manager/forms/connection.ui @@ -29,7 +29,7 @@ Qt::DefaultContextMenu
- Add Connection + Connection true @@ -261,6 +261,20 @@
+ + nameEdit + hostEdit + portSpinBox + authEdit + okButton + cancelButton + useSshTunnel + sshHost + sshPort + sshUser + sshPass + tabs + diff --git a/redis-desktop-manager/source/connection.cpp b/redis-desktop-manager/source/connection.cpp index 5cb9cb0ce..339c19c03 100644 --- a/redis-desktop-manager/source/connection.cpp +++ b/redis-desktop-manager/source/connection.cpp @@ -19,6 +19,7 @@ connection::connection(QWidget *parent, RedisServerItem * srv) // connect slots to signals connect(ui.okButton, SIGNAL(clicked()), SLOT(OnOkButtonClick())); + connect(ui.okButton, SIGNAL(pressed()), SLOT(OnOkButtonClick())); //edit mode if (srv != nullptr) { From c606990e92f1a95ff10f0a55cc83619f59b31c5d Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Wed, 16 Oct 2013 13:49:26 +0300 Subject: [PATCH 06/23] Added clang to compilers --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index cab88de82..305fef1a8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,7 @@ language: cpp compiler: - gcc + - clang before_install: - sudo add-apt-repository --yes ppa:ubuntu-sdk-team/ppa - sudo apt-get update -qq From 38817c63d4f8674a8c13dc5e9dabb93d30732963 Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Wed, 16 Oct 2013 14:17:36 +0300 Subject: [PATCH 07/23] play with travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 305fef1a8..8d5442005 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,4 @@ -language: cpp +language: objective-c compiler: - gcc - clang From e750405299038a24105a41146361d991fcfa39e2 Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Fri, 18 Oct 2013 16:21:45 +0400 Subject: [PATCH 08/23] Fixed problems on OSX --- redis-desktop-manager/forms/demo.ui | 26 +++++--- .../redis-desktop-manager.pro | 63 +++++++++++-------- redis-desktop-manager/source/demo.cpp | 10 ++- 3 files changed, 64 insertions(+), 35 deletions(-) diff --git a/redis-desktop-manager/forms/demo.ui b/redis-desktop-manager/forms/demo.ui index 68acbf880..306e3b018 100644 --- a/redis-desktop-manager/forms/demo.ui +++ b/redis-desktop-manager/forms/demo.ui @@ -133,7 +133,7 @@ aa|bb Either aa or bb. - 50 + 60 16777215 @@ -195,6 +195,12 @@ aa|bb Either aa or bb. 0 + + + 0 + 40 + + 300 @@ -215,6 +221,12 @@ aa|bb Either aa or bb. + + + 0 + 40 + + 300 @@ -241,7 +253,7 @@ aa|bb Either aa or bb. - 550 + 580 0 @@ -306,7 +318,7 @@ aa|bb Either aa or bb. - 560 + 580 240 @@ -362,8 +374,8 @@ aa|bb Either aa or bb. - 400 - 100 + 170 + 130 171 41 @@ -395,7 +407,7 @@ aa|bb Either aa or bb. <html><head/><body> -<style>a {color: #808080; text-decoration: none}</style> +<style>a {color: #808080; text-decoration: none; font-size: 10px}</style> <p><span style=" font-size:10px; font-weight:600;">Third Party Libs and Images:</span><a href="http://qt-project.org/"> QT (GPL License)</a>; <a href="http://libqxt.org/">Qxt (GPL License)</a> , <a href="http://www.libssh2.org">libssh2 (BSD License)</a>, <a href="http://www.carlosprioglio.com/">Redis Logo</a></p></body></html> @@ -412,7 +424,7 @@ aa|bb Either aa or bb. 20 - 130 + 150 511 21 diff --git a/redis-desktop-manager/redis-desktop-manager.pro b/redis-desktop-manager/redis-desktop-manager.pro index bf0b183ab..ffadb13d1 100644 --- a/redis-desktop-manager/redis-desktop-manager.pro +++ b/redis-desktop-manager/redis-desktop-manager.pro @@ -13,6 +13,7 @@ TEMPLATE = app CONFIG -= debug CONFIG += c++11 release +#CONFIG-=app_bundle SOURCES += \ $$PWD/source/main.cpp \ @@ -34,6 +35,7 @@ HEADERS += \ $$PWD/include/models/*.h \ $$PWD/include/models/items/*.h \ + release: DESTDIR = ./../bin/linux/release debug: DESTDIR = ./../bin/linux/debug @@ -42,36 +44,48 @@ MOC_DIR = $$DESTDIR/.moc RCC_DIR = $$DESTDIR/.qrc UI_DIR = $$DESTDIR/.ui -win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../deps/libs/win32/ -llibssh2 -else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../deps/libs/win32/ -llibssh2 -else:unix: LIBS += /usr/local/lib/libssh2.so - -win32:CONFIG(release, debug|release): LIBS += -lws2_32 -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -else:win32:CONFIG(debug, debug|release): LIBS += -lws2_32 -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 - +win32 { -INCLUDEPATH += $$PWD/../deps/libssh/include -DEPENDPATH += $$PWD/../deps/libssh/include + LIBS += -lws2_32 -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -win32:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../deps/libs/win32/libssh2.lib -else:win32:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../deps/libs/win32/libssh2.lib -else:unix: PRE_TARGETDEPS += /usr/local/lib/libssh2.so + CONFIG(release, debug|release) { + LIBS += -L$$PWD/../deps/libs/win32/ -llibssh2 + PRE_TARGETDEPS += $$PWD/../deps/libs/win32/libssh2.lib + } -unix:!mac { - LIBS += -Wl,-rpath=\\\$$ORIGIN/../lib + else: CONFIG(debug, debug|release) { + LIBS += -L$$PWD/../deps/libs/win32/ -llibssh2 + PRE_TARGETDEPS += $$PWD/../deps/libs/win32/libssh2.lib + } } -target.path = /usr/share/redis-desktop-manager/bin -target.files = $$DESTDIR/rdm qt.conf rdm.png -INSTALLS += target - -deskicon.path = /usr/share/applications -deskicon.files = rdm.desktop -INSTALLS += deskicon +unix { + mac { # os x 10.8 + LIBS += /usr/local/lib/libssh2.dylib + PRE_TARGETDEPS += /usr/local/lib/libssh2.dylib + } + else { # ubuntu & debian + LIBS += -Wl,-rpath=\\\$$ORIGIN/../lib + LIBS += /usr/local/lib/libssh2.so + PRE_TARGETDEPS += /usr/local/lib/libssh2.so + + + target.path = /usr/share/redis-desktop-manager/bin + target.files = $$DESTDIR/rdm qt.conf rdm.png + INSTALLS += target + + deskicon.path = /usr/share/applications + deskicon.files = rdm.desktop + INSTALLS += deskicon + + data.path = /usr/share/redis-desktop-manager/lib + data.files = lib/* + INSTALLS += data + } +} -data.path = /usr/share/redis-desktop-manager/lib -data.files = lib/* -INSTALLS += data +INCLUDEPATH += $$PWD/../deps/libssh/include +DEPENDPATH += $$PWD/../deps/libssh/include INCLUDEPATH += $$PWD/source \ $$PWD/source/models \ @@ -94,7 +108,6 @@ FORMS += \ RESOURCES += \ Resources/demo.qrc - OTHER_FILES += \ qt.conf diff --git a/redis-desktop-manager/source/demo.cpp b/redis-desktop-manager/source/demo.cpp index c0ab482e7..02d8aa4b5 100644 --- a/redis-desktop-manager/source/demo.cpp +++ b/redis-desktop-manager/source/demo.cpp @@ -63,8 +63,12 @@ void MainWin::initTabs() { connect(ui.tabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(OnTabClose(int))); + #ifndef Q_OS_DARWIN //hide close button for first tab - ui.tabWidget->tabBar()->tabButton(0, QTabBar::RightSide)->hide(); + // on Mac Os this code crash application to segfault + ui.tabWidget->tabBar()->tabButton(0, QTabBar::RightSide)->hide(); + + #endif } void MainWin::initUpdater() @@ -293,7 +297,7 @@ void MainWin::OnRemoveConnectionFromTree() QMessageBox::StandardButton reply; - reply = QMessageBox::question(this, "Confirm action", "Do you really want delete connection?", + reply = QMessageBox::question(this, "Confirm action", "Do you really want delete connection?", QMessageBox::Yes|QMessageBox::No); if (reply == QMessageBox::Yes) { @@ -415,4 +419,4 @@ QStandardItem * MainWin::getSelectedItemInConnectionsTree() } return nullptr; -} \ No newline at end of file +} From d457975cee896d39a1c091e234db9765f1359289 Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Mon, 21 Oct 2013 12:10:14 +0400 Subject: [PATCH 09/23] Added app icon for osx --- redis-desktop-manager/rdm.plist | 20 ++++++++++++++++++ .../redis-desktop-manager.pro | 6 +++++- redis-desktop-manager/redis.icns | Bin 0 -> 73174 bytes 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 redis-desktop-manager/rdm.plist create mode 100644 redis-desktop-manager/redis.icns diff --git a/redis-desktop-manager/rdm.plist b/redis-desktop-manager/rdm.plist new file mode 100644 index 000000000..62bd4c0c5 --- /dev/null +++ b/redis-desktop-manager/rdm.plist @@ -0,0 +1,20 @@ + + + + + CFBundleIconFile + rdm.icns + CFBundlePackageType + APPL + CFBundleGetInfoString + Created by Qt/QMake + CFBundleSignature + ???? + CFBundleExecutable + RedisDesktopManager + CFBundleIdentifier + com.redisdesktop.rdm + NOTE + This file was generated by Qt/QMake. + + diff --git a/redis-desktop-manager/redis-desktop-manager.pro b/redis-desktop-manager/redis-desktop-manager.pro index ffadb13d1..311abe529 100644 --- a/redis-desktop-manager/redis-desktop-manager.pro +++ b/redis-desktop-manager/redis-desktop-manager.pro @@ -63,6 +63,9 @@ unix { mac { # os x 10.8 LIBS += /usr/local/lib/libssh2.dylib PRE_TARGETDEPS += /usr/local/lib/libssh2.dylib + + QMAKE_INFO_PLIST = rdm.plist + ICON = rdm.icns } else { # ubuntu & debian LIBS += -Wl,-rpath=\\\$$ORIGIN/../lib @@ -109,6 +112,7 @@ RESOURCES += \ Resources/demo.qrc OTHER_FILES += \ - qt.conf + qt.conf \ + rdm.plist diff --git a/redis-desktop-manager/redis.icns b/redis-desktop-manager/redis.icns new file mode 100644 index 0000000000000000000000000000000000000000..70a04fc5ec12b81a9dd5c0cd983d2221cb2dc025 GIT binary patch literal 73174 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 wuHF*b6t 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 E0lL?XJpcdz literal 0 HcmV?d00001 From bbd8c2268a281c4f5166026ca0f4b4486988e210 Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Mon, 21 Oct 2013 13:41:59 +0400 Subject: [PATCH 10/23] Added icon to resources --- build_osxbundle.sh | 6 +++++ redis-desktop-manager/Info.plist | 24 ++++++++++++++++++ redis-desktop-manager/Resources/demo.qrc | 1 + .../{redis.icns => rdm.icns} | Bin redis-desktop-manager/rdm.plist | 20 --------------- .../redis-desktop-manager.pro | 6 ++--- redis-desktop-manager/source/main.cpp | 1 + 7 files changed, 35 insertions(+), 23 deletions(-) create mode 100644 build_osxbundle.sh create mode 100644 redis-desktop-manager/Info.plist rename redis-desktop-manager/{redis.icns => rdm.icns} (100%) delete mode 100644 redis-desktop-manager/rdm.plist diff --git a/build_osxbundle.sh b/build_osxbundle.sh new file mode 100644 index 000000000..d2a83f273 --- /dev/null +++ b/build_osxbundle.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +BUILD_DIR=./bin/linux/release/rdm.app/Contents/ + +cp -f ./redis-desktop-manager/Info.plist $BUILD_DIR/Info.plist +cp -f ./redis-desktop-manager/rdm.icns $BUILD_DIR/Resources/rdm.icns diff --git a/redis-desktop-manager/Info.plist b/redis-desktop-manager/Info.plist new file mode 100644 index 000000000..201f5f5b1 --- /dev/null +++ b/redis-desktop-manager/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleIconFile + rdm.icns + NSPrincipalClass + NSApplication + CFBundleIconFile + + CFBundlePackageType + APPL + CFBundleGetInfoString + Created by Qt/QMake + CFBundleSignature + ???? + CFBundleExecutable + RedisDesktopManager + CFBundleIdentifier + com.redisdesktop.rdm + NOTE + This file was generated by Qt/QMake. + + diff --git a/redis-desktop-manager/Resources/demo.qrc b/redis-desktop-manager/Resources/demo.qrc index b2b82a4a9..50c419e55 100644 --- a/redis-desktop-manager/Resources/demo.qrc +++ b/redis-desktop-manager/Resources/demo.qrc @@ -16,5 +16,6 @@ ../images/refreshdb.png ../images/editdb.png ../images/delete.png + ../Resources/redis.ico diff --git a/redis-desktop-manager/redis.icns b/redis-desktop-manager/rdm.icns similarity index 100% rename from redis-desktop-manager/redis.icns rename to redis-desktop-manager/rdm.icns diff --git a/redis-desktop-manager/rdm.plist b/redis-desktop-manager/rdm.plist deleted file mode 100644 index 62bd4c0c5..000000000 --- a/redis-desktop-manager/rdm.plist +++ /dev/null @@ -1,20 +0,0 @@ - - - - - CFBundleIconFile - rdm.icns - CFBundlePackageType - APPL - CFBundleGetInfoString - Created by Qt/QMake - CFBundleSignature - ???? - CFBundleExecutable - RedisDesktopManager - CFBundleIdentifier - com.redisdesktop.rdm - NOTE - This file was generated by Qt/QMake. - - diff --git a/redis-desktop-manager/redis-desktop-manager.pro b/redis-desktop-manager/redis-desktop-manager.pro index 311abe529..37cf9c3d1 100644 --- a/redis-desktop-manager/redis-desktop-manager.pro +++ b/redis-desktop-manager/redis-desktop-manager.pro @@ -60,11 +60,11 @@ win32 { } unix { - mac { # os x 10.8 + macx { # os x 10.8 LIBS += /usr/local/lib/libssh2.dylib PRE_TARGETDEPS += /usr/local/lib/libssh2.dylib - QMAKE_INFO_PLIST = rdm.plist + QMAKE_INFO_PLIST = Info.plist ICON = rdm.icns } else { # ubuntu & debian @@ -113,6 +113,6 @@ RESOURCES += \ OTHER_FILES += \ qt.conf \ - rdm.plist + Info.plist diff --git a/redis-desktop-manager/source/main.cpp b/redis-desktop-manager/source/main.cpp index ab9470f91..da22c5a25 100644 --- a/redis-desktop-manager/source/main.cpp +++ b/redis-desktop-manager/source/main.cpp @@ -13,3 +13,4 @@ int main(int argc, char *argv[]) w.show(); return a.exec(); } + From fcb386a0d983b7cf767f2550f56165095a69d867 Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Mon, 21 Oct 2013 13:56:26 +0400 Subject: [PATCH 11/23] Added osx travis config --- .travis.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8d5442005..6918f334d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,11 @@ language: objective-c compiler: - - gcc - - clang +- clang before_install: -- sudo add-apt-repository --yes ppa:ubuntu-sdk-team/ppa -- sudo apt-get update -qq -- sudo apt-get install ubuntu-sdk -y -qq -- sudo apt-get install libssl1.0.0 -y -qq +- sudo brew update +- sudo brew install qt +- sudo brew install openssl + before_script: - cd ./redis-desktop-manager - sudo chmod 777 configure @@ -28,4 +27,4 @@ notifications: - u.glide@gmail.com email: on_success: change - on_failure: always \ No newline at end of file + on_failure: always From 9f4c3b9faee5347e9084fd51dcfa29bbde593f40 Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Mon, 21 Oct 2013 13:59:51 +0400 Subject: [PATCH 12/23] Fixed travis config --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6918f334d..8980cb931 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,9 +2,9 @@ language: objective-c compiler: - clang before_install: -- sudo brew update -- sudo brew install qt -- sudo brew install openssl +- brew update +- brew install qt +- brew install openssl before_script: - cd ./redis-desktop-manager From 19bf8415037484f0d1758a7ba2bc006b896d7079 Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Mon, 21 Oct 2013 14:06:57 +0400 Subject: [PATCH 13/23] Install libssh2 via brew --- .travis.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8980cb931..8493e0351 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,11 +5,7 @@ before_install: - brew update - brew install qt - brew install openssl - -before_script: -- cd ./redis-desktop-manager -- sudo chmod 777 configure -- ./configure +- brew install libssh2 script: - qmake -qt=qt5 -v - qmake -qt=qt5 From 6bad8818588b5a731105a99ddf8dd174921f6f8c Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Mon, 21 Oct 2013 14:12:35 +0400 Subject: [PATCH 14/23] Fixed qt version in travis config --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 8493e0351..adcd25464 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,7 @@ compiler: - clang before_install: - brew update -- brew install qt +- brew install qt5 - brew install openssl - brew install libssh2 script: From 57e51bc50dd9cfd4465a40603185c96ce9f6aebf Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Mon, 21 Oct 2013 14:21:31 +0400 Subject: [PATCH 15/23] Link qt5 after installation --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index adcd25464..e3e637d90 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,7 @@ compiler: before_install: - brew update - brew install qt5 +- brew link qt5 - brew install openssl - brew install libssh2 script: From b5ca1e1a9e947bc02f1da9f0ab86b6a9eb99c467 Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Mon, 21 Oct 2013 14:25:44 +0400 Subject: [PATCH 16/23] Added force flag --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index e3e637d90..2a36dfce1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,7 @@ compiler: before_install: - brew update - brew install qt5 -- brew link qt5 +- brew link qt5 --force - brew install openssl - brew install libssh2 script: From f6f5539ac963838455664dd7faebfc77d07fe6c4 Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Mon, 21 Oct 2013 14:32:25 +0400 Subject: [PATCH 17/23] Fixed qmake execution in travis config --- .travis.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2a36dfce1..8bf44b858 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,9 +7,11 @@ before_install: - brew link qt5 --force - brew install openssl - brew install libssh2 +before_script: +- cd ./redis-desktop-manager script: - - qmake -qt=qt5 -v - - qmake -qt=qt5 + - qmake -v + - qmake - make clean - make -s - cd ./../tests/ From 46a103fae5d226ccc44b824bfbf5da4bbc535a71 Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Mon, 21 Oct 2013 14:52:47 +0400 Subject: [PATCH 18/23] Fixed osx build: - Added redis to travis config - Fixed tests project --- .travis.yml | 2 ++ tests/tests.pro | 36 +++++++++++++++++++++++------------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8bf44b858..e38390b59 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,9 @@ before_install: - brew link qt5 --force - brew install openssl - brew install libssh2 +- brew install redis before_script: +- redis-server --daemonize yes - cd ./redis-desktop-manager script: - qmake -v diff --git a/tests/tests.pro b/tests/tests.pro index 8b229e386..30f47701d 100644 --- a/tests/tests.pro +++ b/tests/tests.pro @@ -37,25 +37,35 @@ MOC_DIR = $$DESTDIR/.moc RCC_DIR = $$DESTDIR/.qrc UI_DIR = $$DESTDIR/.ui -win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../deps/libs/win32/ -llibssh2 -else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../deps/libs/win32/ -llibssh2 -else:unix: LIBS += /usr/local/lib/libssh2.so +win32 { -win32:CONFIG(release, debug|release): LIBS += -lws2_32 -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -else:win32:CONFIG(debug, debug|release): LIBS += -lws2_32 -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 + LIBS += -lws2_32 -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 + CONFIG(release, debug|release) { + LIBS += -L$$PWD/../deps/libs/win32/ -llibssh2 + PRE_TARGETDEPS += $$PWD/../deps/libs/win32/libssh2.lib + } -INCLUDEPATH += $$PWD/../deps/libssh/include -DEPENDPATH += $$PWD/../deps/libssh/include - -win32:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../deps/libs/win32/libssh2.lib -else:win32:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../deps/libs/win32/libssh2.lib -else:unix: PRE_TARGETDEPS += /usr/local/lib/libssh2.so + else: CONFIG(debug, debug|release) { + LIBS += -L$$PWD/../deps/libs/win32/ -llibssh2 + PRE_TARGETDEPS += $$PWD/../deps/libs/win32/libssh2.lib + } +} -unix:!mac { - LIBS += -Wl,-rpath=\\\$$ORIGIN/../lib +unix { + macx { # os x 10.8 + LIBS += /usr/local/lib/libssh2.dylib + PRE_TARGETDEPS += /usr/local/lib/libssh2.dylib + } + else { # ubuntu & debian + LIBS += -Wl,-rpath=\\\$$ORIGIN/../lib + LIBS += /usr/local/lib/libssh2.so + PRE_TARGETDEPS += /usr/local/lib/libssh2.so + } } +INCLUDEPATH += $$PWD/../deps/libssh/include +DEPENDPATH += $$PWD/../deps/libssh/include INCLUDEPATH += $$PWD/source \ $$PWD/"include" \ From 04165ff1983c2e6c5617432364c22076b9f0bea1 Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Mon, 21 Oct 2013 15:01:27 +0400 Subject: [PATCH 19/23] Fixed test.pro file: removed packing in bundle --- tests/tests.pro | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/tests.pro b/tests/tests.pro index 30f47701d..408039c12 100644 --- a/tests/tests.pro +++ b/tests/tests.pro @@ -7,6 +7,7 @@ TEMPLATE = app CONFIG -= debug CONFIG += c++11 release +CONFIG-=app_bundle SRC_DIR = $$PWD/../redis-desktop-manager// From a7cb4537d7045d9608c2b1ba6a3bb1cd0f2327ad Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Mon, 21 Oct 2013 15:43:38 +0400 Subject: [PATCH 20/23] try to fix problem with qt on build worker --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index e38390b59..40a5c5a5b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,7 @@ before_install: - brew update - brew install qt5 - brew link qt5 --force +- brew link libpng --force - brew install openssl - brew install libssh2 - brew install redis From 8cf4db85d1c89479d2bf68924aeb75540753d316 Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Mon, 21 Oct 2013 15:52:15 +0400 Subject: [PATCH 21/23] install libpng --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 40a5c5a5b..e35faf41b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,7 @@ before_install: - brew update - brew install qt5 - brew link qt5 --force +- brew install libpng - brew link libpng --force - brew install openssl - brew install libssh2 From 013025166ac30601969906aa3a73956701f1b9e1 Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Tue, 22 Oct 2013 14:09:09 +0300 Subject: [PATCH 22/23] Updated updater --- redis-desktop-manager/source/updater/Updater.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/redis-desktop-manager/source/updater/Updater.cpp b/redis-desktop-manager/source/updater/Updater.cpp index c55862d58..7267d1e63 100644 --- a/redis-desktop-manager/source/updater/Updater.cpp +++ b/redis-desktop-manager/source/updater/Updater.cpp @@ -18,10 +18,14 @@ Updater::Updater() #ifdef Q_OS_LINUX platform = "linux"; #endif + + #ifdef Q_OS_MACX + platform = "osx"; + #endif QUrl updateUrl( - QString("http://%1/get-update.php?version=%2&platform=%3") - .arg("glide.name/projects/redis-desktop-manager") + QString("http://%1/get-update?version=%2&platform=%3") + .arg("redisdesktop.com") .arg(QCoreApplication::applicationVersion()) .arg(platform) ); From 676ee83566f0024e2cb7e4e3f2b1266e82eb521b Mon Sep 17 00:00:00 2001 From: Igor Malinovskiy Date: Tue, 22 Oct 2013 14:18:31 +0300 Subject: [PATCH 23/23] Updated readme --- README.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a4e54f99b..71c69523f 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,15 @@ [Redis Desktop Manager](http://redisdesktop.com "Redis Desktop Manager Offical Site") =================== -[![Build Status](https://travis-ci.org/uglide/RedisDesktopManager.png?branch=master)](https://travis-ci.org/uglide/RedisDesktopManager) +Ubuntu: [![Build Status](https://travis-ci.org/uglide/RedisDesktopManager.png?branch=master)](https://travis-ci.org/uglide/RedisDesktopManager) +Mac OS X: [![Build Status](https://travis-ci.org/uglide/RedisDesktopManager.png?branch=osx)](https://travis-ci.org/uglide/RedisDesktopManager) Open source cross-platform Redis Desktop Manager based on Qt 5 **Supported platforms** -- Windows Xp, Vista, 7, 8 +- Windows Xp, Vista, 7, 8 +- Mac OS X 10.8, 10.9 - Ubuntu 12 and 13 - Debian 7 @@ -19,6 +21,10 @@ Open source cross-platform Redis Desktop Manager based on Qt 5 1. Download Windows Installer from [http://redisdesktop.com/download](http://redisdesktop.com/download) 2. Run downloaded installer +### Mac OS X ### +1. Download dmg image from [http://redisdesktop.com/download](http://redisdesktop.com/download) +2. Mount dmg image +3. Run rdm.app ### Ubuntu & Debian ### @@ -32,10 +38,11 @@ Open source cross-platform Redis Desktop Manager based on Qt 5 After installation Redis Desktop Manager will be available in main menu. -### Other Linux & Mac OS ### +### Other Linux ### You can build Redis Desktop Manager from source. -1. Install Qt 5.1.1 +1. Install Qt 5.1.1 +2. Install openssl 1.0 2. Run: `./configure && qmake redis-desktop-manager.pro && make`