Как потребовать сообщений о фиксации в сервере VisualSVN?

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

49
задан bahrep 13 September 2018 в 05:47
поделиться

7 ответов

Сервер VisualSVN 3.9 обеспечивает VisualSVNServerHooks.exe check-logmessage рычаг перед фиксацией, который помогает Вам отклонить фиксации с пустыми или короткими сообщениями журнала. См. статью KB140: Проверка фиксации регистрирует сообщения в Сервере VisualSVN для инструкций.

Помимо встроенного VisualSVNServerHooks.exe, Сервер VisualSVN и SVN в общем использовании количество рычагов для выполнения задач как это.

  • start-commit —, выполненный перед транзакцией фиксации, начинается, может использоваться, чтобы сделать специальное разрешение, проверяющее
  • pre-commit —, выполненный в конце транзакции, но перед фиксацией. Часто используемый для проверки вещей такой как не обнуляют сообщение журнала длины.
  • post-commit — бежит за транзакцией, фиксировался. Может использоваться для отправки электронных писем или репозитория поддержки.
  • pre-revprop-change — выполнения перед изменением свойства пересмотра. Может использоваться для проверки полномочий.
  • post-revprop-change — бежит за изменением свойства пересмотра. Может использоваться, чтобы послать по электронной почте или скопировать эти изменения.

необходимо использовать эти pre-commit рычаг. Можно записать его сами на примерно любом языке поддержка платформ, но в сети существует много сценариев. Гугление "svn предварительная фиксация сцепляется для требования комментария", я нашел пару, которая была похожа, они будут отвечать всем требованиям:

Python
37
ответ дан bahrep 7 November 2019 в 11:22
поделиться

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

я видел столько сообщений о фиксации, в которых было сказано, что "патч", "опечатка", "фиксирует" или подобный, что я потерял счет.

Действительно - проясняют всем, почему Вам были бы нужны они.

Примеры по причинам:

  • Сгенерированный Changenotes (хорошо - это на самом деле сделало бы хороший автоматический инструмент для осуществления хороших сообщений, если я знаю, что они будут (с моим именем) публично видимы - если только для команды)
  • проблемы Лицензии : Вы, возможно, должны были бы знать источник кода позже, например, если Вы хотите изменить лицензию на свой код (Некоторые организации даже имеют стандарты для форматирования сообщения о фиксации - хорошо, Вы могли автоматизировать проверку это, но Вы не обязательно станете хорошими сообщения о фиксации с этим)
  • Совместимость с другими инструментами , например, bugtrackers/issue системы управления, которые взаимодействуют через интерфейс с Вашим управлением версиями и извлекают информацию из сообщений о фиксации.

Hope, которая помогает, дополнительно к техническим ответам о рычагах перед фиксацией.

17
ответ дан Olaf Kock 7 November 2019 в 11:22
поделиться

Использование эта предварительная фиксация зацепляет Windows. Это записано в Windows Batch и использует утилита командной строки grep для проверки длины фиксации.

svnlook log -t "%2" "%1" | c:\tools\grep -c "[a-zA-z0-9]" > nul
if %ERRORLEVEL% NEQ 1 exit 0

echo Please enter a check-in comment 1>&2
exit 1

Помнят, что Вам будет нужна копия grep, я рекомендую версия .

инструментов гну
3
ответ дан bahrep 7 November 2019 в 11:22
поделиться

Что VisualSVN предлагает Вам для ввода, поскольку рычаги являются "командными сценариями Windows NT", которые являются в основном пакетными файлами.

Запись if-then-else в пакетных файлах очень ужасна и вероятно очень трудно отладить.

Это посмотрит что-то как следующее (ищите pre-commit.bat) (не протестированный):

SVNLOOK.exe log -t "%2" "%1" | grep.exe "[a-zA-Z0-9]" > nul || GOTO ERROR
GOTO OK
:ERROR
ECHO "Please enter comment and then retry commit!"
exit 1
:OK
exit 0 

Вам нужен grep.exe на пути, %1 путь к этому репозиторию, %2 название txn, собирающегося фиксироваться. Также взгляните на pre-commit.tmpl в каталоге рычагов Вашего репозитория.

4
ответ дан Ansgar 7 November 2019 в 11:22
поделиться

До добавления передают рычаги моему серверу, я просто распределил svnprops клиентам TortoiseSVN.

Так, как альтернатива:

имя свойства In TortoiseSVN-> Properties - добавляют/устанавливают tsvn:logminsize соответственно.

Это, конечно, не никакая гарантия на сервере, поскольку клиенты/пользователи могут решить не сделать это, но можно распределить svnprops файлы, если Вам нравится. Таким образом, пользователи не должны устанавливать свои собственные значения - можно предоставить их всем пользователям.

Это также работает на вещи как bugtraq: настройки для соединения материала отслеживания ошибки в журналах.

2
ответ дан Peter Mortensen 7 November 2019 в 11:22
поделиться

Вот JScript оболочки Windows, который вы можете использовать, указав ловушку как:

%SystemRoot%\System32\CScript.exe //nologo <..path..to..script> %1 %2

Он довольно легко читается, так что продолжайте эксперимент.

Кстати, причина делать это в JScript заключается в том, что он не требует установки каких-либо других инструментов (Perl, CygWin и т. д.).

if (WScript.Arguments.Length < 2)
{
    WScript.StdErr.WriteLine("Repository Hook Error: Missing parameters. Should be REPOS_PATH then TXN_NAME, e.g. %1 %2 in pre-commit hook");
    WScript.Quit(-1);
}

var oShell = new ActiveXObject("WScript.Shell");
var oFSO = new ActiveXObject("Scripting.FileSystemObject");

var preCommitStdOut = oShell.ExpandEnvironmentStrings("%TEMP%\\PRE-COMMIT." + WScript.Arguments(1) + ".stdout");
var preCommitStdErr = oShell.ExpandEnvironmentStrings("%TEMP%\\PRE-COMMIT." + WScript.Arguments(1) + ".stderr");

var commandLine = "%COMSPEC% /C \"C:\\Program Files\\VisualSVN Server\\bin\\SVNLook.exe\" log -t ";

commandLine += WScript.Arguments(1);
commandLine += " ";
commandLine += WScript.Arguments(0);
commandLine += "> " + preCommitStdOut + " 2> " + preCommitStdErr;


// Run Synchronously, don't show a window
// WScript.Echo("About to run: " + commandLine);
var exitCode = oShell.Run(commandLine, 0, true);

var fsOUT = oFSO.GetFile(preCommitStdOut).OpenAsTextStream(1);
var fsERR = oFSO.GetFile(preCommitStdErr).OpenAsTextStream(1);

var stdout = fsOUT && !fsOUT.AtEndOfStream ? fsOUT.ReadAll() : "";
var stderr = fsERR && !fsERR.AtEndOfStream ? fsERR.ReadAll() : "";

if (stderr.length > 0)
{
    WScript.StdErr.WriteLine("Error with SVNLook: " + stderr);
    WScript.Quit(-2);
}

// To catch naught commiters who write 'blah' as their commit message

if (stdout.length < 5)
{
    WScript.StdErr.WriteLine("Please provide a commit message that describes why you've made these changes.");
    WScript.Quit(-3);
}

WScript.Quit(0);
3
ответ дан 7 November 2019 в 11:22
поделиться

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

pre-commit.bat

setlocal enabledelayedexpansion

set REPOS=%1
set TXN=%2

set SVNLOOK="%VISUALSVN_SERVER%\bin\svnlook.exe"

SET M=

REM Concatenate all the lines in the commit message
FOR /F "usebackq delims==" %%g IN (`%SVNLOOK% log -t %TXN% %REPOS%`) DO SET M=!M!%%g

REM Make sure M is defined
SET M=0%M%

REM Here the 6 is the length we require
IF NOT "%M:~6,1%"=="" goto NORMAL_EXIT

:ERROR_TOO_SHORT
echo "Commit note must be at least 6 letters" >&2
goto ERROR_EXIT

:ERROR_EXIT
exit /b 1

REM All checks passed, so allow the commit.
:NORMAL_EXIT
exit 0
65
ответ дан 7 November 2019 в 11:22
поделиться
Другие вопросы по тегам:

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