Avatar billede skizo_someone Nybegynder
21. november 2006 - 15:34 Der er 1 løsning

Problem med SVN post-commit hook.

Hej Eksperter.

Nu har jeg i flere dage forsøgt at få et post-commit SVN hook til at virke, uden held, og jeg nu på randen til sindsyge.

Sagen er den at jeg har et SVN repository som her:
/var/svn/repos/uni

Og så har jeg min Apache "web-folder"
/var/www/localhost/htdocs/

Problemet opstår i og med at det projekt der bliver arbejdet på i SVN er et php projekt, hvor det ville være lækkert hele tiden at være i stand til at teste den seneste revision. Istedet for selv at committe sine ændringer og så update web-folderen manuelt.
Så var det at jeg blev opmærksom på "hooks" som jeg håber kan gøre opgaven lidt nemmere, men indtil videre har det kun været skyld i grå hår i en meget tidlig alder. Det som jeg ønsker er et post-commit hook som ved et commit af repositoriet, automatisk updater web-folderen med de seneste ændringer.

Det lød jo ikke voldsomt svært - ikke engang for en linux nybegynder som mig.

Her er hvad jeg har gjort. Inde i min repository mappe "/var/svn/repos/uni" har lavet en fil ved navn "post-commit" inde i mappen "/hooks/".

post-commit filen ser sådan her ud:

#!/bin/bash
REPOS=$1
TXN=$2
/usr/bin/svn update --username <uname> --password <pwd> /var/www/localhost/htdocs/
touch /tmp/svn-hook-virker

Sådan, det er faktisk den. Den første skulle gerne opdatere det repository som jeg har chekket ud i min /htdocs/ med brugeren <uname> og kodeorder <pwd>. Kører jeg denne kommando direkte i en terminal virker det da også helt som jeg ønsker.
jeg har indsat en touch for at se om SVN overhovedet eksekverer post-commit filen, og det må jeg konstatere at det gør den.

Altså, er jeg så langt at jeg ved at SVN kører post-commit når der bliver committed til vores repository men at den samtidig ikke formår at opdatere min /htdocs på trods af at jeg er sikker på at kommandoen er korrekt idet det virker når jeg kører den direkte fra en terminal. Her må jeg så nok indrømme at mit linux-know-how ikke rækker længere og derfor håber jeg at der er nogle af Jer derude som kan assistere mig.

Hvis der er anden information der skal bruges, må I endelig sige til.

På forhånd tak
Christian Rasmussen
Avatar billede skizo_someone Nybegynder
22. november 2006 - 14:44 #1
Nå, tiden gik og med lidt flere grå hår på hovedet, lykkedes det mig rent faktisk at finde en løsning der virker.

I min post-commit fil står dette:

#!/bin/sh
/var/svn/repos/uni/hooks/update

Altså skal filen "update" som ligger i /hooks/ mappen eksekveres hver gang der bliver lavet et commit til uni repositoriet.

update filen ser således ud:

#include <stddef.h>
#include <stdlib.h>
#include <unistd.h>

int main(void)
{
    execl("/usr/bin/svn",
        "svn",
        "update",
        "/var/www/localhost/htdocs/",
        "--username",
        "<uname>",
        "--password",
        "<pwd>",
        "--non-interactive",
        (const char*) NULL);
               
        return(EXIT_FAILURE);
}

Hvor <uname> og <pwd> repræsenterer den bruger du gerne vil bruge til at update med, disse skal bare fjernes hvis der ikke er behov for brugernavn og kodeord.

Jeg skal ikke sige hvor genial en løsning det er, men det virker :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester