2010-01-08 7 views
0

Je souhaite effectuer des opérations SVN sur un référentiel SVN (via HTTP, si c'est important) sans avoir besoin d'une copie de travail. Fondamentalement, voici les choses que je veux faire:Puis-je utiliser PHP4 pour interagir avec un référentiel SVN sans copie de travail?

  1. Vérifiez si un répertoire existe à distance.

    • Si le répertoire n'existe pas, créez
  2. Vérifiez si un fichier existe dans le référentiel

    1. si le fichier n'existe pas, créez un nouveau fichier dans le référentiel avec mon contenu
      • Cela doit utiliser un nom d'auteur que je fournis, pas l'auteur WebDAV authentifié (ce qui explique pourquoi l'approche WebDAV h ne fonctionne pas pour moi)
    2. Si le fichier existe, remplacez son contenu par le contenu de mon fichier spécifié.

J'ai essayé d'utiliser l'approche Autoversioning, mais cette méthode me oblige à configurer l'authentification pour le serveur WebDAV, qui est moins qu'idéal dans mon cas. Je pourrais utiliser les opérations FS (le client est SVN 1.6, donc des copies de travail superficielles + ligne de commande travaillerait) mais c'est à la fois lent et inélégant.

Y at-il une bibliothèque (qui DOIT être utilisable depuis PHP 4.4!) Qui peut faire ce que je décris?

Répondre

0

Peut-être le PECL::svn extension (manual) ferait?

Pour la dernière version, l'exigence est:

PHP Version: PHP 4.0.0 or newer 


Et il semble qu'il ya des fonctions qui pourraient faire ce que vous voulez; par exemple:

  • svn_mkdir: crée un répertoire dans une copie de travail ou un référentiel.

Mais pas sûr que le sont des fonctions pour tout que vous voulez, mais ...

2

D'après ce que peu d'expérience, je l'ai barboter avec SVN de PHP: Si vous avez commande un accès en ligne à partir de votre script PHP l'exécutable svn, allez comme ça.

C'est toujours plus rapide qu'une implémentation PHP du protocole, et plus fiable.

Tous les clients PHP SVN que j'ai essayés avaient des failles, des bugs, ou étaient tout à fait instables.(Je ne sais pas celui PECL, cependant.)

+0

Vous pouvez également envisager de passer l'option --xml à svn et d'analyser le résultat en utilisant SimpleXML. –

2

Trouver les svn commandline ou équivalents d'extension svn de:

vérifier si un répertoire existe à distance.

svn info <URL> 

Si le répertoire n'existe pas, créez

svn mkdir <URL> 

Vérifiez si un fichier existe dans le référentiel

svn info <URL> 

si le fichier n'existe pas, créez un nouveau fichier dans le référentiel avec mon contenu

Celui-ci est plus difficile sans une copie de travail. Vous pouvez créer un fichier temporaire puis:

svn import /tmp/mytempfile <URL> 

Si le fichier existe, remplacer son contenu par le contenu de mon fichier spécifié.

svn delete <URL> 

suivi de ce qui précède, vous ne pouvez pas modifier un fichier sans une copie de travail. Notez que cela provoque une utilisation très sous-optimale de Subversion. Il est conçu pour stocker les modifications, pas les fichiers. Je ne recommanderais pas une suppression/importation pour changer quelques lignes de texte.

Cela doit utiliser un nom de l'auteur que je fournis, pas l'auteur WebDAV authentifié (ce qui explique pourquoi l'approche WebDAV ne fonctionne pas pour moi)

Vous ne pouvez pas fournir un auteur arbitraire nom utilisant webdav, vous authentifiez via HTTP (S) sur le serveur distant, et ce nom est utilisé comme auteur. Si vous avez besoin d'un autre nom, vous devez créer un autre utilisateur sur le serveur et lui donner accès au référentiel.