Обнаруживать изменения svn в .bat

У меня есть .bat, а внутри .bat я хотел бы выполнить специальный код, если в репозитории svn есть какие-то изменения (например, скомпилировать).

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
0
5 000
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вы хотите, чтобы это было реактивным? Или по запросу?

Для реактивного см. хуки. Сценарий должен быть назван в соответствии с его назначением: pre-commit.bat, post-commit.bat. Скрипты называются: [скрипт] [путь-репо] [номер-ревизии]

По запросу:

  • Рабочая копия
    • svn журнал
    • svn st
    • svn diff
    • svn proplist
  • Репозиторий
    • svnlook автор
    • svnlook изменен
    • svnlook дата
    • svnlook diff
    • история svnlook

Пример:

svn st "C:\path\to\working\directory\" >> C:\path\to\working\project.log

Каждый раз, когда вы запускаете BAT, он добавляет вывод улулrong> в project.log. При необходимости отрегулируйте.

Это по запросу. Я знаю команду svn (их легко найти где угодно). Вопрос в том, как использовать это в скрипте .bat.

acemtp 03.10.2008 16:14

Я не хочу записывать статус в файл журнала :) Мне нужен код .bat, который делает что-то вроде: if (svn_changed ()) do this else do that

acemtp 03.10.2008 16:37
Ответ принят как подходящий

Для Win 2000 и более поздних версий это назначит последнюю строку вывода из команды svn status переменной svnOut, а затем проверит, содержит ли переменная что-нибудь:

@echo off
set svnOut=
set svnDir=C:Your\path\to\svn\dir\to\check
for /F "tokens=*" %%I in ('svn status %svnDir%') do set svnOut=%%I

if "%svnOut%"= = ""  (
    echo No changes
) else (
    echo Changed files!
)

Почему есть такая строчка

set svnOut=

вы должны выяснить сами. ;-)

Большое Вам спасибо. Это прекрасно, я проверю это как можно скорее.

acemtp 03.10.2008 16:55

На самом деле это не работает. Например, svn status возвращает строку с:? файлы M files2, которые являются локальной модификацией, или файлы, которых нет в репозитории. Я хочу видеть «Измененные файлы» только при некоторых изменениях в репозитории.

acemtp 03.10.2008 18:27

Я опубликовал ответ с измененной версией

acemtp 03.10.2008 19:15

Тогда я не уверен, что понимаю, что вы хотите здесь сделать ... Вы хотите выполнить обновление svn, и если что-то изменилось в репозитории svn server, вы хотите выполнить сборку с новым кодом? Или если что-то было изменено локально, вы хотите восстановить? Если 1: А как насчет конфликтов?

Tooony 03.10.2008 19:24

Хорошо, решение, которое я нашел с помощью Tooony:

set vHEAD = 0
set vBASE = 0

set svnDir=<path to local svn directory>

for /F "tokens=1,2" %%I in ('svn info -r HEAD %svnDir%') do if "%%I"= = "Revision:" set vHEAD=%%J
for /F "tokens=1,2" %%I in ('svn info -r BASE %svnDir%') do if "%%I"= = "Revision:" set vBASE=%%J

if "%vBASE%"= = "%vHEAD%"  (
    echo No changes
) else (
    echo Changed files!
)

Пусть ваш .bat выполнит svnversion (если вы используете Subversion) или SvnWCRev.exe (если вы используете TortoiseSVN) на самом верхнем уровне вашей рабочей копии.

Оба выходят, если ваша рабочая копия была изменена.

svnversion добавляет к своему выводу букву «M». SvnWCRev.exe напечатает строку текста о том, что WC был изменен.

Эта версия основана на @ tooony, но проверяет наличие обновлений на сервере, а не на клиенте.

@echo off
set svnOut=

rem Check svn server status of current working directory repository and see if first or second token is an *
for /F "tokens=1" %%I in ('svn status --show-updates') do if "%%I"= = "*" set svnOut=%%I
rem echo "%svnOut%"

if "%svnOut%"= = ""  (
    echo No changes
) else (
    echo Changed files!
)

Другие вопросы по теме