Для хранения этого справедливым необходимо было бы заставить каждого участвующего сотрудника иметь подготовленную проблему для оценки кандидата на. Предпочтительно что-то принятая форма реальный мир в их опыте компании, но чем-то, что было уже разрешено. Это - хороший шанс оценить знание о проблеме и оценить не просто навыки программирования.
я ненавижу его, когда слишком конкретным вопросам отвечают. У меня было интервью однажды, где программист тестировал мое знание STL, который я использовал экстенсивно и пытался заставить меня отвечать, что было необходимо пользовательское средство выделения. Я услышал о них, но никогда не использовал их (особенно в окнах) и был заставлен чувствовать себя немым. IOW, постарайтесь не быть поверхностными.
, Таким образом, моя точка, задайте практические вопросы, которые не являются так о тестировании знания программирования, как можно оценить более качественную личность и решающие проблему подходы при использовании "пары, программируя" идею.
Хороший вопрос!
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
Я бы, вероятно, записал номер версии в текстовый файл где-нибудь на веб-сайте, используя обработчик post-commit, а затем просто прочитал бы этот файл при загрузке вашей страницы.
Вы можете получить номер текущей версии для оформления заказа, используя в командной строке « 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
.
Обратите внимание, что я не буду делать это при каждом просмотре страницы : не так быстро, как можно было бы надеяться для вашего приложения.
Вместо этого я получу этот номер редакции при создании архива. Позже я
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";
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
Вслед за Лансом, вот однострочный вариант командной строки.
svn log -q --limit 1 http://svnbox/path/to/repo/trunk \
| php -r 'fgets(STDIN); preg_match("/(\d+)/", fgets(STDIN), $m); echo $m[0];'
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 )
Вы можете просто выполнить оболочку в командной строке и запустить svn info. Просто имейте в виду, что это может быть смешанная версия. Вы также можете запустить svn up, и последняя строка STDOUT даст вам номер версии.
Или вы хотите использовать svn API? Вы также можете посмотреть код TortoiseSVN из SubWCRev, который используется для замены токена в файле текущими версиями WC.