http://developer.51cto.com/art/201108/282082.htm

这个选项的初衷是为了增强灵活性,当一个文件被其它人锁定后,仍然可以用“偷”的方式将锁强行拿过来。不过这也是引起代码冲突的潜在原因之一,我们决定将其屏避掉。这里用到的技术就是hook script。hook script其实是一些脚本文件,在windows环境下就是一些bat脚本。每当svn做一些特定操作时,比如“锁定”,“提交”时,就会到指定目录下查找相关的hook script并执行它,达到对相应命令的预处理。我们这里是需要在锁定前检查用户在申请锁定文件时是否勾选了"steal lock",如果勾选了,则中断操作,提示用户这个选项已被系统禁止。放置这个hook script的目录是跟代码库路径是相关的,我的目录是:E:RepositoriesHWCHhooks。安装后默认里面已经有若干个模板,以tmpl为扩展名,比如pre-lock.tmpl就是锁定前做的预操作,post-commit.tmpl就是提交后做的预操作。我们在里面新建一个文件:pre-lock.bat,然后在里面输入以下内容:

  1. @echo off
  2. REM [1] REPOS-PATH   (the path to this repository)
  3. REM [2] PATH         (the path in the repository about to be locked)
  4. REM [3] USER         (the user creating the lock)
  5. REM [4] COMMENT      (the comment of the lock)
  6. REM [5] STEAL-LOCK   (1 if the user is trying to steal the lock, else 0)
  7. setlocal
  8. ::svn对代码资源库路径与文件路径里的右小括号敏感,需要对其转义
  9. ::代码资源库路径
  10. set repos=%1
  11. set "repos=%repos:)=^)%"
  12. ::当前文件路径
  13. set repPath=%2
  14. set "repPath=%repPath:)=^)%"
  15. set userName=%3
  16. set isSteal=%5
  17. rem NO_STEALING
  18. ::如果没有被锁定,则直接跳走结束处理
  19. if /I '1'=='%isSteal%' goto NO_STEALING
  20. REM echo aaa >>d:\log.txt
  21. REM echo repos = %repos% >>d:\log.txt
  22. REM echo repPath = %repPath% >>d:\log.txt
  23. REM echo userName = %userName% >>d:\log.txt
  24. rem if the path has been locked, find the Owner.
  25. ::这里是处理重点
  26. ::通过svnlook lock %repos% %repPath%,命令获取锁信息,例如:
  27. ::  UUID Token: opaquelocktoken:1707b1a0-8dd1-a94e-87d2-6569a115cd5c
  28. ::  Owner: ljz
  29. ::  Created: 2011-08-08 21:05:31 +0800 (周一, 08 八月 2011)
  30. ::  Expires:
  31. ::  Comment (1 line):
  32. ::通过findstr /r /n ".",将所有行的前面加上行号,前返回所有行,例如:
  33. ::  1:UUID Token: opaquelocktoken:1707b1a0-8dd1-a94e-87d2-6569a115cd5c
  34. ::  2:Owner: ljz
  35. ::  3:Created: 2011-08-08 21:05:31 +0800 (周一, 08 八月 2011)
  36. ::  4:Expires:
  37. ::  5:Comment (1 line):
  38. ::通过tokens=1,2,3 delims=: ,以:号与空格作为分隔符,将上述每一行分隔,并将前三段分别装入变量%%i,%%j,%%k
  39. ::通过if %%i == 2 set LockedName=%%k,把第二行分隔后的第三段装入变量LockedName,在这里,就是ljz
  40. for /f "tokens=1,2,3 delims=: " %%i in ('svnlook lock %repos% %repPath% ^|findstr /r /n "."') do (
  41. if %%i == 2 set LockedName=%%k
  42. )
  43. rem If we get no result from svnlook, there's no lock, allow the lock to happen.
  44. ::如果没有获取到锁定信息,则直接跳走结束处理
  45. if not defined LockedName goto OK_EXIT
  46. rem If the person locking matches the lock's owner, allow the lock to happen.
  47. rem But this one won't effect, the SVN don't care if the person matchs, they just don't allow relock.
  48. REM echo userName = %userName% >>d:\log.txt
  49. REM echo LockedName = %LockedName% >>d:\log.txt
  50. ::如果锁定人与当前用户同名,则直接跳走结束处理
  51. if /I '%LockedName%'=='%userName%' goto OK_EXIT
  52. rem Otherwise, we've got an owner mismatch, so return failure:
  53. :WRONG_PERSON
  54. echo the path has been locked by %LockedName%, Pls contact %LockedName% to unlock it.>&2
  55. goto ERROR_EXIT
  56. :NO_STEALING
  57. echo Stealing lock is not allowed at this server.>&2
  58. :ERROR_EXIT
  59. endlocal
  60. exit 1
  61. :OK_EXIT
  62. endlocal
  63. exit 0

