from Blender import Draw,Text,Registry
import bpy
import pysvn
def popup(msg):
Draw.PupMenu(msg+'%t|Ok')
return
Функция
def run():
txt = bpy.data.texts.active
if not txt: return
fn = txt.getFilename()
if fn == None or len(fn) == 0:
popup('No filename defined: save it first')
return
Следующим шагом нужно создать объект клиента
svn = pysvn.Client()
info = svn.info(fn)
if info == None:
popup('not yet added to repository, '+ \
'will do that now')
svn.add(fn)
Затем, мы сводим текущее содержимое текстового буфера, соединяя все строки в нём в единственный блок данных, и записываем его в файловый объект, который мы открыли для файла, связанного с буфером:
file=open(fn,'wb')
file.write('\n'.join(txt.asLines()))
file.close()
Этот файл будет отправлен в хранилище с помощью метода
version = svn.checkin(fn,'Blender commit')
popup('updated to rev. '+str(version))
if __name__ == '__main__':
run()
Полный код доступен как
Основная цель хранилища - возможность сотрудничать, что означает, что другие пользователи могут изменить файлы, с которыми мы работаем, и мы должны быть в состоянии получить эти совершенные изменения. Это называется обновление (updating) файла и означает, что мы копируем самую последнюю версию, которая находится в хранилище в наш рабочий каталог.
Кроме проверки, сохранен ли текстовый буфер, и добавлен ли уже файл к хранилищу, мы должны также проверить, является ли наша текущая версия - новой или измененной по сравнению с версией в хранилище. Если это так, мы предлагаем пользователю выбор: отвергнуть эти изменения и вернуться к версии в хранилище, или подтвердить и отправить версию, находящуюся в текстовом буфере. (Третий вариант, объединение различий, у нас не предусмотрен; хотя Subversion, несомненно, способно сделать это, по крайней мере для текстовых файлов, но лучше это предоставить более универсальным инструментам, таким как TortoiseSVN.)
Первая часть скрипта очень похожа на скрипт отправки. Основное различие - это другое клавиатурное сокращение:
#!BPY
"""
Name: 'SVNUpdate'
Blender: 249
Group: 'TextPlugin'
Shortcut: 'Ctrl+Alt+U'
Tooltip: 'Update current textbuffer from svn'
"""
from Blender import Draw,Text,Registry
import bpy
import re
import pysvn
def popup(msg):
Draw.PupMenu(msg+'%t|Ok')
return
Функция
def run():
txt = bpy.data.texts.active
if not txt: return
fn = txt.getFilename()
if fn == None or len(fn) == 0:
popup('No filename defined: save it first')
return
svn = pysvn.Client()