diff --git a/.gitignore b/.gitignore index 1117d204..90b4779a 100644 --- a/.gitignore +++ b/.gitignore @@ -6,12 +6,13 @@ *.pyproj *.sln -# Logs and databases # +# Headphones files # ###################### *.log *.db* *.db-journal *.ini +version.lock logs/* cache/* @@ -64,6 +65,3 @@ _ReSharper*/ /logs .project .pydevproject - - -headphones_docs \ No newline at end of file diff --git a/contrib/downgrade.sh b/contrib/downgrade.sh new file mode 100755 index 00000000..7943d0d2 --- /dev/null +++ b/contrib/downgrade.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# Parameter check +if [ -z "$1" ] || [ -z "$2" ]; then + echo "Syntax: $0 " + exit 1 +fi + +# Repository check +if [ ! -d "$1/.git" ]; then + echo "This script can only downgrade Headphones installations via Git." + exit 1 +fi + +# Version file check +if [ ! -s "$2/version.lock" ]; then + echo "Missing the version.lock file in the data folder, or the file is empty. Did you start Headphones at least once?" + exit 1 +fi + +# Git installation check +if [ ! -x "$(command -v wget)" ]; then + echo "Git is required to downgrade." + exit 1 +fi + +# Display information +HASH=$(cat $2/version.lock) + +echo "This script will try to downgrade Headphones to the last version that started, version $HASH. Make sure you have a backup of your config file and database, just in case!" +echo "Press enter to continue, or CTRL + C to quit." +read + +# Downgrade +cd "$1" +git reset --hard "$HASH" + +echo "All done, Headphones should be downgraded to the last version that started." \ No newline at end of file diff --git a/headphones/__init__.py b/headphones/__init__.py index 8d29811c..c4f47793 100644 --- a/headphones/__init__.py +++ b/headphones/__init__.py @@ -138,9 +138,8 @@ def initialize(config_file): if not os.path.exists(CONFIG.CACHE_DIR): try: os.makedirs(CONFIG.CACHE_DIR) - except OSError: - logger.error( - 'Could not create cache dir. Check permissions of datadir: %s', DATA_DIR) + except OSError as e: + logger.error("Could not create cache dir '%s': %s", DATA_DIR, e) # Sanity check for search interval. Set it to at least 6 hours if CONFIG.SEARCH_INTERVAL < 360: @@ -154,10 +153,23 @@ def initialize(config_file): except Exception as e: logger.error("Can't connect to the database: %s", e) - # Get the currently installed version - returns None, 'win32' or the git hash - # Also sets INSTALL_TYPE variable to 'win', 'git' or 'source' + # Get the currently installed version. Returns None, 'win32' or the git + # hash. CURRENT_VERSION, CONFIG.GIT_BRANCH = versioncheck.getVersion() + # Write current version to a file, so we know which version did work. + # This allowes one to restore to that version. The idea is that if we + # arrive here, most parts of Headphones seem to work. + if CURRENT_VERSION: + version_lock_file = os.path.join(DATA_DIR, "version.lock") + + try: + with open(version_lock_file, "w") as fp: + fp.write(CURRENT_VERSION) + except IOError as e: + logger.error("Unable to write current version to file '%s': %s", + version_lock_file, e) + # Check for new versions if CONFIG.CHECK_GITHUB_ON_STARTUP: try: