From f8c80f3fe2c8becef8e022cf14572042292d1132 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sun, 1 Apr 2018 18:32:31 +0200 Subject: [PATCH] Fix git branch and commit revision in version. --- cmake/Rpm.cmake | 2 +- cmake/Version.cmake | 168 ++++++++-------------------------------- dist/maketarball.sh.in | 7 +- dist/strawberry.spec.in | 29 +++---- src/CMakeLists.txt | 8 +- src/core/mainwindow.cpp | 2 +- src/version.h.in | 2 +- 7 files changed, 50 insertions(+), 168 deletions(-) diff --git a/cmake/Rpm.cmake b/cmake/Rpm.cmake index 9a8453003..711bb8753 100644 --- a/cmake/Rpm.cmake +++ b/cmake/Rpm.cmake @@ -6,7 +6,7 @@ set(RPM_ARCH x86_64 CACHE STRING "Architecture of the rpm file") add_custom_target(rpm COMMAND ${CMAKE_SOURCE_DIR}/dist/maketarball.sh - COMMAND ${CMAKE_COMMAND} -E copy strawberry-${STRAWBERRY_VERSION_SPARKLE}.tar.xz ${RPMBUILD_DIR}/SOURCES/ + COMMAND ${CMAKE_COMMAND} -E copy strawberry-${STRAWBERRY_VERSION_PACKAGE}.tar.xz ${RPMBUILD_DIR}/SOURCES/ COMMAND rpmbuild -bs ${CMAKE_SOURCE_DIR}/dist/strawberry.spec COMMAND ${MOCK_COMMAND} --verbose diff --git a/cmake/Version.cmake b/cmake/Version.cmake index 20da46836..b38efd2b4 100644 --- a/cmake/Version.cmake +++ b/cmake/Version.cmake @@ -1,169 +1,63 @@ -# Change this file when releasing a new version. - -# Version numbers. set(STRAWBERRY_VERSION_MAJOR 0) set(STRAWBERRY_VERSION_MINOR 1) set(STRAWBERRY_VERSION_PATCH 1) #set(STRAWBERRY_VERSION_PRERELEASE rc1) -# This should be set to OFF in a release branch set(INCLUDE_GIT_REVISION ON) -# Rules about version number comparison on different platforms: -# Debian: -# Two stages are repeated until there are no more characters to compare: -# one block of consecutive digits (\d+) is compared numerically, then one -# block of consecutive NON-digits (\D+) is compared lexigraphically, -# with the exception that ~ sorts before everything else. -# -# The "upstream version" and "debian revision" are separated by the last -# dash in the version number. -# -# Algorithm is in "man deb-version", test comparisons with -# dpkg --compare-versions. -# -# These are in sorted order: -# 1.0~rc1 -# 1.0~rc2 -# 1.0 -# 1.0-1-g044287b -# 1.0-506-g044287b -# 1.0.1 -# 1.0.2 -# 1.0.a -# -# Rpm: -# The string is split on non-alphanumeric characters. Numeric sections are -# compared numerically and non-numeric sections are compared lexigraphically. -# If one sections is numeric and the other sections is non-numeric, the -# numeric sections is always NEWER. -# -# The "version" and "release" fields are compared with the same algorithm - -# if the versions are equal the releases are compared to determine which -# package is newer. -# -# Algorithm is described in: -# http://fedoraproject.org/wiki/Packaging:NamingGuidelines#Package_Versioning -# Test comparisons with: -# import rpm -# rpm.labelCompare((epoch, version, release), (epoch, version, release)) -# -# These are in sorted order: -# 1.0-0.rc1 -# 1.0-0.rc2 -# 1.0-1 -# 1.0-2.506-g044287b -# 1.0.1-1 -# 1.0.2-1 -# -# Sparkle (mac) and QtSparkle (windows): -# The strings are split into sections of characters that are all of the same -# "type" - where a "type" is period, digit, or other. Sections are then -# compared against each other - digits are compared numerically and other -# are compared lexigraphically. When two sections are of different types, -# the numeric section is always NEWER. -# -# If the common parts of both strings are equal, but one string has more -# sections, the type of the first extra section is used to determine which -# version is newer. -# If the extra section is a string, the shorter result is NEWER, otherwise -# the shorter section is OLDER. That means that 1.0 is NEWER than 1.0rc1, -# but 1.0 is OLDER than 1.0.1. -# -# See compareversions.cpp in QtSparkle. - -# Version numbers in Strawberry: -# Deb: -# With git: $tagname-$commitcount-g$sha1 -# Without git: $major.$minor.$patch[~$prerelease] -# -# Rpm: Version Release -# Prerelease: $major.$minor.$patch 0.$prerelease -# Without git: $major.$minor.$patch 1 -# With git: $tagname 2.$commitcount.g$sha1 -# -# QtSparkle (Windows): -# With git: $tagname-$commitcount-g$sha1 -# Without git: $major.$minor.$patch[$prerelease] -# -# Mac info.plist: CFBundleVersion -# Prerelease: 4096.$major.$minor.$patch.0 -# Without git: 4096.$major.$minor.$patch.1 -# With git: 4096.$tagname.2.$commitcount -# The 4096. prefix is because the previous versioning scheme used svn revision -# numbers, which got up to 3000+. - - set(majorminorpatch "${STRAWBERRY_VERSION_MAJOR}.${STRAWBERRY_VERSION_MINOR}.${STRAWBERRY_VERSION_PATCH}") set(STRAWBERRY_VERSION_DISPLAY "${majorminorpatch}") -set(STRAWBERRY_VERSION_DEB "${majorminorpatch}") set(STRAWBERRY_VERSION_RPM_V "${majorminorpatch}") set(STRAWBERRY_VERSION_RPM_R "1") -set(STRAWBERRY_VERSION_SPARKLE "${majorminorpatch}") -set(STRAWBERRY_VERSION_PLIST "4096.${majorminorpatch}") +set(STRAWBERRY_VERSION_PACKAGE "${majorminorpatch}") if(${STRAWBERRY_VERSION_PATCH} EQUAL "0") set(STRAWBERRY_VERSION_DISPLAY "${STRAWBERRY_VERSION_MAJOR}.${STRAWBERRY_VERSION_MINOR}") endif(${STRAWBERRY_VERSION_PATCH} EQUAL "0") -# Add prerelease if(STRAWBERRY_VERSION_PRERELEASE) set(STRAWBERRY_VERSION_DISPLAY "${STRAWBERRY_VERSION_DISPLAY} ${STRAWBERRY_VERSION_PRERELEASE}") - set(STRAWBERRY_VERSION_DEB "${STRAWBERRY_VERSION_DEB}~${STRAWBERRY_VERSION_PRERELEASE}") set(STRAWBERRY_VERSION_RPM_R "0.${STRAWBERRY_VERSION_PRERELEASE}") - set(STRAWBERRY_VERSION_SPARKLE "${STRAWBERRY_VERSION_SPARKLE}${STRAWBERRY_VERSION_PRERELEASE}") - set(STRAWBERRY_VERSION_PLIST "${STRAWBERRY_VERSION_PLIST}.0") -else(STRAWBERRY_VERSION_PRERELEASE) - set(STRAWBERRY_VERSION_PLIST "${STRAWBERRY_VERSION_PLIST}.1") + set(STRAWBERRY_VERSION_PACKAGE "${STRAWBERRY_VERSION_PACKAGE}${STRAWBERRY_VERSION_PRERELEASE}") endif(STRAWBERRY_VERSION_PRERELEASE) -# Add git revision -if(FORCE_GIT_REVISION) - set(GIT_REV ${FORCE_GIT_REVISION}) - set(GIT_INFO_RESULT 0) -else(FORCE_GIT_REVISION) - find_program(GIT_EXECUTABLE git) +find_program(GIT_EXECUTABLE git) - if(NOT GIT_EXECUTABLE-NOTFOUND) - execute_process(COMMAND ${GIT_EXECUTABLE} describe - RESULT_VARIABLE GIT_INFO_RESULT - OUTPUT_VARIABLE GIT_REV - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) - endif() +if(NOT GIT_EXECUTABLE-NOTFOUND) + # Get the current working branch + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + RESULT_VARIABLE GIT_INFO_RESULT + OUTPUT_VARIABLE GIT_BRANCH + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + ) + # Get the latest abbreviated commit hash of the working branch + execute_process( + COMMAND ${GIT_EXECUTABLE} log -1 --format=%h + RESULT_VARIABLE GIT_INFO_RESULT + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + ) endif() if(${GIT_INFO_RESULT} EQUAL 0) - string(REGEX REPLACE "^(.+)-([0-9]+)-(g[a-f0-9]+)$" "\\1;\\2;\\3" - GIT_PARTS ${GIT_REV}) - - if(NOT GIT_PARTS) - message(FATAL_ERROR "Failed to parse git revision string '${GIT_REV}'") - endif(NOT GIT_PARTS) - - list(LENGTH GIT_PARTS GIT_PARTS_LENGTH) - if(GIT_PARTS_LENGTH EQUAL 3) - list(GET GIT_PARTS 0 GIT_TAGNAME) - list(GET GIT_PARTS 1 GIT_COMMITCOUNT) - list(GET GIT_PARTS 2 GIT_SHA1) set(HAS_GET_REVISION ON) - endif(GIT_PARTS_LENGTH EQUAL 3) + set(GIT_REV "${GIT_COMMIT_HASH}") endif(${GIT_INFO_RESULT} EQUAL 0) if(INCLUDE_GIT_REVISION AND HAS_GET_REVISION) - set(STRAWBERRY_VERSION_DISPLAY "${GIT_REV}") - set(STRAWBERRY_VERSION_DEB "${GIT_REV}") - set(STRAWBERRY_VERSION_RPM_V "${GIT_TAGNAME}") - set(STRAWBERRY_VERSION_RPM_R "2.${GIT_COMMITCOUNT}.${GIT_SHA1}") - set(STRAWBERRY_VERSION_SPARKLE "${GIT_REV}") - set(STRAWBERRY_VERSION_PLIST "4096.${GIT_TAGNAME}.2.${GIT_COMMITCOUNT}") + set(STRAWBERRY_VERSION_DISPLAY "${STRAWBERRY_VERSION_DISPLAY} ${GIT_BRANCH} ${GIT_REV}") + set(STRAWBERRY_VERSION_PACKAGE "${STRAWBERRY_VERSION_PACKAGE}-${GIT_BRANCH}-${GIT_REV}") + set(STRAWBERRY_VERSION_RPM_V "${STRAWBERRY_VERSION_RPM_V}.${GIT_BRANCH}.${GIT_REV}") + set(STRAWBERRY_VERSION_RPM_R "1") endif(INCLUDE_GIT_REVISION AND HAS_GET_REVISION) -if(0) - message(STATUS "Display: ${STRAWBERRY_VERSION_DISPLAY}") - message(STATUS "Deb: ${STRAWBERRY_VERSION_DEB}") - message(STATUS "Rpm: ${STRAWBERRY_VERSION_RPM_V}-${STRAWBERRY_VERSION_RPM_R}") - message(STATUS "Sparkle: ${STRAWBERRY_VERSION_SPARKLE}") - message(STATUS "Plist: ${STRAWBERRY_VERSION_PLIST}") -endif(0) +message(STATUS "Strawberry Version:") +message(STATUS "Display: ${STRAWBERRY_VERSION_DISPLAY}") +message(STATUS "Package: ${STRAWBERRY_VERSION_PACKAGE}") +message(STATUS "Rpm: ${STRAWBERRY_VERSION_RPM_V}-${STRAWBERRY_VERSION_RPM_R}") diff --git a/dist/maketarball.sh.in b/dist/maketarball.sh.in index d31215236..5f4825f32 100755 --- a/dist/maketarball.sh.in +++ b/dist/maketarball.sh.in @@ -1,8 +1,7 @@ #!/bin/bash name=strawberry -version="@STRAWBERRY_VERSION_SPARKLE@" -deb_dist="@DEB_DIST@" +version="@STRAWBERRY_VERSION_PACKAGE@" root=$(cd "${0%/*}/.." && echo $PWD/${0##*/}) root=`dirname "$root"` rootnoslash=`echo $root | sed "s/^\///"` @@ -15,8 +14,6 @@ tar -cJf $name-$version.tar.xz \ --exclude "$root/dist/*.tar" \ --exclude "$root/dist/*.tar.*" \ --exclude "$root/CMakeLists.txt.user" \ + --exclude "$root/build" \ --exclude ".directory" \ "$root" - -echo "Also creating ${name}_${version}~${deb_dist}.orig.tar.xz..." -cp "$name-$version.tar.xz" "${name}_${version}~${deb_dist}.orig.tar.xz" diff --git a/dist/strawberry.spec.in b/dist/strawberry.spec.in index c6d64c95a..ca435900d 100644 --- a/dist/strawberry.spec.in +++ b/dist/strawberry.spec.in @@ -4,9 +4,9 @@ Release: @STRAWBERRY_VERSION_RPM_R@.@RPM_DISTRO@ Summary: A audio player and music collection organiser Group: Applications/Multimedia -License: GPLv3 +License: GPL-3.0+ URL: http://www.strawbs.org/ -Source0: %{name}-@STRAWBERRY_VERSION_SPARKLE@.tar.xz +Source0: %{name}-@STRAWBERRY_VERSION_PACKAGE@.tar.xz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: make @@ -49,14 +49,6 @@ Requires: glib-2.0 Requires: gio-2.0 Requires: protobuf Requires: cryptopp -Requires: libsqlite3-0 -Requires: taglib -Requires: libcdio -Requires: libgpod-1.0 -Requires: libchromaprint -Requires: libmtp -Requires: libpulse -Requires: libxml Requires: Qt5Core Requires: Qt5Gui Requires: Qt5Widgets @@ -91,18 +83,17 @@ Requires: gstreamer1.0(decoder-audio/x-wav) Strawberry is a modern audio player and music collection organiser. It is a fork of Clementine. The name is inspired by the band Strawbs. -Features include: - - * Organize and play your music collection - * Edit tags on your music - * Download album cover art from Last.fm, musicbrainz, Discogs and Amazon +Features: + * Play and organize music + * Edit tags on music files + * Album cover art from Lastfm, Musicbrainz, Discogs and Amazon * Native desktop notifications - * Import and export playlists in multiple formats - * Copy music to your iPod, iPhone, MTP or mass-storage USB player + * Playlists in multiple formats + * Transfer music to iPod, iPhone, MTP or mass-storage USB player * Support for multiple backends %prep -%setup -q -n %{name}-@STRAWBERRY_VERSION_SPARKLE@ +%setup -q -n %{name}-@STRAWBERRY_VERSION_PACKAGE@ %build %{cmake} .. -DUSE_INSTALL_PREFIX=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON @@ -116,7 +107,6 @@ make install DESTDIR=$RPM_BUILD_ROOT cd build make clean - %files %defattr(-,root,root,-) %doc @@ -127,5 +117,6 @@ make clean %{_datadir}/icons/hicolor/64x64/apps/strawberry.png %{_datadir}/icons/hicolor/128x128/apps/strawberry.png %{_datadir}/icons/hicolor/scalable/apps/strawberry.svg +%{_mandir}/man1/%{name}.1%{?ext_man} %changelog diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 975eede03..8928f3fbe 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1041,17 +1041,17 @@ if (APPLE) add_custom_command( - OUTPUT ${PROJECT_BINARY_DIR}/strawberry-${STRAWBERRY_VERSION_SPARKLE}.dmg - ${CMAKE_COMMAND} -E remove -f ${PROJECT_BINARY_DIR}/strawberry-${STRAWBERRY_VERSION_SPARKLE}.dmg + OUTPUT ${PROJECT_BINARY_DIR}/strawberry-${STRAWBERRY_VERSION_PACKAGE}.dmg + ${CMAKE_COMMAND} -E remove -f ${PROJECT_BINARY_DIR}/strawberry-${STRAWBERRY_VERSION_PACKAGE}.dmg COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../dist/create-dmg.sh ${PROJECT_BINARY_DIR}/strawberry.app COMMAND ${CMAKE_COMMAND} -E rename ${PROJECT_BINARY_DIR}/strawberry.dmg - ${PROJECT_BINARY_DIR}/strawberry-${STRAWBERRY_VERSION_SPARKLE}.dmg + ${PROJECT_BINARY_DIR}/strawberry-${STRAWBERRY_VERSION_PACKAGE}.dmg DEPENDS strawberry WORKING_DIRECTORY ${PROJECT_BINARY_DIR} ) add_custom_target(dmg - DEPENDS ${PROJECT_BINARY_DIR}/strawberry-${STRAWBERRY_VERSION_SPARKLE}.dmg) + DEPENDS ${PROJECT_BINARY_DIR}/strawberry-${STRAWBERRY_VERSION_PACKAGE}.dmg) else (APPLE) install(TARGETS strawberry RUNTIME DESTINATION bin diff --git a/src/core/mainwindow.cpp b/src/core/mainwindow.cpp index 4c92ba9f4..70e822d0b 100644 --- a/src/core/mainwindow.cpp +++ b/src/core/mainwindow.cpp @@ -552,7 +552,7 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co qLog(Debug) << "Creating sparkle updater"; qtsparkle::Updater* updater = new qtsparkle::Updater(QUrl("https://strawberry-data.appspot.com/sparkle-windows"), this); updater->SetNetworkAccessManager(new NetworkAccessManager(this)); - updater->SetVersion(STRAWBERRY_VERSION_SPARKLE); + updater->SetVersion(STRAWBERRY_VERSION_PACKAGE); connect(check_updates, SIGNAL(triggered()), updater, SLOT(CheckNow())); #endif diff --git a/src/version.h.in b/src/version.h.in index eb242e82e..bf1bd08d4 100644 --- a/src/version.h.in +++ b/src/version.h.in @@ -18,6 +18,6 @@ #define VERSION_H_IN #define STRAWBERRY_VERSION_DISPLAY "${STRAWBERRY_VERSION_DISPLAY}" -#define STRAWBERRY_VERSION_SPARKLE "${STRAWBERRY_VERSION_SPARKLE}" +#define STRAWBERRY_VERSION_PACKAGE "${STRAWBERRY_VERSION_PACKAGE}" #endif // VERSION_H_IN