einfaches svn Post-Commit-Hook-Aktualisierungsverzeichnis mit geänderten Dateien

  • Ich habe ein Skript verwendet, das ich irgendwo gefunden habe: (im Gesamtwert svn noob, wird es zum Kopieren von Dateien verwendet, nachdem sie in ein Repo übernommen wurden?)

     #!/bin/bash
    
    REPOS="$1"
    REV="$2"
    
    # A - Item added to repository
    # D - Item deleted from repository
    # U - File contents changed
    # _U - Properties of item changed; note the leading underscore
    # UU - File contents and properties changed
    
    # Files and directories can be distinguished, as directory paths are displayed with a trailing "/" character.
    
    LOOK=/usr/bin/svnlook
    SVN=/usr/bin/svn 
    DEV=/usr/local/node/
    
    cd /var/tmp/svn
      for changes in `$LOOK changed $REPOS | awk '{print $1 "=" $2;}'`;
      do
            len=${#changes}
            idx=`expr index "$changes" =`;
            directory=${changes:$idx};
            action=${changes:0:$idx-1};
            if [ ${changes:len-1} = '/' ]
            then
                case "$action" in
                    "A" ) \
                        mkdir --mode=775 -p $DEV/$directory;
                        chown nobody:nobody $DEV/$directory;
                        chmod 775 $DEV/$directory;
                        ;;
                    "D" ) \
                        rmdir $DEV/$directory;
                        ;;
                esac
            else
                case "$action" in
                    "A"|"U"|"UU" ) \
                        $SVN export --force --non-interactive -r HEAD -q file://$REPOS/$directory;
                        BASE=`basename $directory`;
                        DIR=`dirname $directory`;
                        chown nobody:nobody $BASE;
                        chmod 775 $BASE;
                        mkdir --mode=775 -p $DEV/$DIR;
                        cp -f --preserve=ownership $BASE $DEV/$DIR;
                        unlink $BASE;
                        ;;
                    "D" ) \
                        rm -f $DEV/$directory;
                        ;;
                esac
            fi
      done
    
    exit 0
     

    Pfade:

     Path i want to copy all the modified files after committing:
    /usr/local/node/
    
    Repo location:
    /var/lib/svn/api/
    
    Hook location:
    /var/lib/svn/api/hooks/post-commit
     

    Wenn i Führen Sie es vom Terminal aus aus, das ich bekomme:

    Repository-Argument erforderlich Geben Sie 'svnlook help' zur Verwendung ein.

    Wenn ein Commit ausgeführt wird, wird / usr / local / node / nicht geändert

    22 November 2011
    Writecoder
1 answer
  • Ich gehe davon aus, dass Sie vergessen haben, dieses Skript alle Argumente zu übergeben, wenn Sie es von Hand ausführen. Das erste Argument ($1) wird $REPOS zugewiesen. Dieses Argument wird im Befehl svnlook verwendet, der in der Schleife for ausgeführt wird.

    Führen Sie das Argument aus Skript korrekt - mit dem Repository-Pfad als erstem Argument und der gerade festgeschriebenen Revision als zweitem Argument.

    Stellen Sie sicher, dass Sie etwas Zeit mit dem SVN-Buch , bevor das ausgeführt wird - es muss sein Als root ausführen (siehe Befehl chown(1)), werden möglicherweise Daten entfernt, die Sie interessieren (siehe Befehle unlink(1) und rm(1)).

    22 November 2011
    sarnoldRocco