Другой основанный на питоне ответ, основанный на собственной функции модуля 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, который не будет автоматически декодировать / кодировать потоки ввода / вывода при использовании
Да, это возможно. В официальной книге SVN есть глава, посвященная этой ситуации: http://svnbook.red-bean.com/en/1.5/svn.serverconfig.multimethod.html . Есть некоторые подводные камни, но они больше связаны с настройками разрешений.
Точно, Subversion разработана для поддержки одновременного доступа через несколько протоколов, что вызывает серьезные проблемы с CVS. Вы можете использовать не только http: // и svn: //, но и file: // (если вы работаете локально на машине, например, с помощью инструмента непрерывной интеграции или другого обработчика после фиксации) https: / /, svn + ssh: // и т. д.
По моему опыту, один метод не оказался объективно «лучше», чем другой, но каждый из них имеет определенные преимущества. Например, Apache отлично справляется с одновременной обработкой большого числа обращений. С другой стороны, если вы еще не используете Apache или не хотите, чтобы он обрабатывал трафик SVN, демон svnserve
является легковесным и достаточно производительным. На моих Mac Я настроил svnserve, используя launchd , чтобы он запускался только при поступлении запроса, поэтому он не использует никаких ресурсов, когда в репозитории нет активности. То, что работает лучше всего, во многом будет зависеть от шаблонов доступа, которые вы видите на практике.