Как программно получить число пересмотра SVN?

Для хранения этого справедливым необходимо было бы заставить каждого участвующего сотрудника иметь подготовленную проблему для оценки кандидата на. Предпочтительно что-то принятая форма реальный мир в их опыте компании, но чем-то, что было уже разрешено. Это - хороший шанс оценить знание о проблеме и оценить не просто навыки программирования.

я ненавижу его, когда слишком конкретным вопросам отвечают. У меня было интервью однажды, где программист тестировал мое знание STL, который я использовал экстенсивно и пытался заставить меня отвечать, что было необходимо пользовательское средство выделения. Я услышал о них, но никогда не использовал их (особенно в окнах) и был заставлен чувствовать себя немым. IOW, постарайтесь не быть поверхностными.

, Таким образом, моя точка, задайте практические вопросы, которые не являются так о тестировании знания программирования, как можно оценить более качественную личность и решающие проблему подходы при использовании "пары, программируя" идею.

Хороший вопрос!

7
задан Community 23 May 2017 в 12:26
поделиться

8 ответов

Subversion включает в себя инструмент svnversion именно для этой цели. Рабочая копия может фактически иметь локальные модификации или может состоять из нескольких версий. svnversion знает, как с этим справиться; см. примеры в связанной документации.

Вы можете вызвать svnversion из python следующим образом:

import subprocess

def svnversion():
    p = subprocess.Popen("svnversion", stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    (stdout, stderr) = p.communicate()
    return stdout
13
ответ дан 6 December 2019 в 05:55
поделиться

Я бы, вероятно, записал номер версии в текстовый файл где-нибудь на веб-сайте, используя обработчик post-commit, а затем просто прочитал бы этот файл при загрузке вашей страницы.

Подробнее об использовании обработчиков здесь

4
ответ дан 6 December 2019 в 05:55
поделиться

Вы можете получить номер текущей версии для оформления заказа, используя в командной строке « svn info ».

Например:

$ svn info
Chemin : .
URL : http://.../trunk
Racine du dépôt : http://...
UUID du dépôt : 128b9c1a-...-612a326c9977
Révision : 185
Type de nœud : répertoire
Tâche programmée : normale
Auteur de la dernière modification : ...
Révision de la dernière modification : 185
Date de la dernière modification: 2009-09-28 20:12:29 +0200 (lun. 28 sept. 2009)

Обратите внимание, что он локализован; если вы работаете в Linux, вы можете попробовать использовать:

$ LANG=en svn info
svn: warning: cannot set LC_CTYPE locale
svn: warning: environment variable LANG is en
svn: warning: please check that your locale name is correct
Path: .
URL: http://.../trunk
Repository Root: http://...
Repository UUID: 128b9c1a-...-612a326c9977
Revision: 185
Node Kind: directory
Schedule: normal
Last Changed Author: mzeis
Last Changed Rev: 185
Last Changed Date: 2009-09-28 20:12:29 +0200 (Mon, 28 Sep 2009)

Однако, если вы используете это из PHP, получение его в формате XML может быть более полезным (проще для синтаксического анализа и не зависит от языка) :

$ svn info --xml
<?xml version="1.0"?>
<info>
<entry
   kind="dir"
   path="."
   revision="185">
<url>http://.../trunk</url>
<repository>
<root>http://...</root>
<uuid>128b9c1a-...-612a326c9977</uuid>
</repository>
<wc-info>
<schedule>normal</schedule>
<depth>infinity</depth>
</wc-info>
<commit
   revision="185">
<author>...</author>
<date>2009-09-28T18:12:29.130307Z</date>
</commit>
</entry>
</info>

Просто используйте для этого simplexml_load_string и выберите атрибут revision тега entry .


Обратите внимание, что я не буду делать это при каждом просмотре страницы : не так быстро, как можно было бы надеяться для вашего приложения.

Вместо этого я получу этот номер редакции при создании архива. Позже я

3
ответ дан 6 December 2019 в 05:55
поделиться

This works for svn version 1.6.2. But be warned, different SVN versions use different formats of the .svn folder.

<?php

$contents = file_get_contents(dirname(__FILE__) . '/.svn/entries');
preg_match("/dir\n(.+)/", $contents, $matches);
$svnRevision = $matches[1];

print "This Directory's SVN Revsion = $svnRevision\n";
3
ответ дан 6 December 2019 в 05:55
поделиться

I like the solution used by MediaWiki, reading the contents of .svn/entities. Check the first answer on this question: Getting the subversion repository number into code

2
ответ дан 6 December 2019 в 05:55
поделиться

Вслед за Лансом, вот однострочный вариант командной строки.

svn log -q --limit 1  http://svnbox/path/to/repo/trunk \
| php -r 'fgets(STDIN); preg_match("/(\d+)/", fgets(STDIN), $m); echo $m[0];'
3
ответ дан 6 December 2019 в 05:55
поделиться

If you're looking for a Python implementation, check out pysvn, you can invoke the info command to get details including the current revision:

entry = info( path )
2
ответ дан 6 December 2019 в 05:55
поделиться

Вы можете просто выполнить оболочку в командной строке и запустить svn info. Просто имейте в виду, что это может быть смешанная версия. Вы также можете запустить svn up, и последняя строка STDOUT даст вам номер версии.

Или вы хотите использовать svn API? Вы также можете посмотреть код TortoiseSVN из SubWCRev, который используется для замены токена в файле текущими версиями WC.

0
ответ дан 6 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: