Tag: bash hosting

  • Aktualizace WordPressu podruhé

    V létě 2011 jsem na tomto blogu popisoval, jak vzdáleně aktualizovat WordPress. O tři roky později znovu řeším stejný problém, situace se však změnila. Dříve jsem měl na server přístup pouze přes FTP, nyní mám SSH.

    Myšlenka nového skriptu spočívá v tom, že udržuje zdrojový kód WordPressu i jeho pluginů v SVN pracovních kopiích. Jak se to dělá pro samotný WordPress je popsáno zde. Poprvé je nutno provést SVN checkout nejnovějších tagů jádra WordPressu a jeho pluginů z repozitářů na http://core.svn.wordpress.org resp. http://plugins.svn.wordpress.org. Pro kompletní aktualizaci pak už vždy stačí spustit skript. Sám si zjistí tagy odpovídající nejnovějším verzím a pracovní kopie do nich přepne.

    Skript si můžete prohlédnout:

    #!/bin/bash
    ##
    ## Updates WordPress in this directory to maximum release version.
    ##
    
    LCYAN="\033[1;35m"
    NOCOL="\033[0m"
    
    update() {
      svninfo=`svn info 2>/dev/null`
      # check that directory is a working copy
      if [ "$?" -ne 0 ]; then
        echo -e "$LCYAN$(readlink -f .)$NOCOL is not a working copy."
        return
      fi
    
      oldurl=`echo "$svninfo" | grep '^URL:'`
      oldurl=${oldurl##* }
      oldversion=${oldurl##*/}
      tagurl=${oldurl%/*}
      newversion=`svn ls "$tagurl" | sed -e 's/\/$//' | sort --version-sort | tail -n 1`
    
      if [ "$oldversion" == "$newversion" ]; then
        echo "$(readlink -f .) is up to date with version $newversion."
      else
        echo -e "Update $LCYAN`readlink -f .`$NOCOL from version '$LCYAN$oldversion$NOCOL' to '$LCYAN$newversion$NOCOL'?"
        select prompt in "Yes" "No but continue" "Abort"; do
          case $prompt in
            Yes ) break;;
            "No but continue" ) return;;
            Abort ) exit;;
          esac
        done
    
        echo ---
        svn switch "$tagurl/$newversion"
        echo ---
      fi
    }
    
    if [ "$#" -ne 0 ]; then
      echo "Usage: $0"
      exit
    fi
    
    # main
    update
    
    # plugins
    pushd wp-content/plugins/ >/dev/null
    for plugindir in *; do
      if [ -d "$plugindir" ]; then
        pushd "$plugindir" >/dev/null
        update
        popd >/dev/null
      fi
    done
    popd >/dev/null

    Také si skript můžete stáhnout.