档案

Archive for the ‘Python’ Category

Patch中的空文件

12月 14, 2011 留下评论

通过版本管理工具生成的patch中若包含空文件, 直接用patch在目标项目中去应用这个补丁,这个空文件不会被patch创建,这是因为patch会自动忽略掉补丁中的空文件。
例如,version0 和version1分别是同一个git项目的两个版本拷贝

$ ls version0/
001.txt
$ ls version1/
001.txt  002.txt

version1比version0多了一个002.txt的空文件, 用git diff生成test.patch

$cat test.patch
diff --git a/002.txt b/002.txt
new file mode 100644
index 0000000..e69de29

然后再version01中用patch命令应用test.path,出现提示“Only garbage was found…”

$ patch -p1

解决方法: 利用版本管理工具去应用补丁, 比如git中,利用“git apply”去打补丁。

$ git apply ../test.patch

一般情况下,很少直接创建空文件并提交, 但是这种情况一般发生在python package中, python package需要在目录中有个__init__.py文件
__init__.py是个空文件, 在patch的时候,目标目录中并不会创建这个文件, 如果直接用patch命令,于是悲剧发生了…

Traceback (most recent call last):
  File "gyp/gyp", line 18, in
    sys.exit(gyp.main(sys.argv[1:]))
  File "gyp/pylib/gyp/__init__.py", line 436, in main
    options.circular_check)
  File "gyp/pylib/gyp/__init__.py", line 55, in Load
    generator = __import__(generator_name, globals(), locals(), generator_name)
ImportError: No module named generator.make

另外一种解决方法 提交的__init__.py中插入一些空格字符或者注释,以避免上述情况的发生。

分类:Git, Python