web-dev-qa-db-fra.com

Commande de révision actuelle de Subversion

Existe-t-il une commande Subversion pour afficher le numéro de révision actuel?

Après svn checkout, je souhaite démarrer un script et avoir besoin du numéro de révision dans une variable. Ce serait bien s'il y a une commande comme svn info get_revision_number.

55
creativz

Les versions les plus récentes de svn supportent l'argument --show-item:

svn info --show-item revision

Pour le numéro de révision de votre copie de travail locale, utilisez:

svn info --show-item last-changed-revision

Vous pouvez utiliser os.system() pour exécuter une ligne de commande comme celle-ci:

svn info | grep "Revision" | awk '{print $2}'

Je fais cela dans mes scripts de construction nocturnes.

Également sur certaines plates-formes, il existe une commande svnversion, mais je pense que j'avais une raison de ne pas l'utiliser. Ah, d'accord. Vous ne pouvez pas obtenir le numéro de révision d'un référentiel distant pour le comparer à celui local à l'aide de svnversion.

88
BastiBen

Il existe également une commande plus pratique (pour certains) svnversion.

La sortie peut être un numéro de révision unique ou quelque chose comme ceci (from -h):

  4123:4168     mixed revision working copy
  4168M         modified working copy
  4123S         switched working copy
  4123:4168MS   mixed revision, modified, switched working copy

J'utilise cet extrait de code python pour extraire les informations de révision:

import re
import subprocess

p = subprocess.Popen(["svnversion"], stdout = subprocess.PIPE, 
    stderr = subprocess.PIPE)
p.wait()
m = re.match(r'(|\d+M?S?):?(\d+)(M?)S?', p.stdout.read())
rev = int(m.group(2))
if m.group(3) == 'M':
    rev += 1
24
  1. Tout d'abord, svn status a le numéro de révision, vous pouvez le lire à partir de là.

  2. De plus, chaque fichier que vous stockez dans SVN peut stocker le numéro de révision lui-même - ajoutez le mot clé $Rev$ à votre fichier et exécutez propset: svn propset svn:keywords "Revision" file

  3. Enfin, le numéro de révision est également dans le fichier .svn/entries, quatrième ligne.

Maintenant, chaque fois que vous extrayez ce fichier, il aura la révision en elle-même.

5
Kornel Kisielewicz

REV = svn info svn://svn.code.sf.net/p/retroshare/code/trunk | grep 'Revision:' | cut -d\ -f2

4
RSuser

Utilisez quelque chose comme ce qui suit, tirant parti de la sortie XML de Subversion:

# parse rev from popen "svn info --xml"
dom = xml.dom.minidom.parse(os.popen('svn info --xml'))
entry = dom.getElementsByTagName('entry')[0]
revision = entry.getAttribute('revision')

Notez également que, en fonction de vos besoins, l’entrée <commit revision=...> sera peut-être ce que vous cherchez. Cela donne le "dernier changement", qui ne changera pas tant que le code de l’arborescence actuelle ne changera pas, à la différence de "Revision" (ce que ce qui précède donne), qui changera chaque fois que quelque chose change dans le référentiel (même les branches) et vous faites un "svn up", qui n'est pas la même chose, ni souvent aussi utile.

2
Peter Hansen

svn info, je crois, est ce que vous voulez.

Si vous vouliez juste la révision, vous pourriez peut-être faire quelque chose comme:

svn info | grep "Revision:"
2
Dave Markle

Je viens d'utiliser la réponse de @ badcat dans une version modifiée, en utilisant subprocess.check_output() :

import subprocess
revision = subprocess.check_output("svn info | awk '/^Revision:/ {print $2}'", Shell=True).strip()

Je pense que vous pouvez aussi installer et utiliser pysvn si vous voulez utiliser python pour vous connecter à svn.

2
monkut

Aucune mention pour le monde Windows SubWCRev , qui, correctement utilisé, peut remplacer automatiquement les données nécessaires aux emplacements nécessaires, si le script appelle SubWCRev au format SubWCRev WC_PATH TPL-FILE READY-FILE

Exemple de mon hook post-commit (une partie de)

SubWCRev.exe CustomLocations Builder.tpl  z:\Builder.bat
...
call z:\Builder.bat

où est mon Builder.tpl

svn.exe export trunk z:\trunk$WCDATE=%Y%m%d$-r$WCREV$

en conséquence, j'ai à chaque fois un fichier bat avec une partie variable - nom de dir - qui correspond aux métadonnées de Working Copy

1
Lazy Badger

Je pense que je dois faire svn info puis récupérer le numéro avec une manipulation de chaîne à partir de "Revision: xxxxxx" Ce serait juste Nice, s'il y avait une commande qui renvoie juste le nombre :)

0
creativz

Sinon pour l'ancienne version, si '--show-item' n'est pas reconnu, vous pouvez utiliser la commande suivante:

svn log -r HEAD | grep -o -E "^r[0-9]{1,}" | sed 's/r//g'

J'espère que ça aide.

0
Sant Erwann