转载于:https://www.cnblogs.com/aaa6818162/archive/2012/07/27/2612623.html

d).关于steal lock相关推荐

  1. SVN steal lock

    昨天遇到一个SVN lock的问题,造成问题的过程大概是这样: 1.获得了某个文件a.doc的lock 2.更新svn时出错,再次更新时提示更新出错的文件版本有问题.提示如果clean up解决不了的 ...

  2. [SVN技巧]代码提交中遇到的两个问题及其解决方案

    前言 SVN在使用的过程中会遇到各种各样的问题,小黑在最近的使用中,遇到如下的两个问题,这里贴出来供大家参考 问题记录 SVN在源码仓库中不存在,导致无法删除和上传 问题提示: Working cop ...

  3. 英语august_独家:August Smart Lock缺陷向黑客开放您的Wi-Fi网络

    英语august The security hole that Bitdefender found in the August Smart Lock Pro + Connect won't let a ...

  4. xv6 6.S081 Lab7: Lock

    xv6 6.S081 Lab7: Lock 写在前面 实验介绍 开始! Memory Allocator Buffer Cache lock代码在这里.本次实验理解起来简单,做起来也容易 写在前面 老 ...

  5. 【java线程】锁机制:synchronized、Lock、Condition

    [Java线程]锁机制:synchronized.Lock.Condition 原创 2013年08月14日 17:15:55 标签:Java /多线程 74967 http://www.infoq. ...

  6. c# lock (obj) 与 lock (this) 区别

    lock(obj) 锁定 obj 对象 lock(this) 锁定 当前实例对象,如果有多个类实例的话,lock锁定的只是当前类实例,对其它类实例无影响. 直接上代码. 主窗体代码如下: delega ...

  7. java连接mysql执行ddl_Mysql 执行DDL导致Waiting for table metadata lock

    MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景.而且,一旦alter table TableA的操作停滞在Wa ...

  8. Go 分布式学习利器(18)-- Go并发编程之lock+WaitGroup实现线程安全

    Go语言中通过Groutine 启动一个Go协程,不同协程之间是并发执行的,就像C++/Java中线程之间线程安全是一个常见的问题. 如下Go 语言代码: func TestConcurrent(t ...

  9. apt Could not get lock /var/lib/dpkg/lock 解决方案

    apt Could not get lock /var/lib/dpkg/lock 解决方案 删除锁定文件 sudo rm /var/lib/dpkg/lock

最新文章

  1. 松耦合和紧耦合的架构设计、性能对比
  2. Android手机系统adb常用的命令
  3. 程序人生:写给新入行程序员职业生涯的10条建议
  4. php 微信小程序 循环 多选,微信小程序实现多选功能
  5. 开发文档怎么编写_PoC 编写指南
  6. 数据结构 快速排序的三种实现 (hoare版本 挖坑法 前后指针版本)与非递归实现
  7. Linux 线程调度与优先级
  8. c语言计算10亿位圆周率,C语言:圆周率的计算
  9. 从wireshark 抓包中的导出 H.264 变成可用暴风直接播放的H264 裸码流文件
  10. java:html转pdf的方法
  11. java 填充图片_java图片缩放实现图片填充整个屏幕
  12. java duplicate key_Stream 操作 Duplicate key问题
  13. Linux TCP Timestamps 没鸟用
  14. qlv转mp4绿色版工具
  15. 学ios 需要学html5me,针对iOS平台移植Flash内容的指导教程(1)
  16. C语言学习(2):enum枚举时出现的问题:
  17. OPPO A35上手简评:一款中规中矩的入门级智能手机
  18. 2019年3月CCF CSP 认证题解第一题
  19. 在一台数据库服务器上创建多个金仓数据库
  20. mysql5.5升级至5.7

热门文章

  1. LVS——NAT网络地址转换模式
  2. Python笔记:0
  3. mvn exec: java_实战|Java 测试覆盖率 Jacoco插桩的不同形式总结和踩坑记录(下)
  4. 测试面试题集-生活物品测试:杯子、伞、钢笔、桌子
  5. 李宏毅机器学习2021】机器学习模型的可解释性 (Explainable ML)
  6. aelf宣布推出集中式资产管理系统CAM
  7. SAP License:SAP 更改背景图片
  8. SAP License:我们到底需要什么能力?
  9. 关于信贷资产逾期计算口径和小微模型的经典问题与答案
  10. mysql事务、视图