1 votes

Modification à distance avec diff / patch ?

Je fais la plupart de mon travail dans vim. Je préfère vraiment éditer des fichiers en utilisant vim localement plutôt que de me connecter en ssh sur un serveur et d'y exécuter vim, pour de nombreuses raisons, l'une des plus importantes étant la réactivité de l'interface utilisateur sur une connexion lente.

Je sais que je peux modifier des fichiers distants en utilisant vim et scp et j'ai également une configuration avec sshfs qui me permet de simplement me rendre dans un point de montage et de modifier quelques fichiers avec vim.

Cependant, cela me dérange vraiment que chaque fois que je sauvegarde le fichier, il écrit le fichier complet sur le serveur distant. Cela ralentit vraiment mon flux de travail.

Ce que je voudrais vraiment faire, c'est avoir une sorte de configuration comme celle-ci :

  1. Lorsque j'ouvre un fichier distant avec vim local, extraire le contenu du fichier et un hachage du fichier
  2. Lors de l'enregistrement du fichier, vérifiez si le hachage distant n'a pas changé, et si ce n'est pas le cas, téléchargez une différence et patchez le fichier distant avec les nouvelles modifications.
  3. Idéalement, faites tout cela via une connexion ssh persistante, afin de ne pas perdre de temps à ouvrir une nouvelle connexion à chaque fois.

Cela serait beaucoup plus rapide et beaucoup plus efficace en termes de bande passante, tout en offrant la même fonctionnalité.

J'utilise généralement git ou svn pour obtenir un résultat similaire, mais je veux vraiment ce genre de fonctionnalité minimale pour les situations où je n'ai pas la possibilité d'utiliser de tels systèmes de gestion de configuration.

Mes questions sont :

1. Est-ce que quelqu'un connaît des scripts ou des programmes existants qui feront une partie ou la totalité de cela pour moi ?

2. Quelqu'un peut-il écrire quelques astuces en bash qui feront l'affaire ? Je sais que cela devrait pouvoir être fait avec quelques-unes de celles-ci...

1voto

Cakemox Points 23637

xdelta pourrait effectuer le patch et le contrôle de hash pour vous.

Voici un moyen, en supposant que le fichier soit monté avec sshfs. J'ai conservé l'extension du fichier au cas où vous voudriez profiter de la coloration syntaxique :

#!/bin/bash

if [ ! -f "$1" -o ! -w "$1" ]
then
        echo "ERREUR : impossible d'ouvrir $1 pour l'édition"
        exit 1
fi

TMP="/tmp/$(date +%s)-$$-$(basename $1)"
TMP2="$TMP.2"
PAT="$TMP.patch"

/bin/cp $1 $TMP
/bin/cp $TMP $TMP2
/usr/bin/vim $TMP2
/usr/bin/xdelta delta $TMP $TMP2 $PAT
/bin/cp $1 $1.orig

if /usr/bin/xdelta patch $PAT $1.orig $1
then
        /bin/rm $TMP $TMP2 $PAT
else
        echo "ERREUR : échec du patch xdelta, en gardant les fichiers temporaires $TMP $TMP2 $PAT"
        exit 1
fi

Disons que vous l'appelez deltavim ou quelque chose, vous venez simplement de

deltavim /chemin/vers/fichierdistant.conf

Cela nécessitera deux copies localement pour faire le delta, mais les supprimera toutes en cas de succès. Il laisse le fichier distant original avec un .orig, mais vous pouvez ajouter une ligne pour le supprimer après le patch si vous le souhaitez.

Si le fichier distant change pendant que vous éditez, xdelta le remarquera et refusera de patcher.

De toute façon, c'est peut-être un point de départ pour vous.

Bonne chance ! (...et ne pointez jamais un script chargé et non testé que vous obtenez sur internet vers un fichier que vous aimez...)

1voto

toolforger Points 374

Lorsque vous vous connectez à distance avec vim, écrit-il réellement tout le fichier ?

vim ftp://monserveur//chemin/fichier.txt

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X