Yor*_*war 25 svn sqlite cygwin
当我在Cygwin中使用Subversion来更新某个存储库时,某些目录会成功更新,而另一些目录会因错误消息而失败:
svn:E200030:sqlite:磁盘I/O错误
在做svn update了同一个资源库再次,不同的目录中可以得到同样的错误.有时,在上述错误消息之后有一条SVN指令.
War*_*ung 30
这是因为Cygwin的SQLite包中有人想要的更改.当问到这个问题时,我是该软件包的维护者,我做了导致这种症状的更改.
这个更改是作为Cygwin SQLite版本发布的3.7.12.1-1,它解决了一个人的问题,但它有防止Cygwin的Subversion包与本机Windows Subversion实现合作的不良副作用.
这里的核心问题是Subversion 1.7改变了磁盘格式的工作副本.部分更改涉及新的SQLite数据库文件.svn/wc.db.现在,为了实现SQLite的并发保证,SQLite在访问数据库文件时将其锁定.
这一切都很好,也很明智,但是当你尝试混合使用Windows本机和POSIX 文件锁定语义时会遇到问题.在Windows上,文件锁定几乎总是意味着强制锁定,但在Linux系统上--Cygwin试图模仿 - 锁定通常意味着建议锁定.
这有助于了解"磁盘I/O错误"的来源.
Cygwin SQLite的3.7.12.1-1变化是以"Unix模式"而不是"Cygwin模式"构建库.在Cygwin模式下,库使用Windows本机文件锁定,这违背了Cygwin的原理:在可能的情况下,Cygwin打包调用POSIX函数而不是直接指向Windows API,这样就cygwin1.dll可以提供正确的POSIX语义.
当访问所讨论的SQLite DB的所有程序都是使用Cygwin构建时,POSIX顾问文件锁定正是您想要的SQLite,这是Cygwin中的默认假设.但是,当您运行像TortoiseSVN这样的Windows本机Subversion程序以及纯POSIX Cygwin时svn,您会遇到冲突.当TortoiseSVN Windows资源管理器外壳扩展.svn/wc.db程序使用强制锁定锁定文件并且Cygwin svn出现并尝试对其进行建议锁定时,它会立即失败.Cygwin svn假设锁定尝试将立即成功或阻塞直到它成功,因此它错误地将锁定失败解释为磁盘I/O错误.
在Cygwin中,我们总是尝试尽可能地使用Windows本机程序.诀窍是找到一种方法来做到这一点,同时仍然与Cygwin程序玩得很好.
不是每个人都同意我们应该尝试这一点."Cygwin SQLite是Cygwin的一部分,所以它只需要与其他Cygwin程序一起使用,"一个小组会说.对手方将回答:"Cygwin在Windows上运行,所以它必须与其他Windows程序一起运行良好."
幸运的是,我们提出了一种让两个群体都满意的方法.
由于在Cygwin的SQLite的一部分3.7.17-x包装的努力,我测试一项新功能,即科琳娜Vinschen加入到cygwin1.dll1.7.19版本.它允许程序通过BSD文件锁定API请求强制文件锁定.我的部分改变是让Cygwin SQLite在用户的指导下打开和关闭此功能,允许相同的程序包满足Cygwin中心和Windows本地阵营的需求.
这个Cygwin DLL功能在1.7.20中进一步改进,我3.7.13-3使用最终的锁定语义发布了Cygwin SQLite .此版本允许选择三种锁定策略:POSIX咨询锁定,BSD建议锁定和BSD/Cygwin强制锁定.到目前为止,后一种策略已被证明与本机Windows锁定完全兼容.
后来,当Jan Nijtmans接管了Cygwin SQLite的维护时,他通过将其与SQLite VFS层完全集成来进一步增强了这种机制.这允许第四个选项:Cygwin SQLite在开始此旅程之前使用的本机Windows锁定.这主要是对抗BSD/Windows锁定策略与本机Windows SQLite程序不能完全合作的可能性.据我所知,没有人需要使用这个选项,但很高兴知道它就在那里.
如果您遇到的冲突是在Cygwin的命令行svn和TortoiseSVN Windows Explorer外壳扩展之间,那么还有另一种选择来解决它.TortoiseSVN也附带本机Windows Subversion命令行程序.如果你把它们放在PATHCygwin bin目录的前面,你根本不应该遇到这个问题.
me_*_*and 15
遇到同样的问题后,它(至少在我的情况下)似乎是与TortoiseSVN的互动.禁用TortoiseSVN的状态图标缓存(设置>图标叠加>状态缓存"无">应用)让一切正常.
(这显然无法解决潜在的问题,这似乎是由于Cygwin的Subversion程序包依赖于改变其访问模式的SQL包.正如我写的那样,在Cygwin邮件列表上有关如何讨论如何缓慢解决这个问题.)
| 归档时间: |
|
| 查看次数: |
21830 次 |
| 最近记录: |