Как использовать subversion propset против URL?

Можно ли использовать свойство subversion, например svn:externals только через URL? (т.е. без рабочей копии).

Мне нужен script, который связывает svn:externals с конкретной версией с учетом URL-адреса subversion, но это кажется невозможным:

$ svn propset foo bar https://example.com/svn/myproject/trunk
svn: Setting property on non-local target 'https://example.com/svn/myproject/trunk' needs a base revision

$ svn propset foo bar -r HEAD https://example.com/svn/myproject/trunk
svn: Try 'svn help' for more info
svn: Cannot specify revision for setting versioned property 'foo'

$ svn propset foo bar --revprop -r HEAD https://example.com/svn/myproject/trunk
svn: DAV request failed; it possible that the repository pre-revprop-change hook either failed or is non-existent
svn: At least one property change failed; repository is unchanged
svn: Error setting property 'foo': 
could not remove a property

(Я получаю те же результаты, если я использую фактический номер версии вместо HEAD.)

Ответ 1

Нет. Изменение свойства в файле похоже на изменение самого файла - вам нужен рабочий каталог. Существует несколько команд Subversion, которые изменяют фиксацию без рабочей копии: svn cp, svn mkdir и svn delete. Для внесения изменений все остальное нуждается в рабочем каталоге.

Кстати, вы можете вносить изменения в свойства ревизии без рабочей копии. Свойства ревизии такие, как комментарий фиксации (svn: log), идентификатор коммитера (svn: author) и время фиксации (svn: date).

Ответ 2

Да, хотя это немного взломать; svn propedit может изменить URL-адреса:

svn propedit foo --editor-cmd "echo bar>" http://example.com/svn/myproject/trunk -m "Property changed"

Ответ 3

Вы можете использовать команду svnmucc для неинтерактивно заданных свойств URL-адреса, например svn:externals.

Пример:

$ svnmucc --root-url https://example.com/svn -m 'reference other/yap' \
   propset svn:externals "^/otherproject/tag/xyz other
^/yetanother/tag/123 yap" myproject/trunk

Обратите внимание, что svnmucc также поддерживает другие команды, кроме propset, и можно объединить несколько команд в один вызов (отсюда и название). Результатом является только один набор изменений.

Команда svnmucc является частью исходного пакета subversion и обычно доступна через диспетчер пакетов распространения. Например, Fedora 25 включает его в пакет subversion-tools. OpenCSW даже включает его в основной пакет subversion.

Ответ 4

Основываясь на Willem отличный ответ, вот пример, показывающий, как установить SVN auto-props для needs-lock для всех файлов и mime-type для определенных расширений, используя URL:

svn propedit svn:auto-props --editor-cmd "echo \"* = svn:needs-lock=*
*.os = svn:mime-type=application/octet-stream
*.osproj = svn:mime-type=application/octet-stream\" >" http://example.com/svn/myproject/trunk -m "Setting auto-props."