背景
电脑中收藏的开源项目太多,svn、git托管的都用,在系统目录中保存,近期电脑硬盘不够用,打算将这些项目的源代码删除,只保留开源地址记录。
思路
依次遍历目录下的子目录,判断其是否是用版本管理软件管理的代码文件夹,如果是则将该项目名称及开源URL保存到日志文件中。
获取git项目的URL
通过查看git help文档可知,在仓库目录下执行‘git remote -v’可以获取当前仓库的远程地址。
获取svn项目的URL
svn的服务器URL可以通过‘svn info’查看
开始编码
近期在学习python,故打算用python实现
python中的subprocess可以很方便的调用系统命令,输出内容也可以直接处理,参考代码如下:
[获取git remote地址 ]1 2 3 4 5 6
| def giturl(dir): os.chdir(dir) cmd = "git remote -v" p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) url = p.stdout.readlines()[0].split(' ')[0] return str(url).rstrip()
|
[获取svn remote地址 ]1 2 3 4 5 6
| def svnurl(dir): os.chdir(dir) cmd = 'svn info | find "http"' p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) url = p.stdout.readlines()[0].replace('URL:','') return str(url).rstrip()
|
小技巧
svn及git仓库目录下都有一个隐藏文件夹,分别是“.svn”、”.git”,通过判断是否含有该目录可以快速的区分是否是代码仓库。
循环遍历文件夹
写入日志
因为打算将目录下所有的仓库地址保存到一个文件,所以要用追加的方式写入日志文件。
[格式化字符串]1 2 3 4 5 6 7 8 9
| def writeitem(dir): item =svngit(dir) if item and item.find('http')>0: item = '%-40s %2s' %(dir, item) print item log = open('../svn-git.log', 'a+') log.write(item+'\r') log.close() pass
|
这里每遍历一个文件夹写入一条记录,也可以在遍历所有文件夹完成后再把结果一次写入,这样效率可能更快,我偷懒了。:)