Benutzer-Werkzeuge

Webseiten-Werkzeuge


Writing /srv/www/htdocs/udo/singollo.de/linux.singollo.de/public_html/data/cache/6/6cc3dd684c05b33098aa304190fe0ad5.metadata failed
scripts:svn

Scripte rund um subversion (svn)

Subversion

Apache Subversion (SVN) ist eine freie Software zur Versionsverwaltung von Dateien und Verzeichnissen.

Die Versionierung erfolgt in einem zentralen Projektarchiv (engl. repository) in Form einer einfachen Revisionszählung. Wenn Änderungen an Inhalten verteilt auf den Computern der Bearbeiter ausgeführt werden, werden zwischen dem Projektarchiv und einem Arbeitsplatz jeweils nur die Unterschiede zu bereits vorhandenen Ständen übertragen.

Quelle: http://de.wikipedia.org/wiki/Subversion_%28Software%29

Arbeiten mit svn

Es gibt eine Reihe von Anleitungen für die Arbeit mit svn. Ich beschränke mich daher auf die Beschreibung des Scriptes.

Script: svn

Das Script ist im Rahmen der Entwicklung von Part-DB entstanden. Folgende Befehle sind für svn relevant:

  • -t|–tab: Replace 1 tab with 4 spaces.
  • -r|–remove: Remove backup files.
  • -a|–add: Remove backup files and add new files to repository.
  • -c|–commit text: Commit with comment.
  • –all text: All steps above in one.
-t|--tab: Replace 1 tab with 4 spaces

Es gibt unterschiedliche Coding-Styles. Ich nutze in den meisten Fällen ein Tab zur Einrückung, andere dagegen nur Leerzeichen. Part-DB hat sich auf die Verwendung von 4 Leerzeichen geeinigt und daher muss eine automatische Ersetzung erfolgen. Nach einigen Versuchen mit sed fand ich den Befehl expand, der mir diese Arbeit übernimmt. Dazu werden dann im zweiten Schritt noch alle Leerzeilen mit Leerzeichen gekürzt.

-r|--remove: Remove backup files

Backupfiles haben in ein Repository nichts verloren. Daher werden alle Files mit der Tilde am Ende gesucht und gelöscht.

-a|--add: Remove backup files and add new files to repository

Nach dem Entfernen der Backupfiles werden neue Dateien der Arbeitskopie hinzugefügt.

-c|--commit text: Commit with comment

Führt ein commit aus und verwendet den angebenen Text als Kommentar.

--all text: All steps above in one

Es werden die Schritte -a und -c in einem Schritt durchgeführt. Das sollte der meist genutzte Befehl des Scripts sein.

Script: Update-System

Das Script ist zusätzlich mit Code ausgestattet, das ein neues Update-System (UPS) für PHP-Anwendungen unterstützen soll. Als Basis dient die Ausgabe von svn status. Die Ausgabe kann mit -o in eine Datei umgeleitet werden. Die UPS-Klasse gehört zu meinem phpBookWorm-Framework, welches ich in Kürze in einem neuen svn-Repo einchecken will.

  • -o: Redirects output to the specified file. Attention! File will be overwritten!
  • –ups update: Show svn status of each modified file/directory and create an ups-script (e.g. update.ups)
  • –ups all: Show status of all files/directories and create an ups-script (e.g. repair.ups)

Code

svn.sh

#!/bin/sh
 
UPS='/dev/stdout'
 
tab2spaces ()
{
 
    # replaces tabs with spaces
 
    echo -e "- replacing tabs with spaces"
 
    FILES=`find . -type f -name "*php" -o -name "*tmpl"`
    for FILE in $FILES
    do
        echo "working on file $FILE..."
        expand -t4 "$FILE" > "$FILE.bak"
        sed 's/^ *$//g' "$FILE.bak" > "$FILE"
        rm -f "$FILE.bak"
    done
 
}
 
remove_backups ()
{
    #   remove backup files from working directory
 
    echo -e "- removing backup files..."
    find . -name "*~" -print -exec rm {} \;
 
}
 
svn_modified ()
{
    MODIFIED=`svn status | sed 's/ \+/@/g'`
    for MOD in $MODIFIED
    do
        STATUS=`echo $MOD | cut -d"@" -f1`
        FILE=`echo $MOD | cut -d"@" -f2`
        case $STATUS in
            M|A)
                echo -e "copy :: $FILE `sha256sum $FILE| cut -d" " -f1`" 1>> $UPS
                echo -e "chmod :: `stat -c "%n 0%a" $FILE`" 1>> $UPS
                ;;
            R|D)
                echo -e "delete :: $FILE" 1>> $UPS
                ;;
            *)
                echo -e "log :: $FILE unknown status" 1>> $UPS
                ;;
        esac
        done
}
 
svn_all ()
{
    find . -name "*~" -exec rm {} \;
    FILES=`find . | grep -v ".svn" | sed 's/^.\///g'`
    for FILE in $FILES
    do
        if [ $FILE != '.' -a $FILE != '..' ]; then
            stat -c "chmod :: %n 0%a" $FILE 1>> $UPS
        fi
    done
}
 
while [ "$1" != "" ]; do
    case $1 in
        -o)
            shift
            UPS=$1
            echo -e "creating $UPS..."
            ;;
        -t|--tab)
            tab2spaces
            ;;
        -a|--add)
            remove_backups
            echo -e "- adding files to repository..."
            svn add * --force
            ;;
        -r|--remove)
            remove_backups
            ;;
        -c|--commit)
            shift
            echo -e "- committing..."
            svn commit -m "$1"
            svn up
            ;;
        --all)
            remove_backups
            tab2spaces
            echo -e "- adding files to repository..."
            svn add * --force
            echo -e "- committing..."
            shift
            svn commit -m "$1"
            svn up
            ;;
        --ups)
            shift
            case $1 in
                all)
                    svn_all
                    ;;
                update)
                    svn_modified
                    ;;
            esac
            ;;
        *)
            echo "$0"
            echo -e "Licence: GPL, 2012 by Udo Neist\n"
            echo "Usage: $0"
            echo -e "\nWrapper for svn"
            echo -e "\nHint: Use code.google.com only with https to avoid problems with authentication!"
            echo -e "\n\t-t|--tab\t\tReplace 1 tab with 4 spaces."
            echo -e "\t-r|--remove\t\tRemove backup files."
            echo -e "\t-a|--add\t\tRemove backup files and add new files to repository."
            echo -e "\t-c|--commit text\tCommit with comment."
            echo -e "\t--all text\t\tAll steps above in one."
            echo -e "\nMaking an UPS-script for scripted update (default hash: sha256)"
            echo -e "\n\t-o\t\t\tRedirects output to the specified file. Attention! File will be overwritten!"
            echo -e "\n\t--ups update\t\tShow svn status of each modified file/directory and create an ups-script (e.g. update.ups)"
            echo -e "\t--ups all\t\tShow status of all files/directories and create an ups-script (e.g. repair.ups)"
            exit 1
            ;;
    esac
    shift
done
scripts/svn.txt · Zuletzt geändert: 07.10.2012 18:31 (Externe Bearbeitung)