d).关于steal lock
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,然后在里面输入以下内容:
- @echo off
- REM [1] REPOS-PATH (the path to this repository)
- REM [2] PATH (the path in the repository about to be locked)
- REM [3] USER (the user creating the lock)
- REM [4] COMMENT (the comment of the lock)
- REM [5] STEAL-LOCK (1 if the user is trying to steal the lock, else 0)
- setlocal
- ::svn对代码资源库路径与文件路径里的右小括号敏感,需要对其转义
- ::代码资源库路径
- set repos=%1
- set "repos=%repos:)=^)%"
- ::当前文件路径
- set repPath=%2
- set "repPath=%repPath:)=^)%"
- set userName=%3
- set isSteal=%5
- rem NO_STEALING
- ::如果没有被锁定,则直接跳走结束处理
- if /I '1'=='%isSteal%' goto NO_STEALING
- REM echo aaa >>d:\log.txt
- REM echo repos = %repos% >>d:\log.txt
- REM echo repPath = %repPath% >>d:\log.txt
- REM echo userName = %userName% >>d:\log.txt
- rem if the path has been locked, find the Owner.
- ::这里是处理重点
- ::通过svnlook lock %repos% %repPath%,命令获取锁信息,例如:
- :: UUID Token: opaquelocktoken:1707b1a0-8dd1-a94e-87d2-6569a115cd5c
- :: Owner: ljz
- :: Created: 2011-08-08 21:05:31 +0800 (周一, 08 八月 2011)
- :: Expires:
- :: Comment (1 line):
- ::通过findstr /r /n ".",将所有行的前面加上行号,前返回所有行,例如:
- :: 1:UUID Token: opaquelocktoken:1707b1a0-8dd1-a94e-87d2-6569a115cd5c
- :: 2:Owner: ljz
- :: 3:Created: 2011-08-08 21:05:31 +0800 (周一, 08 八月 2011)
- :: 4:Expires:
- :: 5:Comment (1 line):
- ::通过tokens=1,2,3 delims=: ,以:号与空格作为分隔符,将上述每一行分隔,并将前三段分别装入变量%%i,%%j,%%k
- ::通过if %%i == 2 set LockedName=%%k,把第二行分隔后的第三段装入变量LockedName,在这里,就是ljz
- for /f "tokens=1,2,3 delims=: " %%i in ('svnlook lock %repos% %repPath% ^|findstr /r /n "."') do (
- if %%i == 2 set LockedName=%%k
- )
- rem If we get no result from svnlook, there's no lock, allow the lock to happen.
- ::如果没有获取到锁定信息,则直接跳走结束处理
- if not defined LockedName goto OK_EXIT
- rem If the person locking matches the lock's owner, allow the lock to happen.
- rem But this one won't effect, the SVN don't care if the person matchs, they just don't allow relock.
- REM echo userName = %userName% >>d:\log.txt
- REM echo LockedName = %LockedName% >>d:\log.txt
- ::如果锁定人与当前用户同名,则直接跳走结束处理
- if /I '%LockedName%'=='%userName%' goto OK_EXIT
- rem Otherwise, we've got an owner mismatch, so return failure:
- :WRONG_PERSON
- echo the path has been locked by %LockedName%, Pls contact %LockedName% to unlock it.>&2
- goto ERROR_EXIT
- :NO_STEALING
- echo Stealing lock is not allowed at this server.>&2
- :ERROR_EXIT
- endlocal
- exit 1
- :OK_EXIT
- endlocal
- exit 0
转载于:https://www.cnblogs.com/aaa6818162/archive/2012/07/27/2612623.html
d).关于steal lock相关推荐
- SVN steal lock
昨天遇到一个SVN lock的问题,造成问题的过程大概是这样: 1.获得了某个文件a.doc的lock 2.更新svn时出错,再次更新时提示更新出错的文件版本有问题.提示如果clean up解决不了的 ...
- [SVN技巧]代码提交中遇到的两个问题及其解决方案
前言 SVN在使用的过程中会遇到各种各样的问题,小黑在最近的使用中,遇到如下的两个问题,这里贴出来供大家参考 问题记录 SVN在源码仓库中不存在,导致无法删除和上传 问题提示: Working cop ...
- 英语august_独家:August Smart Lock缺陷向黑客开放您的Wi-Fi网络
英语august The security hole that Bitdefender found in the August Smart Lock Pro + Connect won't let a ...
- xv6 6.S081 Lab7: Lock
xv6 6.S081 Lab7: Lock 写在前面 实验介绍 开始! Memory Allocator Buffer Cache lock代码在这里.本次实验理解起来简单,做起来也容易 写在前面 老 ...
- 【java线程】锁机制:synchronized、Lock、Condition
[Java线程]锁机制:synchronized.Lock.Condition 原创 2013年08月14日 17:15:55 标签:Java /多线程 74967 http://www.infoq. ...
- c# lock (obj) 与 lock (this) 区别
lock(obj) 锁定 obj 对象 lock(this) 锁定 当前实例对象,如果有多个类实例的话,lock锁定的只是当前类实例,对其它类实例无影响. 直接上代码. 主窗体代码如下: delega ...
- java连接mysql执行ddl_Mysql 执行DDL导致Waiting for table metadata lock
MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景.而且,一旦alter table TableA的操作停滞在Wa ...
- Go 分布式学习利器(18)-- Go并发编程之lock+WaitGroup实现线程安全
Go语言中通过Groutine 启动一个Go协程,不同协程之间是并发执行的,就像C++/Java中线程之间线程安全是一个常见的问题. 如下Go 语言代码: func TestConcurrent(t ...
- apt Could not get lock /var/lib/dpkg/lock 解决方案
apt Could not get lock /var/lib/dpkg/lock 解决方案 删除锁定文件 sudo rm /var/lib/dpkg/lock
最新文章
- 松耦合和紧耦合的架构设计、性能对比
- Android手机系统adb常用的命令
- 程序人生:写给新入行程序员职业生涯的10条建议
- php 微信小程序 循环 多选,微信小程序实现多选功能
- 开发文档怎么编写_PoC 编写指南
- 数据结构 快速排序的三种实现 (hoare版本 挖坑法 前后指针版本)与非递归实现
- Linux 线程调度与优先级
- c语言计算10亿位圆周率,C语言:圆周率的计算
- 从wireshark 抓包中的导出 H.264 变成可用暴风直接播放的H264 裸码流文件
- java:html转pdf的方法
- java 填充图片_java图片缩放实现图片填充整个屏幕
- java duplicate key_Stream 操作 Duplicate key问题
- Linux TCP Timestamps 没鸟用
- qlv转mp4绿色版工具
- 学ios 需要学html5me,针对iOS平台移植Flash内容的指导教程(1)
- C语言学习(2):enum枚举时出现的问题:
- OPPO A35上手简评:一款中规中矩的入门级智能手机
- 2019年3月CCF CSP 认证题解第一题
- 在一台数据库服务器上创建多个金仓数据库
- mysql5.5升级至5.7