SVN и протоколы HTTP могут использоваться безопасно на том же репозитории одновременно?

Другой основанный на питоне ответ, основанный на собственной функции модуля os.path commonprefix

#!/bin/bash
cat mystream | python -c  

Longform, это

import sys
import os
sys.stdout.write(
    os.path.commonprefix(sys.stdin.readlines()) + b'\n'
)

/! \ Примечание: весь текст потока будет загружен в память в виде строковых объектов Python, прежде чем будет обработан этим методом


Если не требуется буферизация всего потока в памяти, мы можем использовать коммуникативное свойство и проверку общности префиксов между каждой входной парой

$!/bin/bash
cat mystream | python -c  

Длинная форма

import sys
import os
prefix = None
for line in sys.stdin:
    prefix=os.path.commonprefix(
        [line] + ([prefix] if prev else [])
    )
sys.stdout.write(prefix)

Оба эти метода должны быть бинарно-безопасными, так как в них не требуется ввод / вывод данных для кодирования ascii или utf-8, если вы столкнетесь с ошибками кодирования, python 3 переименуется в sys.stdin в sys.stdin.buffer и sys.stdout в sys.stdout.buffer, который не будет автоматически декодировать / кодировать потоки ввода / вывода при использовании

import sys\nimport os\nfor line in sys.stdin:\n\tif not os.path.isfile(line.strip()):\n\t\tcontinue\n\tsys.stdout.write(line)\n') | pythoin sys.stdin:\n\tprefix=os.path.commonprefix([line] + ([prefix] if prefix else []))\nsys.stdout.write(prefix)''

Длинная форма

import sys
import os
prefix = None
for line in sys.stdin:
    prefix=os.path.commonprefix(
        [line] + ([prefix] if prev else [])
    )
sys.stdout.write(prefix)

Оба эти метода должны быть бинарно-безопасными, так как в них не требуется ввод / вывод данных для кодирования ascii или utf-8, если вы столкнетесь с ошибками кодирования, python 3 переименуется в sys.stdin в sys.stdin.buffer и sys.stdout в sys.stdout.buffer, который не будет автоматически декодировать / кодировать потоки ввода / вывода при использовании

import sys, os; sys.stdout.write(os.path.commonprefix(sys.stdin.readlines()) + b\'\\n\')'

Longform, это

import sys
import os
sys.stdout.write(
    os.path.commonprefix(sys.stdin.readlines()) + b'\n'
)

/! \ Примечание: весь текст потока будет загружен в память в виде строковых объектов Python, прежде чем будет обработан этим методом


Если не требуется буферизация всего потока в памяти, мы можем использовать коммуникативное свойство и проверку общности префиксов между каждой входной парой

$!/bin/bash
cat mystream | python -c  

Длинная форма

import sys
import os
prefix = None
for line in sys.stdin:
    prefix=os.path.commonprefix(
        [line] + ([prefix] if prev else [])
    )
sys.stdout.write(prefix)

Оба эти метода должны быть бинарно-безопасными, так как в них не требуется ввод / вывод данных для кодирования ascii или utf-8, если вы столкнетесь с ошибками кодирования, python 3 переименуется в sys.stdin в sys.stdin.buffer и sys.stdout в sys.stdout.buffer, который не будет автоматически декодировать / кодировать потоки ввода / вывода при использовании

import sys\nimport os\nfor line in sys.stdin:\n\tif not os.path.isfile(line.strip()):\n\t\tcontinue\n\tsys.stdout.write(line)\n') | pythoin sys.stdin:\n\tprefix=os.path.commonprefix([line] + ([prefix] if prefix else []))\nsys.stdout.write(prefix)''

Длинная форма

import sys
import os
prefix = None
for line in sys.stdin:
    prefix=os.path.commonprefix(
        [line] + ([prefix] if prev else [])
    )
sys.stdout.write(prefix)

Оба эти метода должны быть бинарно-безопасными, так как в них не требуется ввод / вывод данных для кодирования ascii или utf-8, если вы столкнетесь с ошибками кодирования, python 3 переименуется в sys.stdin в sys.stdin.buffer и sys.stdout в sys.stdout.buffer, который не будет автоматически декодировать / кодировать потоки ввода / вывода при использовании

7
задан 9 June 2009 в 18:35
поделиться

2 ответа

Да, это возможно. В официальной книге SVN есть глава, посвященная этой ситуации: http://svnbook.red-bean.com/en/1.5/svn.serverconfig.multimethod.html . Есть некоторые подводные камни, но они больше связаны с настройками разрешений.

7
ответ дан 7 December 2019 в 03:20
поделиться

Точно, Subversion разработана для поддержки одновременного доступа через несколько протоколов, что вызывает серьезные проблемы с CVS. Вы можете использовать не только http: // и svn: //, но и file: // (если вы работаете локально на машине, например, с помощью инструмента непрерывной интеграции или другого обработчика после фиксации) https: / /, svn + ssh: // и т. д.

По моему опыту, один метод не оказался объективно «лучше», чем другой, но каждый из них имеет определенные преимущества. Например, Apache отлично справляется с одновременной обработкой большого числа обращений. С другой стороны, если вы еще не используете Apache или не хотите, чтобы он обрабатывал трафик SVN, демон svnserve является легковесным и достаточно производительным. На моих Mac Я настроил svnserve, используя launchd , чтобы он запускался только при поступлении запроса, поэтому он не использует никаких ресурсов, когда в репозитории нет активности. То, что работает лучше всего, во многом будет зависеть от шаблонов доступа, которые вы видите на практике.

2
ответ дан 7 December 2019 в 03:20
поделиться
Другие вопросы по тегам:

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