Benutzer-Werkzeuge

Webseiten-Werkzeuge

svndisk:start

Dies ist eine alte Version des Dokuments!


svndisk - Projekt

Das aktuelle Script:

svndisk.sh

# (c) 2009, Klaus.Franken@StrukturPunkt.de
# vim: ts=4 ai

DIR=$1
WAIT1=15 # WAIT1: Sekunden zwischen "svn stat"
WAIT2=10 # Anzahl WAIT1 bis Server befragen

PERL=/usr/bin/perl
XARGS=/usr/bin/xargs

if test `uname` == 'Linux'; then
    XARGS_OPT="--no-run-if-empty"
    SVN=/usr/bin/svn
fi
if test `uname` == 'Darwin'; then
    # Darwin / Mac OS X
    XARGS_OPT=""
    SVN=/opt/subversion/bin/svn
fi

test -x $SVN || exit 1
test -x $PERL || exit 4
test -x $XARGS || exit 5
test ! -z $DIR || exit 2
test -d $DIR || exit 2
cd $DIR || exit 3

sync () {
	# FIXME: bei Meldung: 
	#     svn: Directory '/Users/kfr/SvnDisk/SvnDisk/StrukturPunkt/Kunden/falkemedia-maclife/uck/.svn' containing working copy admin area is missing
	# wurde (versehentlich) .svn im betroffenen Pfad gelöscht. Diverse Kommandos "svn stat", "svn update" brechen ab!
	# Lösung: 
	#	cd ...
	#	svn co svn+ssh://kfr@strukturpunkt.de/home/kfr/SvnDisk/repo/SvnDisk/StrukturPunkt/Kunden/falkemedia-maclife/uck/ DELME
	# 	(URL siehe Pfad in .svn im Ordner darüber)
	# 	mv DELME/.svn/
	#	rm -rf DELME


	# gelöschtes löschen:
	# Beispiel: "!      Klexe/Arcor-Vertragsänderung-090610.pdf"
	$SVN stat | $PERL -ne '$_ =~ s/^\!\s+// || next; print $_;' | $XARGS $XARGS_OPT $SVN del
	# FIXME: wie ein ganzes Verzeichnis löschen?

	# Konflikte beheben (umbenennen):
	# Bsp-Zeile: "M      *       17   NEU.txt"
	# Erkennung: Konflikt wenn modifiziert (M) und neue Version auf Server (*)
	$SVN stat -u | perl -ne '$_ =~ s/^M[\w\s]{6}\*\s*\d*\s*// || next; print $_;' | xargs $XARGS_OPT -I % mv % %-$USER-$HOSTNAME-`date "+%y%m%d-%H%M%S"`

	# Updates abholen:
	$SVN update

	# neues hinzufügen:
	# BUG: keine Dateinamen mit "´" oder "`" im Namen
	$SVN stat | $PERL -ne '$_ =~ s/^\?\s+// || next; $_ =~ s/\s(.)/\\ $1/g; print $_;' | $XARGS $XARGS_OPT $SVN add

	$SVN commit -m "svndisk auto commit"
}

WAITING=$WAIT2
while test 1; do
	UPDATES=`$SVN stat 2>&1`
	if test ! -z "$UPDATES" -o $WAITING -eq 0; then
		sync
		WAITING=$WAIT2
	fi
	sleep $WAIT1
	WAITING=`expr $WAITING - 1`
done

Benutzung

Das Script svndisk.sh mit einem Subversion-Verzeichnis als Parameter starten, z.B.:

sh svndisk.sh /Users/kfr/SvnDisk/

ToDos

chefsicher machen

Das soll so sicher/automatische laufen, dass man es auch seinem Chef installieren kann.

GUI

Eine GUI wäre schön. Z.T gibt es Integrationen in den Dateimanager/Finder. Austesten.

Troubles

Subversion Anpassung an 1.6

z.B. die Konflikterkennung ist noch für Version 1.4 entwickelt, aber 1.6 liefert andere Meldungen. Siehe unten.

Konflikte

Seit Subversion-Version 1.6 werden Konflikte so angezeigt:

Conflict discovered in 'Einstellungen/Vienna/messages.db'.
Select: (p) postpone,
        (mf) mine-full, (tf) theirs-full,
        (s) show all options:

Datei nicht (mehr) vorhanden

Meldung:

svn: Commit failed (details follow):
svn: '/Users/kfr/SvnDisk/SvnDisk/StrukturPunkt/Briefwechsel Sonstiges/.~lock.Gerlin-Haftpflicht-Fragebogen.odt#' is scheduled for addition, but is missing

Lösung:

Datei löschen:

svn del "StrukturPunkt/Briefwechsel Sonstiges/.~lock.Gerlin-Haftpflicht-Fragebogen.odt#"

(Fehlermeldung ignorieren)

Datei zweimal gelöscht (?)

Meldung:

macbook:SvnDisk kfr$ svn stat
!     C pw2.kdb.lock
      >   local delete, incoming delete upon update

Lösung:

svn resolved pw2.kdb.lock
Permalink svndisk/start.1258975698.txt.gz · Zuletzt geändert: 23.11.2009 12:28 von kfr

oeffentlich