用python实现git blob对象的创建和查询
2015-09-27 18:54
656 查看
Pro Git第九章用ruby创建了一个blob对象,按照其中介绍的步骤,用python实现了一遍。
除了直接用zlib,还有更简化的方法,用str的encode和decode方法,还不用import zlib:
import hashlib import zlib import os import os.path def calc_git_blob_obj(blob_content): blob_header = 'blob ' + str(len(blob_content)) + '\0' blob_store = blob_header + blob_content blob_sha1 = hashlib.sha1(blob_store).hexdigest() blob_compressed_content = zlib.compress(blob_store) return blob_sha1, blob_compressed_content def gen_git_blob_file(objects_dir, blob_sha1, blob_compressed_content): blob_dir = objects_dir + '/' + blob_sha1[:2] blob_file = blob_dir + '/' + blob_sha1[2:] if not os.path.exists(blob_dir): os.mkdir(blob_dir) open(blob_file, 'w').write(blob_compressed_content) def gen_git_blob_obj(objects_dir, blob_content): blob_sha1, blob_compressed_content = calc_git_blob_obj(blob_content) gen_git_blob_file(objects_dir, blob_sha1, blob_compressed_content) def get_git_blob_obj(blob_file): return zlib.decompress(open(blob_file, 'r').read()) gen_git_blob_obj('git/objects', 'what is up, doc?') print get_git_blob_obj('git/objects/bd/9dbf5aae1a3862dd1526723246b20206e5fc37')
除了直接用zlib,还有更简化的方法,用str的encode和decode方法,还不用import zlib:
#下面两条语句是等价的 #blob_compressed_content = zlib.compress(blob_store) blob_compressed_content = blob_store.encode('zip')
#下面两条语句也是等价的 #return zlib.decompress(open(blob_file, 'r').read()) return open(blob_file, 'r').read().decode('zip')
相关文章推荐
- python : defaultdict
- [Python学习] 专题六.局部变量、全局变量global、导入模块变量
- python入门之(语法介绍)
- 爬取淘宝MM图片
- 使用pip来安装和管理第三方Python包(library)
- 相关Python分割操作
- python编程之if/for/while语句
- python入门之(元组、文件)
- python(四)字典,集合,可变与不可变对象(下)
- python map
- Python namedtuple
- Python语法基础_控制语句_输入输出语句详解
- python tab
- python中执行命令行的方法
- python3.X 与其他语言小不同
- python-生成器
- python处理文件
- 生日悖论的Python实现
- Python游戏引擎开发(二):创建窗口以及重绘界面
- 20150926 kaggle Titanic入门篇excel&python.md