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
.
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.
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
Tout d'abord, svn status a le numéro de révision, vous pouvez le lire à partir de là.
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
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.
REV = svn info svn://svn.code.sf.net/p/retroshare/code/trunk | grep 'Revision:' | cut -d\ -f2
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.
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:"
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.
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
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 :)
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.